diff options
author | Jon Miranda <jonmiranda@google.com> | 2019-05-13 14:57:50 -0700 |
---|---|---|
committer | Jonathan Miranda <jonmiranda@google.com> | 2019-05-14 17:30:04 +0000 |
commit | c7206caf6e6d6006bbc4909e140c6720e5c472d2 (patch) | |
tree | deea6aeab4b08356b3e58f55696ad1c84119fd0e /src/com/android/launcher3/provider | |
parent | 512a3c59eaccb6cac505258ebfc2795904709d59 (diff) | |
download | packages_apps_Trebuchet-c7206caf6e6d6006bbc4909e140c6720e5c472d2.tar.gz packages_apps_Trebuchet-c7206caf6e6d6006bbc4909e140c6720e5c472d2.tar.bz2 packages_apps_Trebuchet-c7206caf6e6d6006bbc4909e140c6720e5c472d2.zip |
Ensure app widget ids are restored after database is sanitized.
Previously, it was possible for AppWidgetsRestoredReceiver to
start the restore process before work profile has finished restoring which
resulted in the work profile items being removed from the workspace.
Bug: 131315856
Change-Id: I2f295a1ca91f1996522bcc8052aa139979526e3b
Diffstat (limited to 'src/com/android/launcher3/provider')
-rw-r--r-- | src/com/android/launcher3/provider/RestoreDbTask.java | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/com/android/launcher3/provider/RestoreDbTask.java b/src/com/android/launcher3/provider/RestoreDbTask.java index 053c493d7..3c0c5fdde 100644 --- a/src/com/android/launcher3/provider/RestoreDbTask.java +++ b/src/com/android/launcher3/provider/RestoreDbTask.java @@ -16,18 +16,23 @@ package com.android.launcher3.provider; +import static com.android.launcher3.Utilities.getIntArrayFromString; +import static com.android.launcher3.Utilities.getStringFromIntArray; import static com.android.launcher3.provider.LauncherDbUtils.dropTable; import android.app.backup.BackupManager; import android.content.ContentValues; import android.content.Context; +import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import android.os.Build; import android.os.UserHandle; import android.util.LongSparseArray; import android.util.SparseLongArray; +import androidx.annotation.NonNull; + +import com.android.launcher3.AppWidgetsRestoredReceiver; import com.android.launcher3.LauncherAppWidgetInfo; import com.android.launcher3.LauncherProvider.DatabaseHelper; import com.android.launcher3.LauncherSettings.Favorites; @@ -53,10 +58,16 @@ public class RestoreDbTask { private static final String INFO_COLUMN_NAME = "name"; private static final String INFO_COLUMN_DEFAULT_VALUE = "dflt_value"; - public static boolean performRestore(DatabaseHelper helper, BackupManager backupManager) { + private static final String APPWIDGET_OLD_IDS = "appwidget_old_ids"; + private static final String APPWIDGET_IDS = "appwidget_ids"; + + public static boolean performRestore(Context context, DatabaseHelper helper, + BackupManager backupManager) { SQLiteDatabase db = helper.getWritableDatabase(); try (SQLiteTransaction t = new SQLiteTransaction(db)) { - new RestoreDbTask().sanitizeDB(helper, db, backupManager); + RestoreDbTask task = new RestoreDbTask(); + task.sanitizeDB(helper, db, backupManager); + task.restoreAppWidgetIdsIfExists(context); t.commit(); return true; } catch (Exception e) { @@ -230,4 +241,27 @@ public class RestoreDbTask { FileLog.d(TAG, "Restore data received through full backup " + isPending); Utilities.getPrefs(context).edit().putBoolean(RESTORE_TASK_PENDING, isPending).commit(); } + + private void restoreAppWidgetIdsIfExists(Context context) { + SharedPreferences prefs = Utilities.getPrefs(context); + if (prefs.contains(APPWIDGET_OLD_IDS) && prefs.contains(APPWIDGET_IDS)) { + AppWidgetsRestoredReceiver.restoreAppWidgetIds(context, + getIntArrayFromString(prefs.getString(APPWIDGET_OLD_IDS, "")), + getIntArrayFromString(prefs.getString(APPWIDGET_IDS, ""))); + } else { + FileLog.d(TAG, "No app widget ids to restore."); + } + + prefs.edit().remove(APPWIDGET_OLD_IDS) + .remove(APPWIDGET_IDS).apply(); + } + + public static void setRestoredAppWidgetIds(Context context, @NonNull int[] oldIds, + @NonNull int[] newIds) { + Utilities.getPrefs(context).edit() + .putString(APPWIDGET_OLD_IDS, getStringFromIntArray(oldIds)) + .putString(APPWIDGET_IDS, getStringFromIntArray(newIds)) + .commit(); + } + } |