Loading src/com/android/launcher3/LauncherModel.java +21 −37 Original line number Diff line number Diff line Loading @@ -1105,10 +1105,6 @@ public class LauncherModel extends BroadcastReceiver final boolean isSdCardReady = Utilities.isBootCompleted(); final MultiHashMap<UserHandle, String> pendingPackages = new MultiHashMap<>(); InvariantDeviceProfile profile = mApp.getInvariantDeviceProfile(); int countX = profile.numColumns; int countY = profile.numRows; boolean clearDb = false; try { ImportDataTask.performImportIfPossible(context); Loading Loading @@ -1159,8 +1155,6 @@ public class LauncherModel extends BroadcastReceiver LauncherSettings.Favorites.SPANY); final int rankIndex = c.getColumnIndexOrThrow( LauncherSettings.Favorites.RANK); final int restoredIndex = c.getColumnIndexOrThrow( LauncherSettings.Favorites.RESTORED); final int optionsIndex = c.getColumnIndexOrThrow( LauncherSettings.Favorites.OPTIONS); Loading Loading @@ -1207,7 +1201,6 @@ public class LauncherModel extends BroadcastReceiver continue; } boolean restored = 0 != c.getInt(restoredIndex); boolean allowMissingTarget = false; switch (c.itemType) { case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT: { Loading @@ -1220,7 +1213,6 @@ public class LauncherModel extends BroadcastReceiver case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION: case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT: intentDescription = c.getString(intentIndex); int promiseType = c.getInt(restoredIndex); int disabledState = 0; targetPackage = null; Loading @@ -1237,17 +1229,14 @@ public class LauncherModel extends BroadcastReceiver } if (validComponent) { if (restored) { // no special handling necessary for this item c.markRestored(); restored = false; } if (quietMode.get(c.serialNumber)) { disabledState = ShortcutInfo.FLAG_DISABLED_QUIET_USER; } } else if (validPkg) { intent = null; if ((promiseType & ShortcutInfo.FLAG_AUTOINTALL_ICON) != 0) { if (c.hasRestoreFlag(ShortcutInfo.FLAG_AUTOINTALL_ICON)) { // We allow auto install apps to have their intent // updated after an install. intent = manager.getLaunchIntentForPackage( Loading @@ -1267,21 +1256,20 @@ public class LauncherModel extends BroadcastReceiver } else { // no special handling necessary for this item c.markRestored(); restored = false; } } else if (restored) { } else if (c.restoreFlag != 0) { // Package is not yet available but might be // installed later. FileLog.d(TAG, "package not yet restored: " + cn); if ((promiseType & ShortcutInfo.FLAG_RESTORE_STARTED) != 0) { if (c.hasRestoreFlag(ShortcutInfo.FLAG_RESTORE_STARTED)) { // Restore has started once. } else if (installingPkgs.containsKey(cn.getPackageName())) { // App restore has started. Update the flag promiseType |= ShortcutInfo.FLAG_RESTORE_STARTED; c.restoreFlag |= ShortcutInfo.FLAG_RESTORE_STARTED; c.updater().put( LauncherSettings.Favorites.RESTORED, promiseType).commit(); c.restoreFlag).commit(); } else { c.markDeleted("Unrestored package removed: " + cn); continue; Loading @@ -1308,7 +1296,6 @@ public class LauncherModel extends BroadcastReceiver } else if (cn == null) { // For shortcuts with no component, keep them as they are c.markRestored(); restored = false; } } catch (URISyntaxException e) { c.markDeleted("Invalid uri: " + intentDescription); Loading @@ -1318,9 +1305,9 @@ public class LauncherModel extends BroadcastReceiver boolean useLowResIcon = !c.isOnWorkspaceOrHotseat() && c.getInt(rankIndex) >= FolderIcon.NUM_ITEMS_IN_PREVIEW; if (restored) { if (c.restoreFlag != 0) { if (c.user.equals(Process.myUserHandle())) { info = c.getRestoredItemInfo(intent, promiseType); info = c.getRestoredItemInfo(intent); } else { // Don't restore items for other profiles. c.markDeleted("Restore from managed profile not supported"); Loading Loading @@ -1385,7 +1372,7 @@ public class LauncherModel extends BroadcastReceiver info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SAFEMODE; } if (restored) { if (c.restoreFlag != 0) { ComponentName cn = info.getTargetComponent(); if (cn != null) { Integer progress = installingPkgs.get(cn.getPackageName()); Loading Loading @@ -1413,10 +1400,8 @@ public class LauncherModel extends BroadcastReceiver folderInfo.spanY = 1; folderInfo.options = c.getInt(optionsIndex); if (restored) { // no special handling required for restored folders c.markRestored(); } c.checkAndAddItem(folderInfo, sBgDataModel); break; Loading @@ -1433,11 +1418,10 @@ public class LauncherModel extends BroadcastReceiver final ComponentName component = ComponentName.unflattenFromString(savedProvider); final int restoreStatus = c.getInt(restoredIndex); final boolean isIdValid = (restoreStatus & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID) == 0; final boolean wasProviderReady = (restoreStatus & LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) == 0; final boolean isIdValid = !c.hasRestoreFlag( LauncherAppWidgetInfo.FLAG_ID_NOT_VALID); final boolean wasProviderReady = !c.hasRestoreFlag( LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY); if (widgetProvidersMap == null) { widgetProvidersMap = AppWidgetManagerCompat Loading @@ -1462,7 +1446,7 @@ public class LauncherModel extends BroadcastReceiver // The provider is available. So the widget is either // available or not available. We do not need to track // any future restore updates. int status = restoreStatus & int status = c.restoreFlag & ~LauncherAppWidgetInfo.FLAG_RESTORE_STARTED; if (!wasProviderReady) { // If provider was not previously ready, update the Loading @@ -1480,13 +1464,13 @@ public class LauncherModel extends BroadcastReceiver } else { Log.v(TAG, "Widget restore pending id=" + c.id + " appWidgetId=" + appWidgetId + " status =" + restoreStatus); + " status =" + c.restoreFlag); appWidgetInfo = new LauncherAppWidgetInfo(appWidgetId, component); appWidgetInfo.restoreStatus = restoreStatus; appWidgetInfo.restoreStatus = c.restoreFlag; Integer installProgress = installingPkgs.get(component.getPackageName()); if ((restoreStatus & LauncherAppWidgetInfo.FLAG_RESTORE_STARTED) != 0) { if (c.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_RESTORE_STARTED)) { // Restore has started once. } else if (installProgress != null) { // App restore has started. Update the flag Loading Loading @@ -1524,7 +1508,7 @@ public class LauncherModel extends BroadcastReceiver String providerName = appWidgetInfo.providerName.flattenToString(); if (!providerName.equals(savedProvider) || (appWidgetInfo.restoreStatus != restoreStatus)) { (appWidgetInfo.restoreStatus != c.restoreFlag)) { c.updater() .put(LauncherSettings.Favorites.APPWIDGET_PROVIDER, providerName) Loading src/com/android/launcher3/model/LoaderCursor.java +17 −6 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ public class LoaderCursor extends CursorWrapper { private final int cellXIndex; private final int cellYIndex; private final int profileIdIndex; private final int restoredIndex; // Properties loaded per iteration public long serialNumber; Loading @@ -90,6 +91,7 @@ public class LoaderCursor extends CursorWrapper { public long id; public long container; public int itemType; public int restoreFlag; public LoaderCursor(Cursor c, LauncherAppState app) { super(c); Loading @@ -111,6 +113,7 @@ public class LoaderCursor extends CursorWrapper { cellXIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.CELLX); cellYIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.CELLY); profileIdIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.PROFILE_ID); restoredIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.RESTORED); } @Override Loading @@ -123,6 +126,7 @@ public class LoaderCursor extends CursorWrapper { id = getLong(idIndex); serialNumber = getInt(profileIdIndex); user = allUsers.get(serialNumber); restoreFlag = getInt(restoredIndex); } return result; } Loading Loading @@ -185,7 +189,7 @@ public class LoaderCursor extends CursorWrapper { * Make an ShortcutInfo object for a restored application or shortcut item that points * to a package that is not yet installed on the system. */ public ShortcutInfo getRestoredItemInfo(Intent intent, int promiseType) { public ShortcutInfo getRestoredItemInfo(Intent intent) { final ShortcutInfo info = new ShortcutInfo(); info.user = user; info.intent = intent; Loading @@ -196,22 +200,22 @@ public class LoaderCursor extends CursorWrapper { mIconCache.getTitleAndIcon(info, false /* useLowResIcon */); } if ((promiseType & ShortcutInfo.FLAG_RESTORED_ICON) != 0) { if (hasRestoreFlag(ShortcutInfo.FLAG_RESTORED_ICON)) { String title = getTitle(); if (!TextUtils.isEmpty(title)) { info.title = Utilities.trim(title); } } else if ((promiseType & ShortcutInfo.FLAG_AUTOINTALL_ICON) != 0) { } else if (hasRestoreFlag(ShortcutInfo.FLAG_AUTOINTALL_ICON)) { if (TextUtils.isEmpty(info.title)) { info.title = getTitle(); } } else { throw new InvalidParameterException("Invalid restoreType " + promiseType); throw new InvalidParameterException("Invalid restoreType " + restoreFlag); } info.contentDescription = mUserManager.getBadgedLabelForUser(info.title, info.user); info.itemType = itemType; info.status = promiseType; info.status = restoreFlag; return info; } Loading Loading @@ -305,7 +309,14 @@ public class LoaderCursor extends CursorWrapper { * Marks the current item as restored */ public void markRestored() { if (restoreFlag != 0) { restoredRows.add(id); restoreFlag = 0; } } public boolean hasRestoreFlag(int flagMask) { return (restoreFlag & flagMask) != 0; } public void commitRestoredItems() { Loading tests/src/com/android/launcher3/model/LoaderCursorTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE; import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT; import static com.android.launcher3.LauncherSettings.Favorites.PROFILE_ID; import static com.android.launcher3.LauncherSettings.Favorites.RESTORED; import static com.android.launcher3.LauncherSettings.Favorites.SCREEN; import static com.android.launcher3.LauncherSettings.Favorites.TITLE; import static com.android.launcher3.LauncherSettings.Favorites._ID; Loading Loading @@ -72,7 +73,7 @@ public class LoaderCursorTest { mCursor = new MatrixCursor(new String[] { ICON, ICON_PACKAGE, ICON_RESOURCE, TITLE, _ID, CONTAINER, ITEM_TYPE, PROFILE_ID, SCREEN, CELLX, CELLY, SCREEN, CELLX, CELLY, RESTORED }); mContext = InstrumentationRegistry.getTargetContext(); Loading Loading
src/com/android/launcher3/LauncherModel.java +21 −37 Original line number Diff line number Diff line Loading @@ -1105,10 +1105,6 @@ public class LauncherModel extends BroadcastReceiver final boolean isSdCardReady = Utilities.isBootCompleted(); final MultiHashMap<UserHandle, String> pendingPackages = new MultiHashMap<>(); InvariantDeviceProfile profile = mApp.getInvariantDeviceProfile(); int countX = profile.numColumns; int countY = profile.numRows; boolean clearDb = false; try { ImportDataTask.performImportIfPossible(context); Loading Loading @@ -1159,8 +1155,6 @@ public class LauncherModel extends BroadcastReceiver LauncherSettings.Favorites.SPANY); final int rankIndex = c.getColumnIndexOrThrow( LauncherSettings.Favorites.RANK); final int restoredIndex = c.getColumnIndexOrThrow( LauncherSettings.Favorites.RESTORED); final int optionsIndex = c.getColumnIndexOrThrow( LauncherSettings.Favorites.OPTIONS); Loading Loading @@ -1207,7 +1201,6 @@ public class LauncherModel extends BroadcastReceiver continue; } boolean restored = 0 != c.getInt(restoredIndex); boolean allowMissingTarget = false; switch (c.itemType) { case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT: { Loading @@ -1220,7 +1213,6 @@ public class LauncherModel extends BroadcastReceiver case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION: case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT: intentDescription = c.getString(intentIndex); int promiseType = c.getInt(restoredIndex); int disabledState = 0; targetPackage = null; Loading @@ -1237,17 +1229,14 @@ public class LauncherModel extends BroadcastReceiver } if (validComponent) { if (restored) { // no special handling necessary for this item c.markRestored(); restored = false; } if (quietMode.get(c.serialNumber)) { disabledState = ShortcutInfo.FLAG_DISABLED_QUIET_USER; } } else if (validPkg) { intent = null; if ((promiseType & ShortcutInfo.FLAG_AUTOINTALL_ICON) != 0) { if (c.hasRestoreFlag(ShortcutInfo.FLAG_AUTOINTALL_ICON)) { // We allow auto install apps to have their intent // updated after an install. intent = manager.getLaunchIntentForPackage( Loading @@ -1267,21 +1256,20 @@ public class LauncherModel extends BroadcastReceiver } else { // no special handling necessary for this item c.markRestored(); restored = false; } } else if (restored) { } else if (c.restoreFlag != 0) { // Package is not yet available but might be // installed later. FileLog.d(TAG, "package not yet restored: " + cn); if ((promiseType & ShortcutInfo.FLAG_RESTORE_STARTED) != 0) { if (c.hasRestoreFlag(ShortcutInfo.FLAG_RESTORE_STARTED)) { // Restore has started once. } else if (installingPkgs.containsKey(cn.getPackageName())) { // App restore has started. Update the flag promiseType |= ShortcutInfo.FLAG_RESTORE_STARTED; c.restoreFlag |= ShortcutInfo.FLAG_RESTORE_STARTED; c.updater().put( LauncherSettings.Favorites.RESTORED, promiseType).commit(); c.restoreFlag).commit(); } else { c.markDeleted("Unrestored package removed: " + cn); continue; Loading @@ -1308,7 +1296,6 @@ public class LauncherModel extends BroadcastReceiver } else if (cn == null) { // For shortcuts with no component, keep them as they are c.markRestored(); restored = false; } } catch (URISyntaxException e) { c.markDeleted("Invalid uri: " + intentDescription); Loading @@ -1318,9 +1305,9 @@ public class LauncherModel extends BroadcastReceiver boolean useLowResIcon = !c.isOnWorkspaceOrHotseat() && c.getInt(rankIndex) >= FolderIcon.NUM_ITEMS_IN_PREVIEW; if (restored) { if (c.restoreFlag != 0) { if (c.user.equals(Process.myUserHandle())) { info = c.getRestoredItemInfo(intent, promiseType); info = c.getRestoredItemInfo(intent); } else { // Don't restore items for other profiles. c.markDeleted("Restore from managed profile not supported"); Loading Loading @@ -1385,7 +1372,7 @@ public class LauncherModel extends BroadcastReceiver info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SAFEMODE; } if (restored) { if (c.restoreFlag != 0) { ComponentName cn = info.getTargetComponent(); if (cn != null) { Integer progress = installingPkgs.get(cn.getPackageName()); Loading Loading @@ -1413,10 +1400,8 @@ public class LauncherModel extends BroadcastReceiver folderInfo.spanY = 1; folderInfo.options = c.getInt(optionsIndex); if (restored) { // no special handling required for restored folders c.markRestored(); } c.checkAndAddItem(folderInfo, sBgDataModel); break; Loading @@ -1433,11 +1418,10 @@ public class LauncherModel extends BroadcastReceiver final ComponentName component = ComponentName.unflattenFromString(savedProvider); final int restoreStatus = c.getInt(restoredIndex); final boolean isIdValid = (restoreStatus & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID) == 0; final boolean wasProviderReady = (restoreStatus & LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) == 0; final boolean isIdValid = !c.hasRestoreFlag( LauncherAppWidgetInfo.FLAG_ID_NOT_VALID); final boolean wasProviderReady = !c.hasRestoreFlag( LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY); if (widgetProvidersMap == null) { widgetProvidersMap = AppWidgetManagerCompat Loading @@ -1462,7 +1446,7 @@ public class LauncherModel extends BroadcastReceiver // The provider is available. So the widget is either // available or not available. We do not need to track // any future restore updates. int status = restoreStatus & int status = c.restoreFlag & ~LauncherAppWidgetInfo.FLAG_RESTORE_STARTED; if (!wasProviderReady) { // If provider was not previously ready, update the Loading @@ -1480,13 +1464,13 @@ public class LauncherModel extends BroadcastReceiver } else { Log.v(TAG, "Widget restore pending id=" + c.id + " appWidgetId=" + appWidgetId + " status =" + restoreStatus); + " status =" + c.restoreFlag); appWidgetInfo = new LauncherAppWidgetInfo(appWidgetId, component); appWidgetInfo.restoreStatus = restoreStatus; appWidgetInfo.restoreStatus = c.restoreFlag; Integer installProgress = installingPkgs.get(component.getPackageName()); if ((restoreStatus & LauncherAppWidgetInfo.FLAG_RESTORE_STARTED) != 0) { if (c.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_RESTORE_STARTED)) { // Restore has started once. } else if (installProgress != null) { // App restore has started. Update the flag Loading Loading @@ -1524,7 +1508,7 @@ public class LauncherModel extends BroadcastReceiver String providerName = appWidgetInfo.providerName.flattenToString(); if (!providerName.equals(savedProvider) || (appWidgetInfo.restoreStatus != restoreStatus)) { (appWidgetInfo.restoreStatus != c.restoreFlag)) { c.updater() .put(LauncherSettings.Favorites.APPWIDGET_PROVIDER, providerName) Loading
src/com/android/launcher3/model/LoaderCursor.java +17 −6 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ public class LoaderCursor extends CursorWrapper { private final int cellXIndex; private final int cellYIndex; private final int profileIdIndex; private final int restoredIndex; // Properties loaded per iteration public long serialNumber; Loading @@ -90,6 +91,7 @@ public class LoaderCursor extends CursorWrapper { public long id; public long container; public int itemType; public int restoreFlag; public LoaderCursor(Cursor c, LauncherAppState app) { super(c); Loading @@ -111,6 +113,7 @@ public class LoaderCursor extends CursorWrapper { cellXIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.CELLX); cellYIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.CELLY); profileIdIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.PROFILE_ID); restoredIndex = getColumnIndexOrThrow(LauncherSettings.Favorites.RESTORED); } @Override Loading @@ -123,6 +126,7 @@ public class LoaderCursor extends CursorWrapper { id = getLong(idIndex); serialNumber = getInt(profileIdIndex); user = allUsers.get(serialNumber); restoreFlag = getInt(restoredIndex); } return result; } Loading Loading @@ -185,7 +189,7 @@ public class LoaderCursor extends CursorWrapper { * Make an ShortcutInfo object for a restored application or shortcut item that points * to a package that is not yet installed on the system. */ public ShortcutInfo getRestoredItemInfo(Intent intent, int promiseType) { public ShortcutInfo getRestoredItemInfo(Intent intent) { final ShortcutInfo info = new ShortcutInfo(); info.user = user; info.intent = intent; Loading @@ -196,22 +200,22 @@ public class LoaderCursor extends CursorWrapper { mIconCache.getTitleAndIcon(info, false /* useLowResIcon */); } if ((promiseType & ShortcutInfo.FLAG_RESTORED_ICON) != 0) { if (hasRestoreFlag(ShortcutInfo.FLAG_RESTORED_ICON)) { String title = getTitle(); if (!TextUtils.isEmpty(title)) { info.title = Utilities.trim(title); } } else if ((promiseType & ShortcutInfo.FLAG_AUTOINTALL_ICON) != 0) { } else if (hasRestoreFlag(ShortcutInfo.FLAG_AUTOINTALL_ICON)) { if (TextUtils.isEmpty(info.title)) { info.title = getTitle(); } } else { throw new InvalidParameterException("Invalid restoreType " + promiseType); throw new InvalidParameterException("Invalid restoreType " + restoreFlag); } info.contentDescription = mUserManager.getBadgedLabelForUser(info.title, info.user); info.itemType = itemType; info.status = promiseType; info.status = restoreFlag; return info; } Loading Loading @@ -305,7 +309,14 @@ public class LoaderCursor extends CursorWrapper { * Marks the current item as restored */ public void markRestored() { if (restoreFlag != 0) { restoredRows.add(id); restoreFlag = 0; } } public boolean hasRestoreFlag(int flagMask) { return (restoreFlag & flagMask) != 0; } public void commitRestoredItems() { Loading
tests/src/com/android/launcher3/model/LoaderCursorTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE; import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT; import static com.android.launcher3.LauncherSettings.Favorites.PROFILE_ID; import static com.android.launcher3.LauncherSettings.Favorites.RESTORED; import static com.android.launcher3.LauncherSettings.Favorites.SCREEN; import static com.android.launcher3.LauncherSettings.Favorites.TITLE; import static com.android.launcher3.LauncherSettings.Favorites._ID; Loading Loading @@ -72,7 +73,7 @@ public class LoaderCursorTest { mCursor = new MatrixCursor(new String[] { ICON, ICON_PACKAGE, ICON_RESOURCE, TITLE, _ID, CONTAINER, ITEM_TYPE, PROFILE_ID, SCREEN, CELLX, CELLY, SCREEN, CELLX, CELLY, RESTORED }); mContext = InstrumentationRegistry.getTargetContext(); Loading