diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2014-09-19 19:58:07 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-09-19 19:58:07 +0000 |
commit | acefecbff3141b43dc55fe18146cf842d1d4a8ae (patch) | |
tree | 04a8869721e76d2963e64f6b4f1ac87276aa013e /src/com/android/launcher3 | |
parent | 7e053f8784c886359f911161db5fd8b61333450d (diff) | |
parent | a22666f68151269853e7ab6ab696ee6361bac793 (diff) | |
download | android_packages_apps_Trebuchet-acefecbff3141b43dc55fe18146cf842d1d4a8ae.tar.gz android_packages_apps_Trebuchet-acefecbff3141b43dc55fe18146cf842d1d4a8ae.tar.bz2 android_packages_apps_Trebuchet-acefecbff3141b43dc55fe18146cf842d1d4a8ae.zip |
Merge "Updating promise icon's bitmap and label when onBadgingChanged is received" into ub-now-porkchop
Diffstat (limited to 'src/com/android/launcher3')
-rw-r--r-- | src/com/android/launcher3/IconCache.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 12 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherAppState.java | 7 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherModel.java | 14 | ||||
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 32 | ||||
-rw-r--r-- | src/com/android/launcher3/compat/PackageInstallerCompatVL.java | 32 |
6 files changed, 95 insertions, 8 deletions
diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java index 8a3c3193b..bb71d776c 100644 --- a/src/com/android/launcher3/IconCache.java +++ b/src/com/android/launcher3/IconCache.java @@ -29,6 +29,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.Log; @@ -382,12 +383,15 @@ public class IconCache { */ public void cachePackageInstallInfo(String packageName, UserHandleCompat user, Bitmap icon, CharSequence title) { + remove(packageName, user); + CacheEntry entry = getEntryForPackage(packageName, user); if (!TextUtils.isEmpty(title)) { entry.title = title; } if (icon != null) { - entry.icon = Utilities.createIconBitmap(icon, mContext); + entry.icon = Utilities.createIconBitmap( + new BitmapDrawable(mContext.getResources(), icon), mContext); } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index dc462c3d7..eb505a372 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4712,6 +4712,18 @@ public class Launcher extends Activity } /** + * Update the label and icon of all the icons in a package + * + * Implementation of the method from LauncherModel.Callbacks. + */ + @Override + public void updatePackageBadge(String packageName) { + if (mWorkspace != null) { + mWorkspace.updatePackageBadge(packageName, UserHandleCompat.myUserHandle()); + } + } + + /** * A package was uninstalled. We take both the super set of packageNames * in addition to specific applications to remove, the reason being that * this can be called when a package is updated as well. In that scenario, diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index b6144f4ac..246278fa2 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -260,4 +260,11 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { public void setPackageState(ArrayList<PackageInstallInfo> installInfo) { mModel.setPackageState(installInfo); } + + /** + * Updates the icons and label of all icons for the provided package name. + */ + public void updatePackageBadge(String packageName) { + mModel.updatePackageBadge(packageName); + } } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 404ab9a11..d2cf8f50b 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -199,6 +199,7 @@ public class LauncherModel extends BroadcastReceiver ArrayList<AppInfo> addedApps); public void bindAppsUpdated(ArrayList<AppInfo> apps); public void updatePackageState(ArrayList<PackageInstallInfo> installInfo); + public void updatePackageBadge(String packageName); public void bindComponentsRemoved(ArrayList<String> packageNames, ArrayList<AppInfo> appInfos, UserHandleCompat user); public void bindPackagesUpdated(ArrayList<Object> widgetsAndShortcuts); @@ -348,6 +349,19 @@ public class LauncherModel extends BroadcastReceiver mHandler.post(r); } + public void updatePackageBadge(final String packageName) { + // Process the updated package badge + Runnable r = new Runnable() { + public void run() { + Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null; + if (callbacks != null) { + callbacks.updatePackageBadge(packageName); + } + } + }; + mHandler.post(r); + } + public void addAppsToAllApps(final Context ctx, final ArrayList<AppInfo> allAppsApps) { final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null; diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 051b0c085..774996e56 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4921,6 +4921,38 @@ public class Workspace extends SmoothPagedView removeItemsByPackageName(packages, user); } + public void updatePackageBadge(final String packageName, final UserHandleCompat user) { + mapOverItems(MAP_RECURSE, new ItemOperator() { + @Override + public boolean evaluate(ItemInfo info, View v, View parent) { + if (info instanceof ShortcutInfo && v instanceof BubbleTextView) { + ShortcutInfo shortcutInfo = (ShortcutInfo) info; + ComponentName cn = shortcutInfo.getTargetComponent(); + if (user.equals(shortcutInfo.user) && cn != null + && shortcutInfo.isPromise() + && packageName.equals(cn.getPackageName())) { + if (shortcutInfo.hasStatusFlag(ShortcutInfo.FLAG_AUTOINTALL_ICON)) { + // For auto install apps update the icon as well as label. + mIconCache.getTitleAndIcon(shortcutInfo, + shortcutInfo.promisedIntent, user, true); + } else { + // Only update the icon for restored apps. + shortcutInfo.updateIcon(mIconCache); + } + BubbleTextView shortcut = (BubbleTextView) v; + shortcut.applyFromShortcutInfo(shortcutInfo, mIconCache, true, false); + + if (parent != null) { + parent.invalidate(); + } + } + } + // process all the shortcuts + return false; + } + }); + } + public void updatePackageState(ArrayList<PackageInstallInfo> installInfos) { HashSet<String> completedPackages = new HashSet<String>(); diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index daacba834..a84bf0224 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -35,6 +35,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { private static final boolean DEBUG = false; private final SparseArray<SessionInfo> mPendingReplays = new SparseArray<SessionInfo>(); + private final HashSet<String> mPendingBadgeUpdates = new HashSet<String>(); private final PackageInstaller mInstaller; private final IconCache mCache; @@ -139,18 +140,20 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { if (!updates.isEmpty()) { app.setPackageState(updates); } + + if (!mPendingBadgeUpdates.isEmpty()) { + for (String pkg : mPendingBadgeUpdates) { + app.updatePackageBadge(pkg); + } + mPendingBadgeUpdates.clear(); + } } private final SessionCallback mCallback = new SessionCallback() { @Override public void onCreated(int sessionId) { - SessionInfo session = mInstaller.getSessionInfo(sessionId); - if (session != null) { - addSessionInfoToCahce(session, UserHandleCompat.myUserHandle()); - mPendingReplays.put(sessionId, session); - replayUpdates(null); - } + pushSessionBadgeToLauncher(sessionId); } @Override @@ -158,6 +161,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { mPendingReplays.remove(sessionId); SessionInfo session = mInstaller.getSessionInfo(sessionId); if ((session != null) && (session.getAppPackageName() != null)) { + mPendingBadgeUpdates.remove(session.getAppPackageName()); // Replay all updates with a one time update for this installed package. No // need to store this record for future updates, as the app list will get // refreshed on resume. @@ -179,6 +183,20 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { public void onActiveChanged(int sessionId, boolean active) { } @Override - public void onBadgingChanged(int sessionId) { } + public void onBadgingChanged(int sessionId) { + pushSessionBadgeToLauncher(sessionId); + } + + private void pushSessionBadgeToLauncher(int sessionId) { + SessionInfo session = mInstaller.getSessionInfo(sessionId); + if (session != null) { + addSessionInfoToCahce(session, UserHandleCompat.myUserHandle()); + if (session.getAppPackageName() != null) { + mPendingBadgeUpdates.add(session.getAppPackageName()); + } + mPendingReplays.put(sessionId, session); + replayUpdates(null); + } + } }; } |