summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/model
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2017-05-04 16:47:11 -0700
committerSunny Goyal <sunnygoyal@google.com>2017-05-22 13:31:04 -0700
commita474a9bcf5d533ac942c58409e45e5ec6d8b4893 (patch)
tree86bc1eea564da58343b1d64e414ccd2e8bec2f03 /src/com/android/launcher3/model
parent998dbecf5397162f13acb8a84cfe71c2ed4d8741 (diff)
downloadandroid_packages_apps_Trebuchet-a474a9bcf5d533ac942c58409e45e5ec6d8b4893.tar.gz
android_packages_apps_Trebuchet-a474a9bcf5d533ac942c58409e45e5ec6d8b4893.tar.bz2
android_packages_apps_Trebuchet-a474a9bcf5d533ac942c58409e45e5ec6d8b4893.zip
Simplifying logic for managed for icon addition
> Checking for duplicate icons before adding new icons For O and above, icon addition is controlled using SessionCommitReceiver. As long as the Launcher is the default app, it will keep adding icons on the homescreen. Apps installed while launcher was not the default homescreen, no icons will be added. For below O, icons are added based on package event. As long as the Launcher process is running, it will keep adding icons on the homescreen. Apps installed while the launcher app was dead, no icons will be added. Bug: 37528649 Bug: 37082950 Bug: 34112546 Change-Id: Ic99501fa476c00474a479f2a36c24614bfa3f4bf
Diffstat (limited to 'src/com/android/launcher3/model')
-rw-r--r--src/com/android/launcher3/model/AddWorkspaceItemsTask.java47
-rw-r--r--src/com/android/launcher3/model/PackageUpdatedTask.java14
2 files changed, 48 insertions, 13 deletions
diff --git a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
index 10fb5828c..2e8e15bf7 100644
--- a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
+++ b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
@@ -17,6 +17,8 @@ package com.android.launcher3.model;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.LauncherActivityInfo;
+import android.os.Process;
import android.os.UserHandle;
import android.util.LongSparseArray;
import android.util.Pair;
@@ -35,9 +37,11 @@ import com.android.launcher3.LauncherSettings;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.GridOccupancy;
+import com.android.launcher3.util.ManagedProfileHeuristic.UserFolderInfo;
import com.android.launcher3.util.Provider;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
/**
@@ -45,18 +49,18 @@ import java.util.List;
*/
public class AddWorkspaceItemsTask extends ExtendedModelTask {
- private final Provider<List<ItemInfo>> mAppsProvider;
+ private final Provider<List<Pair<ItemInfo, Object>>> mAppsProvider;
/**
* @param appsProvider items to add on the workspace
*/
- public AddWorkspaceItemsTask(Provider<List<ItemInfo>> appsProvider) {
+ public AddWorkspaceItemsTask(Provider<List<Pair<ItemInfo, Object>>> appsProvider) {
mAppsProvider = appsProvider;
}
@Override
public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) {
- List<ItemInfo> workspaceApps = mAppsProvider.get();
+ List<Pair<ItemInfo, Object>> workspaceApps = mAppsProvider.get();
if (workspaceApps.isEmpty()) {
return;
}
@@ -64,13 +68,17 @@ public class AddWorkspaceItemsTask extends ExtendedModelTask {
final ArrayList<ItemInfo> addedItemsFinal = new ArrayList<>();
final ArrayList<Long> addedWorkspaceScreensFinal = new ArrayList<>();
+ HashMap<UserHandle, UserFolderInfo> userFolderMap = new HashMap<>();
// Get the list of workspace screens. We need to append to this list and
// can not use sBgWorkspaceScreens because loadWorkspace() may not have been
// called.
ArrayList<Long> workspaceScreens = LauncherModel.loadWorkspaceScreensDb(context);
synchronized(dataModel) {
- for (ItemInfo item : workspaceApps) {
+
+ List<ItemInfo> filteredItems = new ArrayList<>();
+ for (Pair<ItemInfo, Object> entry : workspaceApps) {
+ ItemInfo item = entry.first;
if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION ||
item.itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT) {
// Short-circuit this logic if the icon exists somewhere on the workspace
@@ -79,6 +87,32 @@ public class AddWorkspaceItemsTask extends ExtendedModelTask {
}
}
+ if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
+ if (item instanceof AppInfo) {
+ item = ((AppInfo) item).makeShortcut();
+ }
+
+ if (!Process.myUserHandle().equals(item.user)) {
+ // Check if this belongs to a work folder.
+ if (!(entry.second instanceof LauncherActivityInfo)) {
+ continue;
+ }
+
+ UserFolderInfo userFolderInfo = userFolderMap.get(item.user);
+ if (userFolderInfo == null) {
+ userFolderInfo = new UserFolderInfo(context, item.user, dataModel);
+ userFolderMap.put(item.user, userFolderInfo);
+ }
+ item = userFolderInfo.convertToWorkspaceItem(
+ (ShortcutInfo) item, (LauncherActivityInfo) entry.second);
+ }
+ }
+ if (item != null) {
+ filteredItems.add(item);
+ }
+ }
+
+ for (ItemInfo item : filteredItems) {
// Find appropriate space for the item.
Pair<Long, int[]> coords = findSpaceForItem(app, dataModel, workspaceScreens,
addedWorkspaceScreensFinal, item.spanX, item.spanY);
@@ -130,6 +164,10 @@ public class AddWorkspaceItemsTask extends ExtendedModelTask {
}
});
}
+
+ for (UserFolderInfo userFolderInfo : userFolderMap.values()) {
+ userFolderInfo.applyPendingState(getModelWriter());
+ }
}
protected void updateScreens(Context context, ArrayList<Long> workspaceScreens) {
@@ -276,4 +314,5 @@ public class AddWorkspaceItemsTask extends ExtendedModelTask {
}
return occupied.findVacantCell(xy, spanX, spanY);
}
+
}
diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java
index b58efb647..8380f0136 100644
--- a/src/com/android/launcher3/model/PackageUpdatedTask.java
+++ b/src/com/android/launcher3/model/PackageUpdatedTask.java
@@ -35,6 +35,7 @@ import com.android.launcher3.LauncherModel.CallbackTask;
import com.android.launcher3.LauncherModel.Callbacks;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings.Favorites;
+import com.android.launcher3.SessionCommitReceiver;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
import com.android.launcher3.compat.LauncherAppsCompat;
@@ -43,7 +44,6 @@ import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.util.FlagOp;
import com.android.launcher3.util.ItemInfoMatcher;
-import com.android.launcher3.util.ManagedProfileHeuristic;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageUserKey;
@@ -100,11 +100,11 @@ public class PackageUpdatedTask extends ExtendedModelTask {
appsList.removePackage(packages[i], Process.myUserHandle());
}
appsList.addPackage(context, packages[i], mUser);
- }
- ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(context, mUser);
- if (heuristic != null) {
- heuristic.processPackageAdd(mPackages);
+ // Automatically add homescreen icon for work profile apps for below O device.
+ if (!Utilities.isAtLeastO() && !Process.myUserHandle().equals(mUser)) {
+ SessionCommitReceiver.queueAppIconAddition(context, packages[i], mUser);
+ }
}
break;
}
@@ -119,10 +119,6 @@ public class PackageUpdatedTask extends ExtendedModelTask {
flagOp = FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE);
break;
case OP_REMOVE: {
- ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(context, mUser);
- if (heuristic != null) {
- heuristic.processPackageRemoved(mPackages);
- }
for (int i = 0; i < N; i++) {
iconCache.removeIconsForPkg(packages[i], mUser);
}