summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-03-24 19:20:14 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-03-24 19:20:14 +0000
commit07a2f134717c93802a2b10e551182b7f72660272 (patch)
tree72469ce2174e29d027f8399dffce900972c1dc01
parent784f9c39962721511f19bd3ef929abd7e91fa411 (diff)
parentda891c1a22210e7e75f85796dea528bf8bf12b45 (diff)
downloadandroid_packages_apps_Trebuchet-07a2f134717c93802a2b10e551182b7f72660272.tar.gz
android_packages_apps_Trebuchet-07a2f134717c93802a2b10e551182b7f72660272.tar.bz2
android_packages_apps_Trebuchet-07a2f134717c93802a2b10e551182b7f72660272.zip
Merge "Instead of reloading the launcher, updating items dynamically when Quiet mode changes" into ub-launcher3-calgary
-rw-r--r--src/com/android/launcher3/AllAppsList.java5
-rw-r--r--src/com/android/launcher3/LauncherModel.java37
-rw-r--r--src/com/android/launcher3/compat/UserHandleCompat.java10
-rw-r--r--src/com/android/launcher3/util/StringFilter.java31
4 files changed, 69 insertions, 14 deletions
diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java
index 962396c3b..c4315936c 100644
--- a/src/com/android/launcher3/AllAppsList.java
+++ b/src/com/android/launcher3/AllAppsList.java
@@ -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;
@@ -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);
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 4c2dec592..6c8c77861 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -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;
@@ -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));
+ }
}
}
@@ -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;
@@ -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++) {
@@ -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;
}
@@ -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)) {
@@ -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);
@@ -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()) {
@@ -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;
diff --git a/src/com/android/launcher3/compat/UserHandleCompat.java b/src/com/android/launcher3/compat/UserHandleCompat.java
index 94799089f..50af21b96 100644
--- a/src/com/android/launcher3/compat/UserHandleCompat.java
+++ b/src/com/android/launcher3/compat/UserHandleCompat.java
@@ -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;
+ }
}
diff --git a/src/com/android/launcher3/util/StringFilter.java b/src/com/android/launcher3/util/StringFilter.java
new file mode 100644
index 000000000..f539ad11e
--- /dev/null
+++ b/src/com/android/launcher3/util/StringFilter.java
@@ -0,0 +1,31 @@
+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);
+ }
+ };
+ }
+}