mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 00:06:47 +00:00
Add new motion for when Folder preview changes due to onDrop.
Instead of changing the display order of the Folder to preserve the upper left quadrant, we are opting to change the Folder Icon preview to always show the upper left quadrant. This means that when adding items to a Folder, the preview items may change. (They will change when the column size increases). Bug: 27944225 Bug: 63140071 Change-Id: I863c2479469d68559cab2878030c2087d48217d6
This commit is contained in:
@@ -221,7 +221,15 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
}
|
||||
|
||||
public void addItem(ShortcutInfo item) {
|
||||
mInfo.add(item, true);
|
||||
addItem(item, true);
|
||||
}
|
||||
|
||||
public void addItem(ShortcutInfo item, boolean animate) {
|
||||
mInfo.add(item, animate);
|
||||
}
|
||||
|
||||
public void removeItem(ShortcutInfo item, boolean animate) {
|
||||
mInfo.remove(item, animate);
|
||||
}
|
||||
|
||||
public void onDragEnter(ItemInfo dragInfo) {
|
||||
@@ -276,7 +284,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
}
|
||||
|
||||
private void onDrop(final ShortcutInfo item, DragView animateView, Rect finalRect,
|
||||
float scaleRelativeToDragLayer, final int index, Runnable postAnimationRunnable) {
|
||||
float scaleRelativeToDragLayer, int index, Runnable postAnimationRunnable) {
|
||||
item.cellX = -1;
|
||||
item.cellY = -1;
|
||||
|
||||
@@ -304,13 +312,39 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
workspace.resetTransitionTransform((CellLayout) getParent().getParent());
|
||||
}
|
||||
|
||||
boolean itemAdded = false;
|
||||
if (index >= mPreviewLayoutRule.maxNumItems()
|
||||
&& mPreviewLayoutRule.hasEnterExitIndices()) {
|
||||
List<BubbleTextView> oldPreviewItems = getPreviewItemsOnPage(0);
|
||||
addItem(item, false);
|
||||
List<BubbleTextView> newPreviewItems = getPreviewItemsOnPage(0);
|
||||
|
||||
if (!oldPreviewItems.containsAll(newPreviewItems)) {
|
||||
for (int i = 0; i < newPreviewItems.size(); ++i) {
|
||||
if (newPreviewItems.get(i).getTag().equals(item)) {
|
||||
// If the item dropped is going to be in the preview, we update the
|
||||
// index here to reflect its position in the preview.
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
mPreviewItemManager.onDrop(oldPreviewItems, newPreviewItems, item);
|
||||
itemAdded = true;
|
||||
} else {
|
||||
removeItem(item, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (!itemAdded) {
|
||||
addItem(item);
|
||||
}
|
||||
|
||||
int[] center = new int[2];
|
||||
float scale = getLocalCenterForIndex(index, index + 1, center);
|
||||
center[0] = (int) Math.round(scaleRelativeToDragLayer * center[0]);
|
||||
center[1] = (int) Math.round(scaleRelativeToDragLayer * center[1]);
|
||||
|
||||
to.offset(center[0] - animateView.getMeasuredWidth() / 2,
|
||||
center[1] - animateView.getMeasuredHeight() / 2);
|
||||
center[1] - animateView.getMeasuredHeight() / 2);
|
||||
|
||||
float finalAlpha = index < mPreviewLayoutRule.maxNumItems() ? 0.5f : 0f;
|
||||
|
||||
@@ -319,13 +353,14 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
1, 1, finalScale, finalScale, DROP_IN_ANIMATION_DURATION,
|
||||
new DecelerateInterpolator(2), new AccelerateInterpolator(2),
|
||||
postAnimationRunnable, DragLayer.ANIMATION_END_DISAPPEAR, null);
|
||||
addItem(item);
|
||||
|
||||
mFolder.hideItem(item);
|
||||
|
||||
mPreviewItemManager.hidePreviewItem(index, true);
|
||||
if (!itemAdded) mPreviewItemManager.hidePreviewItem(index, true);
|
||||
final int finalIndex = index;
|
||||
postDelayed(new Runnable() {
|
||||
public void run() {
|
||||
mPreviewItemManager.hidePreviewItem(index, false);
|
||||
mPreviewItemManager.hidePreviewItem(finalIndex, false);
|
||||
mFolder.showItem(item);
|
||||
invalidate();
|
||||
}
|
||||
@@ -655,11 +690,16 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
|
||||
interface PreviewLayoutRule {
|
||||
PreviewItemDrawingParams computePreviewItemDrawingParams(int index, int curNumItems,
|
||||
PreviewItemDrawingParams params);
|
||||
PreviewItemDrawingParams params);
|
||||
void init(int availableSpace, float intrinsicIconSize, boolean rtl);
|
||||
float scaleForItem(int index, int totalNumItems);
|
||||
float getIconSize();
|
||||
int maxNumItems();
|
||||
boolean clipToBackground();
|
||||
|
||||
boolean hasEnterExitIndices();
|
||||
int getExitIndex();
|
||||
int getEnterIndex();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user