diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2014-09-18 16:13:58 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2014-09-19 12:19:07 -0700 |
commit | 9448536b113afa6ceefce26604a1b44618d1d4f2 (patch) | |
tree | 97aa642778c304862cf77ad72a3117a70d664bd8 /src/com/android/launcher3 | |
parent | 136882c1950da1e5f0a24a8b6807b186a3297d8e (diff) | |
download | android_packages_apps_Trebuchet-9448536b113afa6ceefce26604a1b44618d1d4f2.tar.gz android_packages_apps_Trebuchet-9448536b113afa6ceefce26604a1b44618d1d4f2.tar.bz2 android_packages_apps_Trebuchet-9448536b113afa6ceefce26604a1b44618d1d4f2.zip |
Adding support to delete unrestored icons and widgets
Bug: 17584719
Change-Id: If8e76fc80ea885c9004c50b7b6a9353525a50105
Diffstat (limited to 'src/com/android/launcher3')
6 files changed, 72 insertions, 19 deletions
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..404ab9a11 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"; @@ -1885,7 +1886,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 +2016,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 +2242,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 +2283,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/compat/PackageInstallerCompat.java b/src/com/android/launcher3/compat/PackageInstallerCompat.java index 0ae52bd23..62fc050df 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..daacba834 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 { @@ -57,11 +58,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) { |