diff options
-rw-r--r-- | res/values-am/strings.xml | 2 | ||||
-rw-r--r-- | res/values-hi/strings.xml | 4 | ||||
-rw-r--r-- | res/values-uk/strings.xml | 8 | ||||
-rw-r--r-- | res/values-zh-rHK/strings.xml | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/AutoInstallsLayout.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/IconCache.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 14 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherAppState.java | 7 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherAppWidgetInfo.java | 5 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherModel.java | 74 | ||||
-rw-r--r-- | src/com/android/launcher3/ShortcutInfo.java | 5 | ||||
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 32 | ||||
-rw-r--r-- | src/com/android/launcher3/compat/PackageInstallerCompat.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/compat/PackageInstallerCompatV16.java | 9 | ||||
-rw-r--r-- | src/com/android/launcher3/compat/PackageInstallerCompatVL.java | 40 |
15 files changed, 178 insertions, 38 deletions
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index d77744c94..25931db7d 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -96,7 +96,7 @@ <string name="migration_cling_copy_apps" msgid="946331230090919440">"አዶዎችን ይቅዱ"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"እንደ አዲስ ይጀምሩ"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"ቦታዎን ያደራጁ"</string> - <string name="workspace_cling_move_item" msgid="528201129978005352">"የግድግዳ ወረቀት፣ ምግብሮችን እና ቅንብሮችን ለማቀናበር ጀርባውን ይንኩ እና ይያዙት።"</string> + <string name="workspace_cling_move_item" msgid="528201129978005352">"ልጣፍ ፣ ምግብሮችን እና ቅንብሮችን ለማቀናበር ጀርባውን ይንኩ እና ይያዙት።"</string> <string name="workspace_cling_longpress_title" msgid="9173998993909018310">"የግድግዳ ወረቀቶች፣ ንዑስ ፕሮግራሞች እና ቅንብሮች"</string> <string name="workspace_cling_longpress_description" msgid="4119994475505235248">"ለማበጀት ጀርባውን ነክተው ይያዙት"</string> <string name="workspace_cling_longpress_dismiss" msgid="368660286867640874">"ገባኝ"</string> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 9058b7895..0ae90d469 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -27,7 +27,7 @@ <string name="safemode_shortcut_error" msgid="9160126848219158407">"डाउनलोड किए गए ऐप्स सुरक्षित मोड में अक्षम है"</string> <string name="widgets_tab_label" msgid="2921133187116603919">"विजेट"</string> <string name="widget_adder" msgid="3201040140710381657">"विजेट"</string> - <string name="toggle_weight_watcher" msgid="5645299835184636119">"स्मृति दिखाएं"</string> + <string name="toggle_weight_watcher" msgid="5645299835184636119">"मेमोरी दिखाएं"</string> <string name="long_press_widget_to_add" msgid="7699152356777458215">"विजेट को चुनने के लिए स्पर्श करके रखें."</string> <string name="market" msgid="2619650989819296998">"खरीदारी करें"</string> <string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string> @@ -36,7 +36,7 @@ <string name="rename_folder_label" msgid="3727762225964550653">"फ़ोल्डर का नाम"</string> <string name="rename_folder_title" msgid="3771389277707820891">"फ़ोल्डर का नाम बदलें"</string> <string name="rename_action" msgid="5559600076028658757">"ठीक"</string> - <string name="cancel_action" msgid="7009134900002915310">"रद्द करें"</string> + <string name="cancel_action" msgid="7009134900002915310">"रहने दें"</string> <string name="menu_item_add_item" msgid="1264911265836810421">"होम स्क्रीन में जोड़ें"</string> <string name="group_applications" msgid="3797214114206693605">"ऐप्लिकेशन"</string> <string name="group_shortcuts" msgid="6012256992764410535">"शॉर्टकट"</string> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 52f3761ac..e5b5cd8d2 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -23,7 +23,7 @@ <string name="home" msgid="7658288663002113681">"Головний екран"</string> <string name="uid_name" msgid="7820867637514617527">"Базові програми Android"</string> <string name="folder_name" msgid="7371454440695724752"></string> - <string name="activity_not_found" msgid="8071924732094499514">"Програму не встановлено."</string> + <string name="activity_not_found" msgid="8071924732094499514">"Додаток видалено."</string> <string name="safemode_shortcut_error" msgid="9160126848219158407">"Завантажений додаток вимкнено в безпечному режимі"</string> <string name="widgets_tab_label" msgid="2921133187116603919">"Віджети"</string> <string name="widget_adder" msgid="3201040140710381657">"Віджети"</string> @@ -38,7 +38,7 @@ <string name="rename_action" msgid="5559600076028658757">"OК"</string> <string name="cancel_action" msgid="7009134900002915310">"Скасувати"</string> <string name="menu_item_add_item" msgid="1264911265836810421">"Додати на головний екран"</string> - <string name="group_applications" msgid="3797214114206693605">"Програми"</string> + <string name="group_applications" msgid="3797214114206693605">"Додатки"</string> <string name="group_shortcuts" msgid="6012256992764410535">"Ярлики"</string> <string name="group_widgets" msgid="1569030723286851002">"Віджети"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"На головних екранах більше немає місця."</string> @@ -50,7 +50,7 @@ <string name="shortcut_duplicate" msgid="9167217446062498127">"Ярлик \"<xliff:g id="NAME">%s</xliff:g>\" уже існує."</string> <string name="title_select_shortcut" msgid="6680642571148153868">"Вибрати ярлик"</string> <string name="title_select_application" msgid="3280812711670683644">"Вибрати програму"</string> - <string name="all_apps_button_label" msgid="9110807029020582876">"Програми"</string> + <string name="all_apps_button_label" msgid="9110807029020582876">"Додатки"</string> <string name="all_apps_home_button_label" msgid="252062713717058851">"Головний екран"</string> <string name="delete_zone_label_workspace" msgid="4009607676751398685">"Вилучити"</string> <string name="delete_zone_label_all_apps" msgid="8083826390278958980">"Видалити"</string> @@ -59,7 +59,7 @@ <string name="info_target_label" msgid="8053346143994679532">"Про програму"</string> <string name="accessibility_search_button" msgid="1628520399424565142">"Пошук"</string> <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Голосовий пошук"</string> - <string name="accessibility_all_apps_button" msgid="2603132375383800483">"Програми"</string> + <string name="accessibility_all_apps_button" msgid="2603132375383800483">"Додатки"</string> <string name="accessibility_delete_button" msgid="6466114477993744621">"Вилучити"</string> <string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Видалити оновлення"</string> <string name="cab_menu_delete_app" msgid="7435191475867183689">"Видалити програму"</string> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index e1c206339..457d5be9e 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -69,9 +69,9 @@ <string name="cab_folder_selection_text" msgid="7999992513806132118">"已選取 1 個資料夾"</string> <string name="cab_shortcut_selection_text" msgid="2103811025667946450">"已選取 1 個捷徑"</string> <string name="permlab_install_shortcut" msgid="5632423390354674437">"安裝捷徑"</string> - <string name="permdesc_install_shortcut" msgid="923466509822011139">"允許應用程式無需用戶許可也可新增捷徑。"</string> + <string name="permdesc_install_shortcut" msgid="923466509822011139">"允許應用程式無需使用者許可也可新增捷徑。"</string> <string name="permlab_uninstall_shortcut" msgid="864595034498083837">"解除安裝捷徑"</string> - <string name="permdesc_uninstall_shortcut" msgid="5134129545001836849">"允許應用程式無需用戶許可也可移除捷徑。"</string> + <string name="permdesc_uninstall_shortcut" msgid="5134129545001836849">"允許應用程式無需使用者許可也可移除捷徑。"</string> <string name="permlab_read_settings" msgid="1941457408239617576">"讀取主畫面的設定和捷徑"</string> <string name="permdesc_read_settings" msgid="5833423719057558387">"允許應用程式讀取主畫面中的設定和捷徑。"</string> <string name="permlab_write_settings" msgid="3574213698004620587">"寫入主畫面的設定和捷徑"</string> diff --git a/src/com/android/launcher3/AutoInstallsLayout.java b/src/com/android/launcher3/AutoInstallsLayout.java index 931501c6a..00f0cf36f 100644 --- a/src/com/android/launcher3/AutoInstallsLayout.java +++ b/src/com/android/launcher3/AutoInstallsLayout.java @@ -57,7 +57,7 @@ public class AutoInstallsLayout implements WorkspaceLoader { /** Marker action used to discover a package which defines launcher customization */ static final String ACTION_LAUNCHER_CUSTOMIZATION = - "com.android.launcher3.action.LAUNCHER_CUSTOMIZATION"; + "android.autoinstalls.config.action.PLAY_AUTO_INSTALL"; private static final String LAYOUT_RES = "default_layout"; 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 22a72ab90..7098760b3 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4722,6 +4722,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, @@ -5003,7 +5015,7 @@ public class Launcher extends Activity if (mModel.canMigrateFromOldLauncherDb(this)) { launcherClings.showMigrationCling(); } else { - launcherClings.showLongPressCling(false); + launcherClings.showLongPressCling(true); } } } 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/LauncherAppWidgetInfo.java b/src/com/android/launcher3/LauncherAppWidgetInfo.java index 50528b1bd..5c6535a24 100644 --- a/src/com/android/launcher3/LauncherAppWidgetInfo.java +++ b/src/com/android/launcher3/LauncherAppWidgetInfo.java @@ -46,6 +46,11 @@ public class LauncherAppWidgetInfo extends ItemInfo { public static final int FLAG_UI_NOT_READY = 4; /** + * Indicates that the widget restore has started. + */ + public static final int FLAG_RESTORE_STARTED = 8; + + /** * Indicates that the widget hasn't been instantiated yet. */ static final int NO_ID = -1; diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 29cd9e36a..d2cf8f50b 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -86,6 +86,7 @@ public class LauncherModel extends BroadcastReceiver implements LauncherAppsCompat.OnAppsChangedCallbackCompat { static final boolean DEBUG_LOADERS = false; private static final boolean DEBUG_RECEIVER = false; + private static final boolean REMOVE_UNRESTORED_ICONS = true; static final String TAG = "Launcher.Model"; @@ -198,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); @@ -347,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; @@ -1885,7 +1900,8 @@ public class LauncherModel extends BroadcastReceiver synchronized (sBgLock) { clearSBgDataStructures(); - PackageInstallerCompat.getInstance(mContext).updateActiveSessionCache(); + final HashSet<String> installingPkgs = PackageInstallerCompat + .getInstance(mContext).updateAndGetActiveSessionCache(); final ArrayList<Long> itemsToRemove = new ArrayList<Long>(); final ArrayList<Long> restoredRows = new ArrayList<Long>(); @@ -2014,6 +2030,25 @@ public class LauncherModel extends BroadcastReceiver // installed later. Launcher.addDumpLog(TAG, "package not yet restored: " + cn, true); + + if ((promiseType & ShortcutInfo.FLAG_RESTORE_STARTED) != 0) { + // Restore has started once. + } else if (installingPkgs.contains(cn.getPackageName())) { + // App restore has started. Update the flag + promiseType |= ShortcutInfo.FLAG_RESTORE_STARTED; + ContentValues values = new ContentValues(); + values.put(LauncherSettings.Favorites.RESTORED, + promiseType); + String where = BaseColumns._ID + "= ?"; + String[] args = {Long.toString(id)}; + contentResolver.update(contentUri, values, where, args); + + } else if (REMOVE_UNRESTORED_ICONS) { + Launcher.addDumpLog(TAG, + "Unrestored package removed: " + cn, true); + itemsToRemove.add(id); + continue; + } } else if (isSdCardReady) { // Do not wait for external media load anymore. // Log the invalid package, and remove it @@ -2221,6 +2256,19 @@ public class LauncherModel extends BroadcastReceiver appWidgetInfo = new LauncherAppWidgetInfo(appWidgetId, component); appWidgetInfo.restoreStatus = restoreStatus; + + if ((restoreStatus & LauncherAppWidgetInfo.FLAG_RESTORE_STARTED) != 0) { + // Restore has started once. + } else if (installingPkgs.contains(component.getPackageName())) { + // App restore has started. Update the flag + appWidgetInfo.restoreStatus |= + LauncherAppWidgetInfo.FLAG_RESTORE_STARTED; + } else if (REMOVE_UNRESTORED_ICONS) { + Launcher.addDumpLog(TAG, + "Unrestored package removed: " + component, true); + itemsToRemove.add(id); + continue; + } } appWidgetInfo.id = id; @@ -2249,19 +2297,17 @@ public class LauncherModel extends BroadcastReceiver break; } - if (isProviderReady) { - String providerName = provider.provider.flattenToString(); - if (!providerName.equals(savedProvider) || - (appWidgetInfo.restoreStatus != restoreStatus)) { - ContentValues values = new ContentValues(); - values.put(LauncherSettings.Favorites.APPWIDGET_PROVIDER, - providerName); - values.put(LauncherSettings.Favorites.RESTORED, - appWidgetInfo.restoreStatus); - String where = BaseColumns._ID + "= ?"; - String[] args = {Long.toString(id)}; - contentResolver.update(contentUri, values, where, args); - } + String providerName = appWidgetInfo.providerName.flattenToString(); + if (!providerName.equals(savedProvider) || + (appWidgetInfo.restoreStatus != restoreStatus)) { + ContentValues values = new ContentValues(); + values.put(LauncherSettings.Favorites.APPWIDGET_PROVIDER, + providerName); + values.put(LauncherSettings.Favorites.RESTORED, + appWidgetInfo.restoreStatus); + String where = BaseColumns._ID + "= ?"; + String[] args = {Long.toString(id)}; + contentResolver.update(contentUri, values, where, args); } sBgItemsIdMap.put(appWidgetInfo.id, appWidgetInfo); sBgAppWidgets.add(appWidgetInfo); diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index 9abfb7f86..5b27f845e 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -55,6 +55,11 @@ public class ShortcutInfo extends ItemInfo { public static final int FLAG_INSTALL_SESSION_ACTIVE = 4; /** + * Indicates that the widget restore has started. + */ + public static final int FLAG_RESTORE_STARTED = 8; + + /** * The intent used to start the application. */ Intent intent; 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/PackageInstallerCompat.java b/src/com/android/launcher3/compat/PackageInstallerCompat.java index 03857e693..0eb8754e8 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompat.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompat.java @@ -20,6 +20,8 @@ import android.content.Context; import com.android.launcher3.Utilities; +import java.util.HashSet; + public abstract class PackageInstallerCompat { public static final int STATUS_INSTALLED = 0; @@ -42,7 +44,7 @@ public abstract class PackageInstallerCompat { } } - public abstract void updateActiveSessionCache(); + public abstract HashSet<String> updateAndGetActiveSessionCache(); public abstract void onPause(); diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatV16.java b/src/com/android/launcher3/compat/PackageInstallerCompatV16.java index 4cc6fc12f..1910d22ae 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatV16.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatV16.java @@ -29,6 +29,7 @@ import org.json.JSONStringer; import org.json.JSONTokener; import java.util.ArrayList; +import java.util.HashSet; public class PackageInstallerCompatV16 extends PackageInstallerCompat { @@ -76,9 +77,6 @@ public class PackageInstallerCompatV16 extends PackageInstallerCompat { @Override public void onStop() { } - @Override - public void updateActiveSessionCache() { } - private void replayUpdates() { if (DEBUG) Log.d(TAG, "updates resumed"); LauncherAppState app = LauncherAppState.getInstanceNoCreate(); @@ -169,4 +167,9 @@ public class PackageInstallerCompatV16 extends PackageInstallerCompat { } return value; } + + @Override + public HashSet<String> updateAndGetActiveSessionCache() { + return new HashSet<String>(); + } } diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index 2d56adf91..a84bf0224 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -27,6 +27,7 @@ import com.android.launcher3.IconCache; import com.android.launcher3.LauncherAppState; import java.util.ArrayList; +import java.util.HashSet; public class PackageInstallerCompatVL extends PackageInstallerCompat { @@ -34,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; @@ -57,11 +59,16 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { } @Override - public void updateActiveSessionCache() { + public HashSet<String> updateAndGetActiveSessionCache() { + HashSet<String> activePackages = new HashSet<String>(); UserHandleCompat user = UserHandleCompat.myUserHandle(); for (SessionInfo info : mInstaller.getAllSessions()) { addSessionInfoToCahce(info, user); + if (info.getAppPackageName() != null) { + activePackages.add(info.getAppPackageName()); + } } + return activePackages; } private void addSessionInfoToCahce(SessionInfo info, UserHandleCompat user) { @@ -133,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 @@ -152,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. @@ -173,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); + } + } }; } |