From 24af61a9883ae101d7b89fc93be3d8cd0bf609a0 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Mon, 26 Apr 2021 05:51:46 +0000 Subject: [PATCH] Revert "Do not relaunch bg activities when application info changes" This reverts commit 8b5afd93b6c63e99fe58104437a651b0bfebbbfd. Reason for revert: b/186367826 Bug: 185301309 Change-Id: I7a68f1a32aff194d68af1c3ef55dc60ffbde5df9 --- core/java/android/app/ActivityThread.java | 14 ++++++++++++++ .../android/app/activity/ActivityThreadTest.java | 9 +++++++++ .../java/com/android/server/am/ProcessList.java | 7 ------- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 35007aec01856..3a1961a1c741a 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5961,6 +5961,20 @@ public final class ActivityThread extends ClientTransactionHandler // Update all affected Resources objects to use new ResourcesImpl mResourcesManager.applyNewResourceDirsLocked(ai, oldResDirs); } + + ApplicationPackageManager.configurationChanged(); + + // Trigger a regular Configuration change event, only with a different assetsSeq number + // so that we actually call through to all components. + // TODO(adamlesinski): Change this to make use of ActivityManager's upcoming ability to + // store configurations per-process. + final Configuration config = mConfigurationController.getConfiguration(); + Configuration newConfig = new Configuration(); + newConfig.assetsSeq = (config != null ? config.assetsSeq : 0) + 1; + mConfigurationController.handleConfigurationChanged(newConfig, null /* compat */); + + // Preserve windows to avoid black flickers when overlays change. + relaunchAllActivities(true /* preserveWindows */, "handleApplicationInfoChanged"); } /** diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java index 6f17ea9946998..2e2e6bd075395 100644 --- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java @@ -184,6 +184,15 @@ public class ActivityThreadTest { }); } + @Test + public void testHandleActivity_assetsChanged() { + relaunchActivityAndAssertPreserveWindow(activity -> { + // Relaunches all activities. + activity.getActivityThread().handleApplicationInfoChanged( + activity.getApplicationInfo()); + }); + } + @Test public void testRecreateActivity() { relaunchActivityAndAssertPreserveWindow(Activity::recreate); diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 774825ee885ca..fae941d172a21 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -77,7 +77,6 @@ import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManagerInternal; -import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Point; import android.net.LocalSocket; @@ -4644,12 +4643,6 @@ public final class ProcessList { } }); } - - // Update the global configuration and increase the assets sequence number. - Configuration currentConfig = mService.mActivityTaskManager.getConfiguration(); - Configuration newConfig = new Configuration(); - newConfig.assetsSeq = (currentConfig != null ? currentConfig.assetsSeq : 0) + 1; - mService.mActivityTaskManager.updateConfiguration(newConfig); } @GuardedBy("mService")