Loading src/com/android/launcher3/AllAppsList.java +3 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.launcher3.compat.LauncherActivityInfoCompat; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.StringFilter; import java.util.ArrayList; import java.util.HashSet; Loading Loading @@ -122,12 +123,12 @@ class AllAppsList { /** * Updates the apps for the given packageName and user based on {@param op}. */ public void updatePackageFlags(String packageName, UserHandleCompat user, FlagOp op) { public void updatePackageFlags(StringFilter pkgFilter, UserHandleCompat user, FlagOp op) { final List<AppInfo> data = this.data; for (int i = data.size() - 1; i >= 0; i--) { AppInfo info = data.get(i); final ComponentName component = info.intent.getComponent(); if (info.user.equals(user) && packageName.equals(component.getPackageName())) { if (info.user.equals(user) && pkgFilter.matches(component.getPackageName())) { info.isDisabled = op.apply(info.isDisabled); modified.add(info); } Loading src/com/android/launcher3/LauncherModel.java +25 −12 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import com.android.launcher3.util.CursorIconInfo; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.ManagedProfileHeuristic; import com.android.launcher3.util.StringFilter; import com.android.launcher3.util.Thunk; import com.android.launcher3.util.ViewOnDrawExecutor; Loading Loading @@ -1226,10 +1227,16 @@ public class LauncherModel extends BroadcastReceiver callbacks.bindSearchProviderChanged(); } } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_ADDED.equals(action) || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action) || LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) { UserManagerCompat.getInstance(context).enableAndResetCache(); forceReload(); } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { UserHandleCompat user = UserHandleCompat.fromIntent(intent); if (user != null) { enqueuePackageUpdated(new PackageUpdatedTask( PackageUpdatedTask.OP_USER_AVAILABILITY_CHANGE, new String[0], user)); } } } Loading Loading @@ -2914,7 +2921,7 @@ public class LauncherModel extends BroadcastReceiver public static final int OP_UNAVAILABLE = 4; // external media unmounted public static final int OP_SUSPEND = 5; // package suspended public static final int OP_UNSUSPEND = 6; // package unsuspended public static final int OP_USER_AVAILABILITY_CHANGE = 7; // user available/unavailable public PackageUpdatedTask(int op, String[] packages, UserHandleCompat user) { mOp = op; Loading @@ -2932,6 +2939,7 @@ public class LauncherModel extends BroadcastReceiver final String[] packages = mPackages; final int N = packages.length; FlagOp flagOp = FlagOp.NO_OP; StringFilter pkgFilter = StringFilter.of(new HashSet<>(Arrays.asList(packages))); switch (mOp) { case OP_ADD: { for (int i=0; i<N; i++) { Loading Loading @@ -2980,10 +2988,16 @@ public class LauncherModel extends BroadcastReceiver flagOp = mOp == OP_SUSPEND ? FlagOp.addFlag(ShortcutInfo.FLAG_DISABLED_SUSPENDED) : FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_SUSPENDED); for (int i=0; i<N; i++) { if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.(un)suspend " + packages[i]); mBgAllAppsList.updatePackageFlags(packages[i], mUser, flagOp); } if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.(un)suspend " + packages); mBgAllAppsList.updatePackageFlags(pkgFilter, mUser, flagOp); break; case OP_USER_AVAILABILITY_CHANGE: flagOp = UserManagerCompat.getInstance(context).isQuietModeEnabled(mUser) ? FlagOp.addFlag(ShortcutInfo.FLAG_DISABLED_QUIET_USER) : FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_QUIET_USER); // We want to update all packages for this user. pkgFilter = StringFilter.matchesAll(); mBgAllAppsList.updatePackageFlags(pkgFilter, mUser, flagOp); break; } Loading Loading @@ -3036,7 +3050,6 @@ public class LauncherModel extends BroadcastReceiver final ArrayList<ShortcutInfo> removedShortcuts = new ArrayList<ShortcutInfo>(); final ArrayList<LauncherAppWidgetInfo> widgets = new ArrayList<LauncherAppWidgetInfo>(); HashSet<String> packageSet = new HashSet<String>(Arrays.asList(packages)); synchronized (sBgLock) { for (ItemInfo info : sBgItemsIdMap) { if (info instanceof ShortcutInfo && mUser.equals(info.user)) { Loading @@ -3046,7 +3059,7 @@ public class LauncherModel extends BroadcastReceiver // Update shortcuts which use iconResource. if ((si.iconResource != null) && packageSet.contains(si.iconResource.packageName)) { && pkgFilter.matches(si.iconResource.packageName)) { Bitmap icon = Utilities.createIconBitmap( si.iconResource.packageName, si.iconResource.resourceName, context); Loading @@ -3058,7 +3071,7 @@ public class LauncherModel extends BroadcastReceiver } ComponentName cn = si.getTargetComponent(); if (cn != null && packageSet.contains(cn.getPackageName())) { if (cn != null && pkgFilter.matches(cn.getPackageName())) { AppInfo appInfo = addedOrUpdatedApps.get(cn); if (si.isPromise()) { Loading Loading @@ -3119,11 +3132,11 @@ public class LauncherModel extends BroadcastReceiver if (infoUpdated) { updateItemInDatabase(context, si); } } else if (info instanceof LauncherAppWidgetInfo) { } else if (info instanceof LauncherAppWidgetInfo && mOp == OP_ADD) { LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) info; if (mUser.equals(widgetInfo.user) && widgetInfo.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) && packageSet.contains(widgetInfo.providerName.getPackageName())) { && pkgFilter.matches(widgetInfo.providerName.getPackageName())) { widgetInfo.restoreStatus &= ~LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY & ~LauncherAppWidgetInfo.FLAG_RESTORE_STARTED; Loading src/com/android/launcher3/compat/UserHandleCompat.java +10 −0 Original line number Diff line number Diff line Loading @@ -93,4 +93,14 @@ public class UserHandleCompat { intent.putExtra(name, mUser); } } public static UserHandleCompat fromIntent(Intent intent) { if (Utilities.ATLEAST_LOLLIPOP) { UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); if (user != null) { return UserHandleCompat.fromUser(user); } } return null; } } src/com/android/launcher3/util/StringFilter.java 0 → 100644 +31 −0 Original line number Diff line number Diff line package com.android.launcher3.util; import java.util.Set; /** * Abstract class to filter a set of strings. */ public abstract class StringFilter { private StringFilter() { } public abstract boolean matches(String str); public static StringFilter matchesAll() { return new StringFilter() { @Override public boolean matches(String str) { return true; } }; } public static StringFilter of(final Set<String> validEntries) { return new StringFilter() { @Override public boolean matches(String str) { return validEntries.contains(str); } }; } } Loading
src/com/android/launcher3/AllAppsList.java +3 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.launcher3.compat.LauncherActivityInfoCompat; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.StringFilter; import java.util.ArrayList; import java.util.HashSet; Loading Loading @@ -122,12 +123,12 @@ class AllAppsList { /** * Updates the apps for the given packageName and user based on {@param op}. */ public void updatePackageFlags(String packageName, UserHandleCompat user, FlagOp op) { public void updatePackageFlags(StringFilter pkgFilter, UserHandleCompat user, FlagOp op) { final List<AppInfo> data = this.data; for (int i = data.size() - 1; i >= 0; i--) { AppInfo info = data.get(i); final ComponentName component = info.intent.getComponent(); if (info.user.equals(user) && packageName.equals(component.getPackageName())) { if (info.user.equals(user) && pkgFilter.matches(component.getPackageName())) { info.isDisabled = op.apply(info.isDisabled); modified.add(info); } Loading
src/com/android/launcher3/LauncherModel.java +25 −12 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import com.android.launcher3.util.CursorIconInfo; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.ManagedProfileHeuristic; import com.android.launcher3.util.StringFilter; import com.android.launcher3.util.Thunk; import com.android.launcher3.util.ViewOnDrawExecutor; Loading Loading @@ -1226,10 +1227,16 @@ public class LauncherModel extends BroadcastReceiver callbacks.bindSearchProviderChanged(); } } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_ADDED.equals(action) || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action) || LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) { UserManagerCompat.getInstance(context).enableAndResetCache(); forceReload(); } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { UserHandleCompat user = UserHandleCompat.fromIntent(intent); if (user != null) { enqueuePackageUpdated(new PackageUpdatedTask( PackageUpdatedTask.OP_USER_AVAILABILITY_CHANGE, new String[0], user)); } } } Loading Loading @@ -2914,7 +2921,7 @@ public class LauncherModel extends BroadcastReceiver public static final int OP_UNAVAILABLE = 4; // external media unmounted public static final int OP_SUSPEND = 5; // package suspended public static final int OP_UNSUSPEND = 6; // package unsuspended public static final int OP_USER_AVAILABILITY_CHANGE = 7; // user available/unavailable public PackageUpdatedTask(int op, String[] packages, UserHandleCompat user) { mOp = op; Loading @@ -2932,6 +2939,7 @@ public class LauncherModel extends BroadcastReceiver final String[] packages = mPackages; final int N = packages.length; FlagOp flagOp = FlagOp.NO_OP; StringFilter pkgFilter = StringFilter.of(new HashSet<>(Arrays.asList(packages))); switch (mOp) { case OP_ADD: { for (int i=0; i<N; i++) { Loading Loading @@ -2980,10 +2988,16 @@ public class LauncherModel extends BroadcastReceiver flagOp = mOp == OP_SUSPEND ? FlagOp.addFlag(ShortcutInfo.FLAG_DISABLED_SUSPENDED) : FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_SUSPENDED); for (int i=0; i<N; i++) { if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.(un)suspend " + packages[i]); mBgAllAppsList.updatePackageFlags(packages[i], mUser, flagOp); } if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.(un)suspend " + packages); mBgAllAppsList.updatePackageFlags(pkgFilter, mUser, flagOp); break; case OP_USER_AVAILABILITY_CHANGE: flagOp = UserManagerCompat.getInstance(context).isQuietModeEnabled(mUser) ? FlagOp.addFlag(ShortcutInfo.FLAG_DISABLED_QUIET_USER) : FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_QUIET_USER); // We want to update all packages for this user. pkgFilter = StringFilter.matchesAll(); mBgAllAppsList.updatePackageFlags(pkgFilter, mUser, flagOp); break; } Loading Loading @@ -3036,7 +3050,6 @@ public class LauncherModel extends BroadcastReceiver final ArrayList<ShortcutInfo> removedShortcuts = new ArrayList<ShortcutInfo>(); final ArrayList<LauncherAppWidgetInfo> widgets = new ArrayList<LauncherAppWidgetInfo>(); HashSet<String> packageSet = new HashSet<String>(Arrays.asList(packages)); synchronized (sBgLock) { for (ItemInfo info : sBgItemsIdMap) { if (info instanceof ShortcutInfo && mUser.equals(info.user)) { Loading @@ -3046,7 +3059,7 @@ public class LauncherModel extends BroadcastReceiver // Update shortcuts which use iconResource. if ((si.iconResource != null) && packageSet.contains(si.iconResource.packageName)) { && pkgFilter.matches(si.iconResource.packageName)) { Bitmap icon = Utilities.createIconBitmap( si.iconResource.packageName, si.iconResource.resourceName, context); Loading @@ -3058,7 +3071,7 @@ public class LauncherModel extends BroadcastReceiver } ComponentName cn = si.getTargetComponent(); if (cn != null && packageSet.contains(cn.getPackageName())) { if (cn != null && pkgFilter.matches(cn.getPackageName())) { AppInfo appInfo = addedOrUpdatedApps.get(cn); if (si.isPromise()) { Loading Loading @@ -3119,11 +3132,11 @@ public class LauncherModel extends BroadcastReceiver if (infoUpdated) { updateItemInDatabase(context, si); } } else if (info instanceof LauncherAppWidgetInfo) { } else if (info instanceof LauncherAppWidgetInfo && mOp == OP_ADD) { LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) info; if (mUser.equals(widgetInfo.user) && widgetInfo.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) && packageSet.contains(widgetInfo.providerName.getPackageName())) { && pkgFilter.matches(widgetInfo.providerName.getPackageName())) { widgetInfo.restoreStatus &= ~LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY & ~LauncherAppWidgetInfo.FLAG_RESTORE_STARTED; Loading
src/com/android/launcher3/compat/UserHandleCompat.java +10 −0 Original line number Diff line number Diff line Loading @@ -93,4 +93,14 @@ public class UserHandleCompat { intent.putExtra(name, mUser); } } public static UserHandleCompat fromIntent(Intent intent) { if (Utilities.ATLEAST_LOLLIPOP) { UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); if (user != null) { return UserHandleCompat.fromUser(user); } } return null; } }
src/com/android/launcher3/util/StringFilter.java 0 → 100644 +31 −0 Original line number Diff line number Diff line package com.android.launcher3.util; import java.util.Set; /** * Abstract class to filter a set of strings. */ public abstract class StringFilter { private StringFilter() { } public abstract boolean matches(String str); public static StringFilter matchesAll() { return new StringFilter() { @Override public boolean matches(String str) { return true; } }; } public static StringFilter of(final Set<String> validEntries) { return new StringFilter() { @Override public boolean matches(String str) { return validEntries.contains(str); } }; } }