Sync prediction client and folders
- Notifies prediction client when a folder is converted into workspace
item as a result of losing all items but one.
- Notifies predction client when a folder is created from an item in the
workspace with no duplicates.
Bug: 148749638
Test: Manual
Change-Id: Ifd51a6fe2a40c8baf4d88e2dba1e5bdc925e1608
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
index f490426..0b05427 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
@@ -458,17 +458,40 @@
/**
* Unpins pinned app when it's converted into a folder
*/
- public void folderCreatedFromIcon(ItemInfo info, FolderInfo folderInfo) {
+ public void folderCreatedFromWorkspaceItem(ItemInfo info, FolderInfo folderInfo) {
+ if (info.itemType != LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
+ return;
+ }
AppTarget target = getAppTargetFromItemInfo(info);
- if (folderInfo.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT && !isInHotseat(
- info)) {
+ ViewGroup hotseatVG = mHotseat.getShortcutsAndWidgets();
+ ViewGroup firstScreenVG = mLauncher.getWorkspace().getScreenWithId(
+ Workspace.FIRST_SCREEN_ID).getShortcutsAndWidgets();
+
+ if (isInHotseat(folderInfo) && !getPinnedAppTargetsInViewGroup(hotseatVG).contains(
+ target)) {
notifyItemAction(target, APP_LOCATION_HOTSEAT, APPTARGET_ACTION_UNPIN);
- } else if (folderInfo.container == LauncherSettings.Favorites.CONTAINER_DESKTOP
- && folderInfo.screenId == Workspace.FIRST_SCREEN_ID && !isInFirstPage(info)) {
+ } else if (isInFirstPage(folderInfo) && !getPinnedAppTargetsInViewGroup(
+ firstScreenVG).contains(target)) {
notifyItemAction(target, APP_LOCATION_WORKSPACE, APPTARGET_ACTION_UNPIN);
}
}
+ /**
+ * Pins workspace item created when all folder items are removed but one
+ */
+ public void folderConvertedToWorkspaceItem(ItemInfo info, FolderInfo folderInfo) {
+ if (info.itemType != LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
+ return;
+ }
+ AppTarget target = getAppTargetFromItemInfo(info);
+ if (isInHotseat(info)) {
+ notifyItemAction(target, APP_LOCATION_HOTSEAT, AppTargetEvent.ACTION_PIN);
+ } else if (isInFirstPage(info)) {
+ notifyItemAction(target, APP_LOCATION_WORKSPACE, AppTargetEvent.ACTION_PIN);
+ }
+ }
+
+
@Override
public void onDragEnd() {
if (mDragObject == null) {
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 8d73a96..d1a487a 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -30,7 +30,6 @@
import androidx.annotation.Nullable;
import com.android.launcher3.BaseQuickstepLauncher;
-import com.android.launcher3.CellLayout;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
@@ -38,7 +37,7 @@
import com.android.launcher3.WorkspaceItemInfo;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.config.FeatureFlags;
-import com.android.launcher3.folder.FolderIcon;
+import com.android.launcher3.folder.Folder;
import com.android.launcher3.graphics.RotationMode;
import com.android.launcher3.hybridhotseat.HotseatPredictionController;
import com.android.launcher3.popup.SystemShortcut;
@@ -191,13 +190,19 @@
}
@Override
- public FolderIcon addFolder(CellLayout layout, WorkspaceItemInfo info, int container,
- int screenId, int cellX, int cellY) {
- FolderIcon fi = super.addFolder(layout, info, container, screenId, cellX, cellY);
+ public void folderCreatedFromItem(Folder folder, WorkspaceItemInfo itemInfo) {
+ super.folderCreatedFromItem(folder, itemInfo);
if (mHotseatPredictionController != null) {
- mHotseatPredictionController.folderCreatedFromIcon(info, fi.getFolder().getInfo());
+ mHotseatPredictionController.folderCreatedFromWorkspaceItem(itemInfo, folder.getInfo());
}
- return fi;
+ }
+
+ @Override
+ public void folderConvertedToItem(Folder folder, WorkspaceItemInfo itemInfo) {
+ super.folderConvertedToItem(folder, itemInfo);
+ if (mHotseatPredictionController != null) {
+ mHotseatPredictionController.folderConvertedToWorkspaceItem(itemInfo, folder.getInfo());
+ }
}
@Override
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index d250658..89c3b93 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -100,6 +100,7 @@
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragView;
+import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderGridOrganizer;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.graphics.RotationMode;
@@ -1718,8 +1719,8 @@
/**
* Creates and adds new folder to CellLayout
*/
- public FolderIcon addFolder(CellLayout layout, WorkspaceItemInfo info, int container,
- final int screenId, int cellX, int cellY) {
+ public FolderIcon addFolder(CellLayout layout, int container, final int screenId, int cellX,
+ int cellY) {
final FolderInfo folderInfo = new FolderInfo();
folderInfo.title = "";
@@ -1737,6 +1738,16 @@
}
/**
+ * Called when a workspace item is converted into a folder
+ */
+ public void folderCreatedFromItem(Folder folder, WorkspaceItemInfo itemInfo){}
+
+ /**
+ * Called when a folder is converted into a workspace item
+ */
+ public void folderConvertedToItem(Folder folder, WorkspaceItemInfo itemInfo) {}
+
+ /**
* Unbinds the view for the specified item, and removes the item and all its children.
*
* @param v the view being removed.
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index b725002..b7f8547 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -1702,8 +1702,8 @@
float scale = mLauncher.getDragLayer().getDescendantRectRelativeToSelf(v, folderLocation);
target.removeView(v);
- FolderIcon fi = mLauncher.addFolder(target, sourceInfo, container, screenId,
- targetCell[0], targetCell[1]);
+ FolderIcon fi = mLauncher.addFolder(target, container, screenId, targetCell[0],
+ targetCell[1]);
destInfo.cellX = -1;
destInfo.cellY = -1;
sourceInfo.cellX = -1;
@@ -1722,6 +1722,7 @@
fi.addItem(destInfo);
fi.addItem(sourceInfo);
}
+ mLauncher.folderCreatedFromItem(fi.getFolder(), destInfo);
return true;
}
return false;
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index 024c7dd..8e80916 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -1109,13 +1109,14 @@
int itemCount = getItemCount();
if (itemCount <= 1) {
View newIcon = null;
+ WorkspaceItemInfo finalItem = null;
if (itemCount == 1) {
// Move the item from the folder to the workspace, in the position of the
// folder
CellLayout cellLayout = mLauncher.getCellLayout(mInfo.container,
mInfo.screenId);
- WorkspaceItemInfo finalItem = mInfo.contents.remove(0);
+ finalItem = mInfo.contents.remove(0);
newIcon = mLauncher.createShortcut(cellLayout, finalItem);
mLauncher.getModelWriter().addOrMoveItemInDatabase(finalItem,
mInfo.container, mInfo.screenId, mInfo.cellX, mInfo.cellY);
@@ -1136,6 +1137,9 @@
// Focus the newly created child
newIcon.requestFocus();
}
+ if (finalItem != null) {
+ mLauncher.folderConvertedToItem(mFolderIcon.getFolder(), finalItem);
+ }
}
}
};