Loading services/core/java/com/android/server/wm/PackageConfigurationUpdaterImpl.java +10 −6 Original line number Diff line number Diff line Loading @@ -106,14 +106,18 @@ final class PackageConfigurationUpdaterImpl implements private void updateConfig(int uid, String packageName) { final ArraySet<WindowProcessController> processes = mAtm.mProcessMap.getProcesses(uid); if (processes == null) return; for (int i = processes.size() - 1; i >= 0; i--) { final WindowProcessController wpc = processes.valueAt(i); if (!wpc.mInfo.packageName.equals(packageName)) continue; if (processes == null || processes.isEmpty()) return; LocaleList localesOverride = LocaleOverlayHelper.combineLocalesIfOverlayExists( mLocales, mAtm.getGlobalConfiguration().getLocales()); for (int i = processes.size() - 1; i >= 0; i--) { final WindowProcessController wpc = processes.valueAt(i); if (wpc.mInfo.packageName.equals(packageName)) { wpc.applyAppSpecificConfig(mNightMode, localesOverride); wpc.updateAppSpecificSettingsForAllActivities(mNightMode, localesOverride); } // Always inform individual activities about the update, since activities from other // packages may be sharing this process wpc.updateAppSpecificSettingsForAllActivitiesInPackage(packageName, mNightMode, localesOverride); } } Loading services/core/java/com/android/server/wm/WindowProcessController.java +7 −2 Original line number Diff line number Diff line Loading @@ -821,10 +821,15 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio // TODO(b/199277065): Re-assess how app-specific locales are applied based on UXR // TODO(b/199277729): Consider whether we need to add special casing for edge cases like // activity-embeddings etc. void updateAppSpecificSettingsForAllActivities(Integer nightMode, LocaleList localesOverride) { void updateAppSpecificSettingsForAllActivitiesInPackage(String packageName, Integer nightMode, LocaleList localesOverride) { for (int i = mActivities.size() - 1; i >= 0; --i) { final ActivityRecord r = mActivities.get(i); if (r.applyAppSpecificConfig(nightMode, localesOverride) && r.mVisibleRequested) { // Activities from other packages could be sharing this process. Only propagate updates // to those activities that are part of the package whose app-specific settings changed if (packageName.equals(r.packageName) && r.applyAppSpecificConfig(nightMode, localesOverride) && r.mVisibleRequested) { r.ensureActivityConfiguration(0 /* globalChanges */, true /* preserveWindow */); } } Loading services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +13 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static com.android.dx.mockito.inline.extended.ExtendedMockito.never; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; import static com.android.server.wm.ActivityRecord.State.PAUSED; Loading Loading @@ -374,11 +375,21 @@ public class WindowProcessControllerTests extends WindowTestsBase { final ActivityRecord activity = createActivityRecord(mWpc); activity.mVisibleRequested = true; doReturn(true).when(activity).applyAppSpecificConfig(anyInt(), any()); mWpc.updateAppSpecificSettingsForAllActivities(Configuration.UI_MODE_NIGHT_YES, LocaleList.forLanguageTags("en-XA")); mWpc.updateAppSpecificSettingsForAllActivitiesInPackage(DEFAULT_COMPONENT_PACKAGE_NAME, Configuration.UI_MODE_NIGHT_YES, LocaleList.forLanguageTags("en-XA")); verify(activity).ensureActivityConfiguration(anyInt(), anyBoolean()); } @Test public void testTopActivityUiModeChangeForDifferentPackage_noScheduledConfigChange() { final ActivityRecord activity = createActivityRecord(mWpc); activity.mVisibleRequested = true; mWpc.updateAppSpecificSettingsForAllActivitiesInPackage("com.different.package", Configuration.UI_MODE_NIGHT_YES, LocaleList.forLanguageTags("en-XA")); verify(activity, never()).applyAppSpecificConfig(anyInt(), any()); verify(activity, never()).ensureActivityConfiguration(anyInt(), anyBoolean()); } @Test public void testTopActivityDisplayAreaMatchesTopMostActivity_noActivities() { assertNull(mWpc.getTopActivityDisplayArea()); Loading Loading
services/core/java/com/android/server/wm/PackageConfigurationUpdaterImpl.java +10 −6 Original line number Diff line number Diff line Loading @@ -106,14 +106,18 @@ final class PackageConfigurationUpdaterImpl implements private void updateConfig(int uid, String packageName) { final ArraySet<WindowProcessController> processes = mAtm.mProcessMap.getProcesses(uid); if (processes == null) return; for (int i = processes.size() - 1; i >= 0; i--) { final WindowProcessController wpc = processes.valueAt(i); if (!wpc.mInfo.packageName.equals(packageName)) continue; if (processes == null || processes.isEmpty()) return; LocaleList localesOverride = LocaleOverlayHelper.combineLocalesIfOverlayExists( mLocales, mAtm.getGlobalConfiguration().getLocales()); for (int i = processes.size() - 1; i >= 0; i--) { final WindowProcessController wpc = processes.valueAt(i); if (wpc.mInfo.packageName.equals(packageName)) { wpc.applyAppSpecificConfig(mNightMode, localesOverride); wpc.updateAppSpecificSettingsForAllActivities(mNightMode, localesOverride); } // Always inform individual activities about the update, since activities from other // packages may be sharing this process wpc.updateAppSpecificSettingsForAllActivitiesInPackage(packageName, mNightMode, localesOverride); } } Loading
services/core/java/com/android/server/wm/WindowProcessController.java +7 −2 Original line number Diff line number Diff line Loading @@ -821,10 +821,15 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio // TODO(b/199277065): Re-assess how app-specific locales are applied based on UXR // TODO(b/199277729): Consider whether we need to add special casing for edge cases like // activity-embeddings etc. void updateAppSpecificSettingsForAllActivities(Integer nightMode, LocaleList localesOverride) { void updateAppSpecificSettingsForAllActivitiesInPackage(String packageName, Integer nightMode, LocaleList localesOverride) { for (int i = mActivities.size() - 1; i >= 0; --i) { final ActivityRecord r = mActivities.get(i); if (r.applyAppSpecificConfig(nightMode, localesOverride) && r.mVisibleRequested) { // Activities from other packages could be sharing this process. Only propagate updates // to those activities that are part of the package whose app-specific settings changed if (packageName.equals(r.packageName) && r.applyAppSpecificConfig(nightMode, localesOverride) && r.mVisibleRequested) { r.ensureActivityConfiguration(0 /* globalChanges */, true /* preserveWindow */); } } Loading
services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +13 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static com.android.dx.mockito.inline.extended.ExtendedMockito.never; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; import static com.android.server.wm.ActivityRecord.State.PAUSED; Loading Loading @@ -374,11 +375,21 @@ public class WindowProcessControllerTests extends WindowTestsBase { final ActivityRecord activity = createActivityRecord(mWpc); activity.mVisibleRequested = true; doReturn(true).when(activity).applyAppSpecificConfig(anyInt(), any()); mWpc.updateAppSpecificSettingsForAllActivities(Configuration.UI_MODE_NIGHT_YES, LocaleList.forLanguageTags("en-XA")); mWpc.updateAppSpecificSettingsForAllActivitiesInPackage(DEFAULT_COMPONENT_PACKAGE_NAME, Configuration.UI_MODE_NIGHT_YES, LocaleList.forLanguageTags("en-XA")); verify(activity).ensureActivityConfiguration(anyInt(), anyBoolean()); } @Test public void testTopActivityUiModeChangeForDifferentPackage_noScheduledConfigChange() { final ActivityRecord activity = createActivityRecord(mWpc); activity.mVisibleRequested = true; mWpc.updateAppSpecificSettingsForAllActivitiesInPackage("com.different.package", Configuration.UI_MODE_NIGHT_YES, LocaleList.forLanguageTags("en-XA")); verify(activity, never()).applyAppSpecificConfig(anyInt(), any()); verify(activity, never()).ensureActivityConfiguration(anyInt(), anyBoolean()); } @Test public void testTopActivityDisplayAreaMatchesTopMostActivity_noActivities() { assertNull(mWpc.getTopActivityDisplayArea()); Loading