Loading services/core/java/com/android/server/wm/DisplayContent.java +40 −7 Original line number Diff line number Diff line Loading @@ -162,6 +162,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.content.ComponentCallbacks; import android.content.ComponentName; import android.content.Context; import android.content.pm.ActivityInfo; Loading Loading @@ -456,6 +457,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private DisplayInfo mLastDisplayInfoOverride; private final DisplayMetrics mDisplayMetrics = new DisplayMetrics(); @NonNull private final DisplayPolicy mDisplayPolicy; private final DisplayRotation mDisplayRotation; Loading Loading @@ -542,6 +544,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** Remove this display when animation on it has completed. */ private boolean mDeferredRemoval; @NonNull final PinnedTaskController mPinnedTaskController; private final LinkedList<ActivityRecord> mTmpUpdateAllDrawn = new LinkedList(); Loading Loading @@ -1101,6 +1104,29 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp w.updateResizingWindowIfNeeded(); }; /** * Called to update fields retrieve from {@link #getDisplayUiContext()} resources when * there's a configuration update on {@link #getDisplayUiContext()}. */ @NonNull private final ComponentCallbacks mSysUiContextConfigCallback = new ComponentCallbacks() { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { synchronized (mWmService.mGlobalLock) { if (mDisplayReady) { mDisplayPolicy.onConfigurationChanged(); mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp(); } } } @Override public void onLowMemory() { // Do nothing. } }; /** * Create new {@link DisplayContent} instance, add itself to the root window container and * initialize direct children. Loading Loading @@ -2797,11 +2823,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final int lastOrientation = getConfiguration().orientation; final int lastWindowingMode = getWindowingMode(); super.onConfigurationChanged(newParentConfig); if (mDisplayPolicy != null) { mDisplayPolicy.onConfigurationChanged(); mPinnedTaskController.onPostDisplayConfigurationChanged(); mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp(); if (!Flags.trackSystemUiContextBeforeWms()) { mSysUiContextConfigCallback.onConfigurationChanged(newParentConfig); } mPinnedTaskController.onPostDisplayConfigurationChanged(); // Update IME parent if needed. updateImeParent(); Loading Loading @@ -3381,6 +3406,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp .getKeyguardController().onDisplayRemoved(mDisplayId); mWallpaperController.resetLargestDisplay(mDisplay); mWmService.mDisplayWindowSettings.onDisplayRemoved(this); if (Flags.trackSystemUiContextBeforeWms()) { getDisplayUiContext().unregisterComponentCallbacks(mSysUiContextConfigCallback); } } finally { mDisplayReady = false; } Loading Loading @@ -5429,7 +5457,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp reconfigureDisplayLocked(); onRequestedOverrideConfigurationChanged(getRequestedOverrideConfiguration()); mWmService.mDisplayNotificationController.dispatchDisplayAdded(this); // Attach the SystemUiContext to this DisplayContent the get latest configuration. // Attach the SystemUiContext to this DisplayContent to get latest configuration. // Note that the SystemUiContext will be removed automatically if this DisplayContent // is detached. registerSystemUiContext(); Loading @@ -5437,11 +5465,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } private void registerSystemUiContext() { final Context systemUiContext = getDisplayUiContext(); final WindowProcessController wpc = mAtmService.getProcessController( getDisplayUiContext().getIApplicationThread()); systemUiContext.getIApplicationThread()); mWmService.mWindowContextListenerController.registerWindowContainerListener( wpc, getDisplayUiContext().getWindowContextToken(), this, wpc, systemUiContext.getWindowContextToken(), this, INVALID_WINDOW_TYPE, null /* options */); if (Flags.trackSystemUiContextBeforeWms()) { systemUiContext.registerComponentCallbacks(mSysUiContextConfigCallback); } } @Override Loading Loading @@ -6620,6 +6652,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp forAllTasks((t) -> { t.getRootTask().removeChild(t, "removeAllTasks"); }); } @NonNull Context getDisplayUiContext() { return mDisplayPolicy.getSystemUiContext(); } Loading services/core/java/com/android/server/wm/DisplayPolicy.java +1 −0 Original line number Diff line number Diff line Loading @@ -1865,6 +1865,7 @@ public class DisplayPolicy { return mContext; } @NonNull Context getSystemUiContext() { return mUiContext; } Loading services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +8 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ import com.android.server.policy.PermissionPolicyInternal; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.testutils.StubTransaction; import com.android.server.uri.UriGrantsManagerInternal; import com.android.window.flags.Flags; import org.junit.rules.TestRule; import org.junit.runner.Description; Loading Loading @@ -657,6 +658,13 @@ public class SystemServicesTestRule implements TestRule { AppWarnings appWarnings = getAppWarningsLocked(); spyOn(appWarnings); doNothing().when(appWarnings).onStartActivity(any()); if (Flags.trackSystemUiContextBeforeWms()) { final Context uiContext = getUiContext(); spyOn(uiContext); doNothing().when(uiContext).registerComponentCallbacks(any()); doNothing().when(uiContext).unregisterComponentCallbacks(any()); } } @Override Loading services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java +9 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.Rect; Loading @@ -39,6 +40,7 @@ import android.view.DisplayCutout; import android.view.DisplayInfo; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; import com.android.window.flags.Flags; class TestDisplayContent extends DisplayContent { Loading Loading @@ -79,6 +81,13 @@ class TestDisplayContent extends DisplayContent { WindowTestsBase.suppressInsetsAnimation(insetsPolicy.getPermanentControlTarget()); WindowTestsBase.suppressInsetsAnimation(insetsPolicy.getTransientControlTarget()); if (Flags.trackSystemUiContextBeforeWms()) { final Context uiContext = getDisplayUiContext(); spyOn(uiContext); doNothing().when(uiContext).registerComponentCallbacks(any()); doNothing().when(uiContext).unregisterComponentCallbacks(any()); } // For devices that set the sysprop ro.bootanim.set_orientation_<display_id> // See DisplayRotation#readDefaultDisplayRotation for context. // Without that, meaning of height and width in context of the tests can be swapped if Loading services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +3 −5 Original line number Diff line number Diff line Loading @@ -861,11 +861,9 @@ public class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy, @Nullable SettingsEntry overrideSettings) { final DisplayContent display = new TestDisplayContent.Builder(mAtm, info) final DisplayContent dc = new TestDisplayContent.Builder(mAtm, info) .setOverrideSettings(overrideSettings) .build(); final DisplayContent dc = display.mDisplayContent; // this display can show IME. dc.mWmService.mDisplayWindowSettings.setDisplayImePolicy(dc, imePolicy); return dc; Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +40 −7 Original line number Diff line number Diff line Loading @@ -162,6 +162,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.content.ComponentCallbacks; import android.content.ComponentName; import android.content.Context; import android.content.pm.ActivityInfo; Loading Loading @@ -456,6 +457,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private DisplayInfo mLastDisplayInfoOverride; private final DisplayMetrics mDisplayMetrics = new DisplayMetrics(); @NonNull private final DisplayPolicy mDisplayPolicy; private final DisplayRotation mDisplayRotation; Loading Loading @@ -542,6 +544,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** Remove this display when animation on it has completed. */ private boolean mDeferredRemoval; @NonNull final PinnedTaskController mPinnedTaskController; private final LinkedList<ActivityRecord> mTmpUpdateAllDrawn = new LinkedList(); Loading Loading @@ -1101,6 +1104,29 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp w.updateResizingWindowIfNeeded(); }; /** * Called to update fields retrieve from {@link #getDisplayUiContext()} resources when * there's a configuration update on {@link #getDisplayUiContext()}. */ @NonNull private final ComponentCallbacks mSysUiContextConfigCallback = new ComponentCallbacks() { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { synchronized (mWmService.mGlobalLock) { if (mDisplayReady) { mDisplayPolicy.onConfigurationChanged(); mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp(); } } } @Override public void onLowMemory() { // Do nothing. } }; /** * Create new {@link DisplayContent} instance, add itself to the root window container and * initialize direct children. Loading Loading @@ -2797,11 +2823,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final int lastOrientation = getConfiguration().orientation; final int lastWindowingMode = getWindowingMode(); super.onConfigurationChanged(newParentConfig); if (mDisplayPolicy != null) { mDisplayPolicy.onConfigurationChanged(); mPinnedTaskController.onPostDisplayConfigurationChanged(); mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp(); if (!Flags.trackSystemUiContextBeforeWms()) { mSysUiContextConfigCallback.onConfigurationChanged(newParentConfig); } mPinnedTaskController.onPostDisplayConfigurationChanged(); // Update IME parent if needed. updateImeParent(); Loading Loading @@ -3381,6 +3406,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp .getKeyguardController().onDisplayRemoved(mDisplayId); mWallpaperController.resetLargestDisplay(mDisplay); mWmService.mDisplayWindowSettings.onDisplayRemoved(this); if (Flags.trackSystemUiContextBeforeWms()) { getDisplayUiContext().unregisterComponentCallbacks(mSysUiContextConfigCallback); } } finally { mDisplayReady = false; } Loading Loading @@ -5429,7 +5457,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp reconfigureDisplayLocked(); onRequestedOverrideConfigurationChanged(getRequestedOverrideConfiguration()); mWmService.mDisplayNotificationController.dispatchDisplayAdded(this); // Attach the SystemUiContext to this DisplayContent the get latest configuration. // Attach the SystemUiContext to this DisplayContent to get latest configuration. // Note that the SystemUiContext will be removed automatically if this DisplayContent // is detached. registerSystemUiContext(); Loading @@ -5437,11 +5465,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } private void registerSystemUiContext() { final Context systemUiContext = getDisplayUiContext(); final WindowProcessController wpc = mAtmService.getProcessController( getDisplayUiContext().getIApplicationThread()); systemUiContext.getIApplicationThread()); mWmService.mWindowContextListenerController.registerWindowContainerListener( wpc, getDisplayUiContext().getWindowContextToken(), this, wpc, systemUiContext.getWindowContextToken(), this, INVALID_WINDOW_TYPE, null /* options */); if (Flags.trackSystemUiContextBeforeWms()) { systemUiContext.registerComponentCallbacks(mSysUiContextConfigCallback); } } @Override Loading Loading @@ -6620,6 +6652,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp forAllTasks((t) -> { t.getRootTask().removeChild(t, "removeAllTasks"); }); } @NonNull Context getDisplayUiContext() { return mDisplayPolicy.getSystemUiContext(); } Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +1 −0 Original line number Diff line number Diff line Loading @@ -1865,6 +1865,7 @@ public class DisplayPolicy { return mContext; } @NonNull Context getSystemUiContext() { return mUiContext; } Loading
services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +8 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ import com.android.server.policy.PermissionPolicyInternal; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.testutils.StubTransaction; import com.android.server.uri.UriGrantsManagerInternal; import com.android.window.flags.Flags; import org.junit.rules.TestRule; import org.junit.runner.Description; Loading Loading @@ -657,6 +658,13 @@ public class SystemServicesTestRule implements TestRule { AppWarnings appWarnings = getAppWarningsLocked(); spyOn(appWarnings); doNothing().when(appWarnings).onStartActivity(any()); if (Flags.trackSystemUiContextBeforeWms()) { final Context uiContext = getUiContext(); spyOn(uiContext); doNothing().when(uiContext).registerComponentCallbacks(any()); doNothing().when(uiContext).unregisterComponentCallbacks(any()); } } @Override Loading
services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java +9 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.Rect; Loading @@ -39,6 +40,7 @@ import android.view.DisplayCutout; import android.view.DisplayInfo; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; import com.android.window.flags.Flags; class TestDisplayContent extends DisplayContent { Loading Loading @@ -79,6 +81,13 @@ class TestDisplayContent extends DisplayContent { WindowTestsBase.suppressInsetsAnimation(insetsPolicy.getPermanentControlTarget()); WindowTestsBase.suppressInsetsAnimation(insetsPolicy.getTransientControlTarget()); if (Flags.trackSystemUiContextBeforeWms()) { final Context uiContext = getDisplayUiContext(); spyOn(uiContext); doNothing().when(uiContext).registerComponentCallbacks(any()); doNothing().when(uiContext).unregisterComponentCallbacks(any()); } // For devices that set the sysprop ro.bootanim.set_orientation_<display_id> // See DisplayRotation#readDefaultDisplayRotation for context. // Without that, meaning of height and width in context of the tests can be swapped if Loading
services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +3 −5 Original line number Diff line number Diff line Loading @@ -861,11 +861,9 @@ public class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy, @Nullable SettingsEntry overrideSettings) { final DisplayContent display = new TestDisplayContent.Builder(mAtm, info) final DisplayContent dc = new TestDisplayContent.Builder(mAtm, info) .setOverrideSettings(overrideSettings) .build(); final DisplayContent dc = display.mDisplayContent; // this display can show IME. dc.mWmService.mDisplayWindowSettings.setDisplayImePolicy(dc, imePolicy); return dc; Loading