Loading src/com/android/launcher3/AppWidgetsRestoredReceiver.java +51 −12 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import com.android.launcher3.model.ModelDbController; import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.pm.UserCache; import com.android.launcher3.provider.LauncherDbUtils; import com.android.launcher3.provider.RestoreDbTask; import com.android.launcher3.util.ContentWriter; import com.android.launcher3.util.IntArray; Loading Loading @@ -77,16 +76,8 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { + "oldWidgetIds=" + IntArray.wrap(oldWidgetIds).toConcatString() + ", newWidgetIds=" + IntArray.wrap(newWidgetIds).toConcatString()); try { IntArray result = LauncherDbUtils.queryIntArray(false, controller.getDb(), Favorites.TABLE_NAME, Favorites.APPWIDGET_ID, Favorites.APPWIDGET_ID + "!=" + LauncherAppWidgetInfo.NO_ID, null, null); // TODO(b/234700507): Remove the logs after the bug is fixed Log.d(TAG, "restoreAppWidgetIds: all widget ids in database: " + result.toConcatString()); } catch (Exception ex) { Log.e(TAG, "Getting widget ids from the database failed", ex); } logDatabaseWidgetInfo(controller); for (int i = 0; i < oldWidgetIds.length; i++) { Log.i(TAG, "Widget state restore id " + oldWidgetIds[i] + " => " + newWidgetIds[i]); Loading @@ -104,9 +95,13 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { // recreate the widget during loading with the correct host provider. long mainProfileId = UserCache.INSTANCE.get(context) .getSerialNumberForUser(myUserHandle()); long controllerProfileId = controller.getSerialNumberForUser(myUserHandle()); String oldWidgetId = Integer.toString(oldWidgetIds[i]); final String where = "appWidgetId=? and (restored & 1) = 1 and profileId=?"; final String[] args = new String[] { oldWidgetId, Long.toString(mainProfileId) }; String profileId = Long.toString(mainProfileId); final String[] args = new String[] { oldWidgetId, profileId }; Log.d(TAG, "restoreAppWidgetIds: querying profile id=" + profileId + " with controller profile ID=" + controllerProfileId); int result = new ContentWriter(context, new ContentWriter.CommitParams(controller, where, args)) .put(LauncherSettings.Favorites.APPWIDGET_ID, newWidgetIds[i]) Loading Loading @@ -135,4 +130,48 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { app.getModel().forceReload(); } } private static void logDatabaseWidgetInfo(ModelDbController controller) { try (Cursor cursor = controller.getDb().query(Favorites.TABLE_NAME, new String[]{Favorites.APPWIDGET_ID, Favorites.RESTORED, Favorites.PROFILE_ID}, Favorites.APPWIDGET_ID + "!=" + LauncherAppWidgetInfo.NO_ID, null, null, null, null)) { IntArray widgetIdList = new IntArray(); IntArray widgetRestoreList = new IntArray(); IntArray widgetProfileIdList = new IntArray(); if (cursor.moveToFirst()) { final int widgetIdColumnIndex = cursor.getColumnIndex(Favorites.APPWIDGET_ID); final int widgetRestoredColumnIndex = cursor.getColumnIndex(Favorites.RESTORED); final int widgetProfileIdIndex = cursor.getColumnIndex(Favorites.PROFILE_ID); while (!cursor.isAfterLast()) { int widgetId = cursor.getInt(widgetIdColumnIndex); int widgetRestoredFlag = cursor.getInt(widgetRestoredColumnIndex); int widgetProfileId = cursor.getInt(widgetProfileIdIndex); widgetIdList.add(widgetId); widgetRestoreList.add(widgetRestoredFlag); widgetProfileIdList.add(widgetProfileId); cursor.moveToNext(); } } StringBuilder builder = new StringBuilder(); builder.append("["); for (int i = 0; i < widgetIdList.size(); i++) { builder.append("[") .append(widgetIdList.get(i)) .append(", ") .append(widgetRestoreList.get(i)) .append(", ") .append(widgetProfileIdList.get(i)) .append("]"); } builder.append("]"); Log.d(TAG, "restoreAppWidgetIds: all widget ids in database: " + builder.toString()); } catch (Exception ex) { Log.e(TAG, "Getting widget ids from the database failed", ex); } } } src/com/android/launcher3/provider/RestoreDbTask.java +3 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,7 @@ public class RestoreDbTask { // Primary user ids long myProfileId = controller.getSerialNumberForUser(myUserHandle()); long oldProfileId = getDefaultProfileId(db); Log.d(TAG, "sanitizeDB: myProfileId=" + myProfileId + " oldProfileId=" + oldProfileId); LongSparseArray<Long> oldManagedProfileIds = getManagedProfileIds(db, oldProfileId); LongSparseArray<Long> profileMapping = new LongSparseArray<>(oldManagedProfileIds.size() + 1); Loading @@ -148,6 +149,8 @@ public class RestoreDbTask { if (user != null) { long newManagedProfileId = controller.getSerialNumberForUser(user); profileMapping.put(oldManagedProfileId, newManagedProfileId); Log.d(TAG, "sanitizeDB: managed profile id=" + oldManagedProfileId + " should be mapped to new id=" + newManagedProfileId); } } Loading Loading
src/com/android/launcher3/AppWidgetsRestoredReceiver.java +51 −12 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import com.android.launcher3.model.ModelDbController; import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.pm.UserCache; import com.android.launcher3.provider.LauncherDbUtils; import com.android.launcher3.provider.RestoreDbTask; import com.android.launcher3.util.ContentWriter; import com.android.launcher3.util.IntArray; Loading Loading @@ -77,16 +76,8 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { + "oldWidgetIds=" + IntArray.wrap(oldWidgetIds).toConcatString() + ", newWidgetIds=" + IntArray.wrap(newWidgetIds).toConcatString()); try { IntArray result = LauncherDbUtils.queryIntArray(false, controller.getDb(), Favorites.TABLE_NAME, Favorites.APPWIDGET_ID, Favorites.APPWIDGET_ID + "!=" + LauncherAppWidgetInfo.NO_ID, null, null); // TODO(b/234700507): Remove the logs after the bug is fixed Log.d(TAG, "restoreAppWidgetIds: all widget ids in database: " + result.toConcatString()); } catch (Exception ex) { Log.e(TAG, "Getting widget ids from the database failed", ex); } logDatabaseWidgetInfo(controller); for (int i = 0; i < oldWidgetIds.length; i++) { Log.i(TAG, "Widget state restore id " + oldWidgetIds[i] + " => " + newWidgetIds[i]); Loading @@ -104,9 +95,13 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { // recreate the widget during loading with the correct host provider. long mainProfileId = UserCache.INSTANCE.get(context) .getSerialNumberForUser(myUserHandle()); long controllerProfileId = controller.getSerialNumberForUser(myUserHandle()); String oldWidgetId = Integer.toString(oldWidgetIds[i]); final String where = "appWidgetId=? and (restored & 1) = 1 and profileId=?"; final String[] args = new String[] { oldWidgetId, Long.toString(mainProfileId) }; String profileId = Long.toString(mainProfileId); final String[] args = new String[] { oldWidgetId, profileId }; Log.d(TAG, "restoreAppWidgetIds: querying profile id=" + profileId + " with controller profile ID=" + controllerProfileId); int result = new ContentWriter(context, new ContentWriter.CommitParams(controller, where, args)) .put(LauncherSettings.Favorites.APPWIDGET_ID, newWidgetIds[i]) Loading Loading @@ -135,4 +130,48 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { app.getModel().forceReload(); } } private static void logDatabaseWidgetInfo(ModelDbController controller) { try (Cursor cursor = controller.getDb().query(Favorites.TABLE_NAME, new String[]{Favorites.APPWIDGET_ID, Favorites.RESTORED, Favorites.PROFILE_ID}, Favorites.APPWIDGET_ID + "!=" + LauncherAppWidgetInfo.NO_ID, null, null, null, null)) { IntArray widgetIdList = new IntArray(); IntArray widgetRestoreList = new IntArray(); IntArray widgetProfileIdList = new IntArray(); if (cursor.moveToFirst()) { final int widgetIdColumnIndex = cursor.getColumnIndex(Favorites.APPWIDGET_ID); final int widgetRestoredColumnIndex = cursor.getColumnIndex(Favorites.RESTORED); final int widgetProfileIdIndex = cursor.getColumnIndex(Favorites.PROFILE_ID); while (!cursor.isAfterLast()) { int widgetId = cursor.getInt(widgetIdColumnIndex); int widgetRestoredFlag = cursor.getInt(widgetRestoredColumnIndex); int widgetProfileId = cursor.getInt(widgetProfileIdIndex); widgetIdList.add(widgetId); widgetRestoreList.add(widgetRestoredFlag); widgetProfileIdList.add(widgetProfileId); cursor.moveToNext(); } } StringBuilder builder = new StringBuilder(); builder.append("["); for (int i = 0; i < widgetIdList.size(); i++) { builder.append("[") .append(widgetIdList.get(i)) .append(", ") .append(widgetRestoreList.get(i)) .append(", ") .append(widgetProfileIdList.get(i)) .append("]"); } builder.append("]"); Log.d(TAG, "restoreAppWidgetIds: all widget ids in database: " + builder.toString()); } catch (Exception ex) { Log.e(TAG, "Getting widget ids from the database failed", ex); } } }
src/com/android/launcher3/provider/RestoreDbTask.java +3 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,7 @@ public class RestoreDbTask { // Primary user ids long myProfileId = controller.getSerialNumberForUser(myUserHandle()); long oldProfileId = getDefaultProfileId(db); Log.d(TAG, "sanitizeDB: myProfileId=" + myProfileId + " oldProfileId=" + oldProfileId); LongSparseArray<Long> oldManagedProfileIds = getManagedProfileIds(db, oldProfileId); LongSparseArray<Long> profileMapping = new LongSparseArray<>(oldManagedProfileIds.size() + 1); Loading @@ -148,6 +149,8 @@ public class RestoreDbTask { if (user != null) { long newManagedProfileId = controller.getSerialNumberForUser(user); profileMapping.put(oldManagedProfileId, newManagedProfileId); Log.d(TAG, "sanitizeDB: managed profile id=" + oldManagedProfileId + " should be mapped to new id=" + newManagedProfileId); } } Loading