From 7e56f06ee27b12f70750ae468ef3244e55aa86c5 Mon Sep 17 00:00:00 2001 From: Flavio Fiszman Date: Wed, 30 Jun 2021 17:07:22 +0100 Subject: [PATCH] Fix widget files remapping Change-Id: I6c2b3a052e3201461f4da291aa4d9cd3c1846a4e Bug: 183084949 Test: manual and PeopleSpaceWidgetManagerTest --- .../widget/PeopleSpaceWidgetManager.java | 15 ++++++-- .../widget/PeopleSpaceWidgetManagerTest.java | 35 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java index 72cddd0b4b3f1..09c77e1f5fb10 100644 --- a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java +++ b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java @@ -106,6 +106,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.Executor; @@ -1246,9 +1247,13 @@ public class PeopleSpaceWidgetManager { /** Remaps widget ids in widget specific files. */ public void remapWidgetFiles(Map widgets) { if (DEBUG) Log.d(TAG, "Remapping widget files"); + Map remapped = new HashMap<>(); for (Map.Entry entry : widgets.entrySet()) { String from = String.valueOf(entry.getKey()); String to = String.valueOf(entry.getValue()); + if (Objects.equals(from, to)) { + continue; + } SharedPreferences src = mContext.getSharedPreferences(from, Context.MODE_PRIVATE); PeopleTileKey key = SharedPreferencesHelper.getPeopleTileKey(src); @@ -1257,11 +1262,17 @@ public class PeopleSpaceWidgetManager { Log.d(TAG, "Moving PeopleTileKey: " + key.toString() + " from file: " + from + ", to file: " + to); } - SharedPreferences dest = mContext.getSharedPreferences(to, Context.MODE_PRIVATE); - SharedPreferencesHelper.setPeopleTileKey(dest, key); + remapped.put(to, key); SharedPreferencesHelper.clear(src); + } else { + if (DEBUG) Log.d(TAG, "Widget file has invalid key: " + key); } } + for (Map.Entry entry : remapped.entrySet()) { + SharedPreferences dest = mContext.getSharedPreferences( + entry.getKey(), Context.MODE_PRIVATE); + SharedPreferencesHelper.setPeopleTileKey(dest, entry.getValue()); + } } /** Remaps widget ids in default shared storage. */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java index ddad7581899ba..05bef4c2aeb79 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java @@ -144,6 +144,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase { private static final String TEST_PACKAGE_A = "com.android.systemui.tests"; private static final String TEST_PACKAGE_B = "com.test.package_b"; + private static final String TEST_PACKAGE_C = "com.test.package_c"; private static final String TEST_CHANNEL_ID = "channel_id"; private static final String TEST_CHANNEL_NAME = "channel_name"; private static final String TEST_PARENT_CHANNEL_ID = "parent_channel_id"; @@ -161,6 +162,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase { private static final int WIDGET_ID_15 = 15; private static final String SHORTCUT_ID = "101"; private static final String OTHER_SHORTCUT_ID = "102"; + private static final String THIRD_SHORTCUT_ID = "103"; private static final String NOTIFICATION_KEY = "0|com.android.systemui.tests|0|null|0"; private static final String NOTIFICATION_CONTENT_1 = "message text 1"; private static final Uri URI = Uri.parse("fake_uri"); @@ -211,6 +213,12 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase { String.valueOf(WIDGET_ID_15), String.valueOf(WIDGET_ID_WITH_DIFFERENT_URI) ); + private static final Map WIDGETS_MAPPING_CROSS_MAPPING = Map.of( + String.valueOf(WIDGET_ID_WITH_SHORTCUT), String.valueOf(WIDGET_ID_WITH_KEY_IN_OPTIONS), + String.valueOf(WIDGET_ID_WITHOUT_SHORTCUT), String.valueOf(WIDGET_ID_WITHOUT_SHORTCUT), + String.valueOf(WIDGET_ID_WITH_KEY_IN_OPTIONS), String.valueOf(WIDGET_ID_WITH_SHORTCUT) + ); + private ShortcutInfo mShortcutInfo; private NotificationEntry mNotificationEntry; @@ -1460,6 +1468,33 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase { assertThat(key11.getPackageName()).isNull(); } + @Test + public void testRemapWidgetFiles_crossMapping() { + setStorageForTile(SHORTCUT_ID, TEST_PACKAGE_A, WIDGET_ID_WITH_SHORTCUT, URI); + setStorageForTile(OTHER_SHORTCUT_ID, TEST_PACKAGE_B, WIDGET_ID_WITHOUT_SHORTCUT, URI); + setStorageForTile(THIRD_SHORTCUT_ID, TEST_PACKAGE_C, WIDGET_ID_WITH_KEY_IN_OPTIONS, URI); + + mManager.remapWidgetFiles(WIDGETS_MAPPING_CROSS_MAPPING); + + SharedPreferences sp1 = mContext.getSharedPreferences( + String.valueOf(WIDGET_ID_WITH_SHORTCUT), Context.MODE_PRIVATE); + PeopleTileKey key1 = SharedPreferencesHelper.getPeopleTileKey(sp1); + assertThat(key1.getShortcutId()).isEqualTo(THIRD_SHORTCUT_ID); + assertThat(key1.getPackageName()).isEqualTo(TEST_PACKAGE_C); + + SharedPreferences sp2 = mContext.getSharedPreferences( + String.valueOf(WIDGET_ID_WITHOUT_SHORTCUT), Context.MODE_PRIVATE); + PeopleTileKey key2 = SharedPreferencesHelper.getPeopleTileKey(sp2); + assertThat(key2.getShortcutId()).isEqualTo(OTHER_SHORTCUT_ID); + assertThat(key2.getPackageName()).isEqualTo(TEST_PACKAGE_B); + + SharedPreferences sp4 = mContext.getSharedPreferences( + String.valueOf(WIDGET_ID_WITH_KEY_IN_OPTIONS), Context.MODE_PRIVATE); + PeopleTileKey key4 = SharedPreferencesHelper.getPeopleTileKey(sp4); + assertThat(key4.getShortcutId()).isEqualTo(SHORTCUT_ID); + assertThat(key4.getPackageName()).isEqualTo(TEST_PACKAGE_A); + } + @Test public void testRemapSharedFile() { setStorageForTile(SHORTCUT_ID, TEST_PACKAGE_A, WIDGET_ID_8, URI);