Loading services/core/java/com/android/server/wm/DisplayPolicy.java +135 −154 Original line number Diff line number Diff line Loading @@ -69,7 +69,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE; import static android.view.WindowManager.LayoutParams.TYPE_POINTER; import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL; Loading Loading @@ -243,7 +242,7 @@ public class DisplayPolicy { } } private SystemGesturesPointerEventListener mSystemGestures; private final SystemGesturesPointerEventListener mSystemGestures; private volatile int mLidState = LID_ABSENT; private volatile int mDockMode = Intent.EXTRA_DOCK_STATE_UNDOCKED; Loading Loading @@ -385,7 +384,7 @@ public class DisplayPolicy { private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; private GestureNavigationSettingsObserver mGestureNavigationSettingsObserver; private final GestureNavigationSettingsObserver mGestureNavigationSettingsObserver; private final WindowManagerInternal.AppTransitionListener mAppTransitionListener; Loading Loading @@ -449,130 +448,7 @@ public class DisplayPolicy { final Looper looper = UiThread.getHandler().getLooper(); mHandler = new PolicyHandler(looper); mAppTransitionListener = new WindowManagerInternal.AppTransitionListener() { private Runnable mAppTransitionPending = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionPending(displayId); } }; private Runnable mAppTransitionCancelled = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionCancelled(displayId); } }; private Runnable mAppTransitionFinished = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionFinished(displayId); } }; @Override public void onAppTransitionPendingLocked() { mHandler.post(mAppTransitionPending); } @Override public int onAppTransitionStartingLocked(boolean keyguardGoingAway, long duration, long statusBarAnimationStartTime, long statusBarAnimationDuration) { mHandler.post(() -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionStarting(mContext.getDisplayId(), statusBarAnimationStartTime, statusBarAnimationDuration); } }); return 0; } @Override public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { mHandler.post(mAppTransitionCancelled); } @Override public void onAppTransitionFinishedLocked(IBinder token) { mHandler.post(mAppTransitionFinished); } }; displayContent.mAppTransition.registerListenerLocked(mAppTransitionListener); mImmersiveModeConfirmation = new ImmersiveModeConfirmation(mContext, looper, mService.mVrModeEnabled); // TODO(b/180986447): Make it can take screenshot on external display mScreenshotHelper = displayContent.isDefaultDisplay ? new ScreenshotHelper(mContext) : null; if (mDisplayContent.isDefaultDisplay) { mHasStatusBar = true; mHasNavigationBar = mContext.getResources().getBoolean(R.bool.config_showNavigationBar); // Allow a system property to override this. Used by the emulator. // See also hasNavigationBar(). String navBarOverride = SystemProperties.get("qemu.hw.mainkeys"); if ("1".equals(navBarOverride)) { mHasNavigationBar = false; } else if ("0".equals(navBarOverride)) { mHasNavigationBar = true; } } else { mHasStatusBar = false; mHasNavigationBar = mDisplayContent.supportsSystemDecorations(); } mRefreshRatePolicy = new RefreshRatePolicy(mService, mDisplayContent.getDisplayInfo(), mService.mHighRefreshRateDenylist); } private void checkAltBarSwipeForTransientBars(@WindowManagerPolicy.AltBarPosition int pos) { if (mStatusBarAlt != null && mStatusBarAltPosition == pos) { requestTransientBars(mStatusBarAlt); } if (mNavigationBarAlt != null && mNavigationBarAltPosition == pos) { requestTransientBars(mNavigationBarAlt); } if (mClimateBarAlt != null && mClimateBarAltPosition == pos) { requestTransientBars(mClimateBarAlt); } if (mExtraNavBarAlt != null && mExtraNavBarAltPosition == pos) { requestTransientBars(mExtraNavBarAlt); } } void systemReady() { if (mService.mPointerLocationEnabled) { setPointerLocationEnabled(true); } } @NonNull private GestureNavigationSettingsObserver getGestureNavigationSettingsObserver() { if (mGestureNavigationSettingsObserver == null) { mGestureNavigationSettingsObserver = new GestureNavigationSettingsObserver(mHandler, mContext, () -> { synchronized (mLock) { onConfigurationChanged(); getSystemGestures().onConfigurationChanged(); mDisplayContent.updateSystemGestureExclusion(); } }); mHandler.post(mGestureNavigationSettingsObserver::register); } return mGestureNavigationSettingsObserver; } @NonNull private SystemGesturesPointerEventListener getSystemGestures() { if (mSystemGestures == null) { final Context gestureContext = mUiContext.createWindowContext( mDisplayContent.getDisplay(), TYPE_POINTER, null /* options */); mSystemGestures = new SystemGesturesPointerEventListener(gestureContext, mHandler, mSystemGestures = new SystemGesturesPointerEventListener(mContext, mHandler, new SystemGesturesPointerEventListener.Callbacks() { @Override public void onSwipeFromTop() { Loading Loading @@ -601,10 +477,9 @@ public class DisplayPolicy { synchronized (mLock) { mDisplayContent.calculateSystemGestureExclusion( excludedRegion, null /* outUnrestricted */); final boolean excluded = mSystemGestures .currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_RIGHT final boolean excluded = mSystemGestures.currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_RIGHT || !excluded && mNavigationBarAlwaysShowOnSideGesture)) { requestTransientBars(mNavigationBar); } Loading @@ -619,10 +494,9 @@ public class DisplayPolicy { synchronized (mLock) { mDisplayContent.calculateSystemGestureExclusion( excludedRegion, null /* outUnrestricted */); final boolean excluded = mSystemGestures .currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_LEFT final boolean excluded = mSystemGestures.currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_LEFT || !excluded && mNavigationBarAlwaysShowOnSideGesture)) { requestTransientBars(mNavigationBar); } Loading Loading @@ -686,12 +560,118 @@ public class DisplayPolicy { mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS); } }); mDisplayContent.registerPointerEventListener(getSystemGestures()); if (mService.mSystemReady) { mSystemGestures.systemReady(); displayContent.registerPointerEventListener(mSystemGestures); mAppTransitionListener = new WindowManagerInternal.AppTransitionListener() { private Runnable mAppTransitionPending = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionPending(displayId); } }; private Runnable mAppTransitionCancelled = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionCancelled(displayId); } }; private Runnable mAppTransitionFinished = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionFinished(displayId); } }; @Override public void onAppTransitionPendingLocked() { mHandler.post(mAppTransitionPending); } @Override public int onAppTransitionStartingLocked(boolean keyguardGoingAway, long duration, long statusBarAnimationStartTime, long statusBarAnimationDuration) { mHandler.post(() -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionStarting(mContext.getDisplayId(), statusBarAnimationStartTime, statusBarAnimationDuration); } }); return 0; } @Override public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { mHandler.post(mAppTransitionCancelled); } @Override public void onAppTransitionFinishedLocked(IBinder token) { mHandler.post(mAppTransitionFinished); } }; displayContent.mAppTransition.registerListenerLocked(mAppTransitionListener); mImmersiveModeConfirmation = new ImmersiveModeConfirmation(mContext, looper, mService.mVrModeEnabled); // TODO: Make it can take screenshot on external display mScreenshotHelper = displayContent.isDefaultDisplay ? new ScreenshotHelper(mContext) : null; if (mDisplayContent.isDefaultDisplay) { mHasStatusBar = true; mHasNavigationBar = mContext.getResources().getBoolean(R.bool.config_showNavigationBar); // Allow a system property to override this. Used by the emulator. // See also hasNavigationBar(). String navBarOverride = SystemProperties.get("qemu.hw.mainkeys"); if ("1".equals(navBarOverride)) { mHasNavigationBar = false; } else if ("0".equals(navBarOverride)) { mHasNavigationBar = true; } } else { mHasStatusBar = false; mHasNavigationBar = mDisplayContent.supportsSystemDecorations(); } mRefreshRatePolicy = new RefreshRatePolicy(mService, mDisplayContent.getDisplayInfo(), mService.mHighRefreshRateDenylist); mGestureNavigationSettingsObserver = new GestureNavigationSettingsObserver(mHandler, mContext, () -> { synchronized (mLock) { onConfigurationChanged(); mSystemGestures.onConfigurationChanged(); mDisplayContent.updateSystemGestureExclusion(); } }); mHandler.post(mGestureNavigationSettingsObserver::register); } private void checkAltBarSwipeForTransientBars(@WindowManagerPolicy.AltBarPosition int pos) { if (mStatusBarAlt != null && mStatusBarAltPosition == pos) { requestTransientBars(mStatusBarAlt); } if (mNavigationBarAlt != null && mNavigationBarAltPosition == pos) { requestTransientBars(mNavigationBarAlt); } if (mClimateBarAlt != null && mClimateBarAltPosition == pos) { requestTransientBars(mClimateBarAlt); } if (mExtraNavBarAlt != null && mExtraNavBarAltPosition == pos) { requestTransientBars(mExtraNavBarAlt); } } void systemReady() { mSystemGestures.systemReady(); if (mService.mPointerLocationEnabled) { setPointerLocationEnabled(true); } return mSystemGestures; } private int getDisplayId() { Loading Loading @@ -1475,7 +1455,8 @@ public class DisplayPolicy { } void onDisplayInfoChanged(DisplayInfo info) { getSystemGestures().onDisplayInfoChanged(info); mSystemGestures.screenWidth = info.logicalWidth; mSystemGestures.screenHeight = info.logicalHeight; } private void layoutStatusBar(DisplayFrames displayFrames, Rect contentFrame) { Loading Loading @@ -1988,7 +1969,7 @@ public class DisplayPolicy { public void onOverlayChangedLw() { updateCurrentUserResources(); onConfigurationChanged(); getSystemGestures().onConfigurationChanged(); mSystemGestures.onConfigurationChanged(); } /** Loading Loading @@ -2059,10 +2040,10 @@ public class DisplayPolicy { } mNavBarOpacityMode = res.getInteger(R.integer.config_navBarOpacityMode); final GestureNavigationSettingsObserver observer = getGestureNavigationSettingsObserver(); mLeftGestureInset = observer.getLeftSensitivity(res); mRightGestureInset = observer.getRightSensitivity(res); mNavButtonForcedVisible = observer.areNavigationButtonForcedVisible(); mLeftGestureInset = mGestureNavigationSettingsObserver.getLeftSensitivity(res); mRightGestureInset = mGestureNavigationSettingsObserver.getRightSensitivity(res); mNavButtonForcedVisible = mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); mNavigationBarLetsThroughTaps = res.getBoolean(R.bool.config_navBarTapThrough); mNavigationBarAlwaysShowOnSideGesture = res.getBoolean(R.bool.config_navBarAlwaysShowOnSideEdgeGesture); Loading Loading @@ -3075,7 +3056,7 @@ public class DisplayPolicy { } void release() { mHandler.post(getGestureNavigationSettingsObserver()::unregister); mHandler.post(mGestureNavigationSettingsObserver::unregister); } @VisibleForTesting Loading services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java +0 −6 Original line number Diff line number Diff line Loading @@ -126,17 +126,11 @@ class SystemGesturesPointerEventListener implements PointerEventListener { Slog.w(TAG, "Cannot create GestureDetector, display removed:" + displayId); return; } onDisplayInfoChanged(info); mGestureDetector = new GestureDetector(mContext, new FlingGestureDetector(), mHandler) { }; }); } void onDisplayInfoChanged(DisplayInfo info) { screenWidth = info.logicalWidth; screenHeight = info.logicalHeight; } @Override public void onPointerEvent(MotionEvent event) { if (mGestureDetector != null && event.isTouchEvent()) { Loading services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java +0 −12 Original line number Diff line number Diff line Loading @@ -323,16 +323,4 @@ public class DisplayPolicyTests extends WindowTestsBase { assertFalse(navBarSource.getFrame().isEmpty()); assertTrue(imeSource.getFrame().contains(navBarSource.getFrame())); } @UseTestDisplay @Test public void testDisplayPolicyNotCrash() { final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy(); // Verify if modules initialized after DisplayContent ctr throws NPE. displayPolicy.onDisplayInfoChanged(mDisplayInfo); displayPolicy.onConfigurationChanged(); displayPolicy.onOverlayChangedLw(); displayPolicy.release(); } } services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +2 −1 Original line number Diff line number Diff line Loading @@ -546,8 +546,9 @@ class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy) { final DisplayContent dc = final DisplayContent display = new TestDisplayContent.Builder(mAtm, info).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/DisplayPolicy.java +135 −154 Original line number Diff line number Diff line Loading @@ -69,7 +69,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE; import static android.view.WindowManager.LayoutParams.TYPE_POINTER; import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL; Loading Loading @@ -243,7 +242,7 @@ public class DisplayPolicy { } } private SystemGesturesPointerEventListener mSystemGestures; private final SystemGesturesPointerEventListener mSystemGestures; private volatile int mLidState = LID_ABSENT; private volatile int mDockMode = Intent.EXTRA_DOCK_STATE_UNDOCKED; Loading Loading @@ -385,7 +384,7 @@ public class DisplayPolicy { private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; private GestureNavigationSettingsObserver mGestureNavigationSettingsObserver; private final GestureNavigationSettingsObserver mGestureNavigationSettingsObserver; private final WindowManagerInternal.AppTransitionListener mAppTransitionListener; Loading Loading @@ -449,130 +448,7 @@ public class DisplayPolicy { final Looper looper = UiThread.getHandler().getLooper(); mHandler = new PolicyHandler(looper); mAppTransitionListener = new WindowManagerInternal.AppTransitionListener() { private Runnable mAppTransitionPending = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionPending(displayId); } }; private Runnable mAppTransitionCancelled = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionCancelled(displayId); } }; private Runnable mAppTransitionFinished = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionFinished(displayId); } }; @Override public void onAppTransitionPendingLocked() { mHandler.post(mAppTransitionPending); } @Override public int onAppTransitionStartingLocked(boolean keyguardGoingAway, long duration, long statusBarAnimationStartTime, long statusBarAnimationDuration) { mHandler.post(() -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionStarting(mContext.getDisplayId(), statusBarAnimationStartTime, statusBarAnimationDuration); } }); return 0; } @Override public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { mHandler.post(mAppTransitionCancelled); } @Override public void onAppTransitionFinishedLocked(IBinder token) { mHandler.post(mAppTransitionFinished); } }; displayContent.mAppTransition.registerListenerLocked(mAppTransitionListener); mImmersiveModeConfirmation = new ImmersiveModeConfirmation(mContext, looper, mService.mVrModeEnabled); // TODO(b/180986447): Make it can take screenshot on external display mScreenshotHelper = displayContent.isDefaultDisplay ? new ScreenshotHelper(mContext) : null; if (mDisplayContent.isDefaultDisplay) { mHasStatusBar = true; mHasNavigationBar = mContext.getResources().getBoolean(R.bool.config_showNavigationBar); // Allow a system property to override this. Used by the emulator. // See also hasNavigationBar(). String navBarOverride = SystemProperties.get("qemu.hw.mainkeys"); if ("1".equals(navBarOverride)) { mHasNavigationBar = false; } else if ("0".equals(navBarOverride)) { mHasNavigationBar = true; } } else { mHasStatusBar = false; mHasNavigationBar = mDisplayContent.supportsSystemDecorations(); } mRefreshRatePolicy = new RefreshRatePolicy(mService, mDisplayContent.getDisplayInfo(), mService.mHighRefreshRateDenylist); } private void checkAltBarSwipeForTransientBars(@WindowManagerPolicy.AltBarPosition int pos) { if (mStatusBarAlt != null && mStatusBarAltPosition == pos) { requestTransientBars(mStatusBarAlt); } if (mNavigationBarAlt != null && mNavigationBarAltPosition == pos) { requestTransientBars(mNavigationBarAlt); } if (mClimateBarAlt != null && mClimateBarAltPosition == pos) { requestTransientBars(mClimateBarAlt); } if (mExtraNavBarAlt != null && mExtraNavBarAltPosition == pos) { requestTransientBars(mExtraNavBarAlt); } } void systemReady() { if (mService.mPointerLocationEnabled) { setPointerLocationEnabled(true); } } @NonNull private GestureNavigationSettingsObserver getGestureNavigationSettingsObserver() { if (mGestureNavigationSettingsObserver == null) { mGestureNavigationSettingsObserver = new GestureNavigationSettingsObserver(mHandler, mContext, () -> { synchronized (mLock) { onConfigurationChanged(); getSystemGestures().onConfigurationChanged(); mDisplayContent.updateSystemGestureExclusion(); } }); mHandler.post(mGestureNavigationSettingsObserver::register); } return mGestureNavigationSettingsObserver; } @NonNull private SystemGesturesPointerEventListener getSystemGestures() { if (mSystemGestures == null) { final Context gestureContext = mUiContext.createWindowContext( mDisplayContent.getDisplay(), TYPE_POINTER, null /* options */); mSystemGestures = new SystemGesturesPointerEventListener(gestureContext, mHandler, mSystemGestures = new SystemGesturesPointerEventListener(mContext, mHandler, new SystemGesturesPointerEventListener.Callbacks() { @Override public void onSwipeFromTop() { Loading Loading @@ -601,10 +477,9 @@ public class DisplayPolicy { synchronized (mLock) { mDisplayContent.calculateSystemGestureExclusion( excludedRegion, null /* outUnrestricted */); final boolean excluded = mSystemGestures .currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_RIGHT final boolean excluded = mSystemGestures.currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_RIGHT || !excluded && mNavigationBarAlwaysShowOnSideGesture)) { requestTransientBars(mNavigationBar); } Loading @@ -619,10 +494,9 @@ public class DisplayPolicy { synchronized (mLock) { mDisplayContent.calculateSystemGestureExclusion( excludedRegion, null /* outUnrestricted */); final boolean excluded = mSystemGestures .currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_LEFT final boolean excluded = mSystemGestures.currentGestureStartedInRegion(excludedRegion); if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_LEFT || !excluded && mNavigationBarAlwaysShowOnSideGesture)) { requestTransientBars(mNavigationBar); } Loading Loading @@ -686,12 +560,118 @@ public class DisplayPolicy { mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS); } }); mDisplayContent.registerPointerEventListener(getSystemGestures()); if (mService.mSystemReady) { mSystemGestures.systemReady(); displayContent.registerPointerEventListener(mSystemGestures); mAppTransitionListener = new WindowManagerInternal.AppTransitionListener() { private Runnable mAppTransitionPending = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionPending(displayId); } }; private Runnable mAppTransitionCancelled = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionCancelled(displayId); } }; private Runnable mAppTransitionFinished = () -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionFinished(displayId); } }; @Override public void onAppTransitionPendingLocked() { mHandler.post(mAppTransitionPending); } @Override public int onAppTransitionStartingLocked(boolean keyguardGoingAway, long duration, long statusBarAnimationStartTime, long statusBarAnimationDuration) { mHandler.post(() -> { StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); if (statusBar != null) { statusBar.appTransitionStarting(mContext.getDisplayId(), statusBarAnimationStartTime, statusBarAnimationDuration); } }); return 0; } @Override public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { mHandler.post(mAppTransitionCancelled); } @Override public void onAppTransitionFinishedLocked(IBinder token) { mHandler.post(mAppTransitionFinished); } }; displayContent.mAppTransition.registerListenerLocked(mAppTransitionListener); mImmersiveModeConfirmation = new ImmersiveModeConfirmation(mContext, looper, mService.mVrModeEnabled); // TODO: Make it can take screenshot on external display mScreenshotHelper = displayContent.isDefaultDisplay ? new ScreenshotHelper(mContext) : null; if (mDisplayContent.isDefaultDisplay) { mHasStatusBar = true; mHasNavigationBar = mContext.getResources().getBoolean(R.bool.config_showNavigationBar); // Allow a system property to override this. Used by the emulator. // See also hasNavigationBar(). String navBarOverride = SystemProperties.get("qemu.hw.mainkeys"); if ("1".equals(navBarOverride)) { mHasNavigationBar = false; } else if ("0".equals(navBarOverride)) { mHasNavigationBar = true; } } else { mHasStatusBar = false; mHasNavigationBar = mDisplayContent.supportsSystemDecorations(); } mRefreshRatePolicy = new RefreshRatePolicy(mService, mDisplayContent.getDisplayInfo(), mService.mHighRefreshRateDenylist); mGestureNavigationSettingsObserver = new GestureNavigationSettingsObserver(mHandler, mContext, () -> { synchronized (mLock) { onConfigurationChanged(); mSystemGestures.onConfigurationChanged(); mDisplayContent.updateSystemGestureExclusion(); } }); mHandler.post(mGestureNavigationSettingsObserver::register); } private void checkAltBarSwipeForTransientBars(@WindowManagerPolicy.AltBarPosition int pos) { if (mStatusBarAlt != null && mStatusBarAltPosition == pos) { requestTransientBars(mStatusBarAlt); } if (mNavigationBarAlt != null && mNavigationBarAltPosition == pos) { requestTransientBars(mNavigationBarAlt); } if (mClimateBarAlt != null && mClimateBarAltPosition == pos) { requestTransientBars(mClimateBarAlt); } if (mExtraNavBarAlt != null && mExtraNavBarAltPosition == pos) { requestTransientBars(mExtraNavBarAlt); } } void systemReady() { mSystemGestures.systemReady(); if (mService.mPointerLocationEnabled) { setPointerLocationEnabled(true); } return mSystemGestures; } private int getDisplayId() { Loading Loading @@ -1475,7 +1455,8 @@ public class DisplayPolicy { } void onDisplayInfoChanged(DisplayInfo info) { getSystemGestures().onDisplayInfoChanged(info); mSystemGestures.screenWidth = info.logicalWidth; mSystemGestures.screenHeight = info.logicalHeight; } private void layoutStatusBar(DisplayFrames displayFrames, Rect contentFrame) { Loading Loading @@ -1988,7 +1969,7 @@ public class DisplayPolicy { public void onOverlayChangedLw() { updateCurrentUserResources(); onConfigurationChanged(); getSystemGestures().onConfigurationChanged(); mSystemGestures.onConfigurationChanged(); } /** Loading Loading @@ -2059,10 +2040,10 @@ public class DisplayPolicy { } mNavBarOpacityMode = res.getInteger(R.integer.config_navBarOpacityMode); final GestureNavigationSettingsObserver observer = getGestureNavigationSettingsObserver(); mLeftGestureInset = observer.getLeftSensitivity(res); mRightGestureInset = observer.getRightSensitivity(res); mNavButtonForcedVisible = observer.areNavigationButtonForcedVisible(); mLeftGestureInset = mGestureNavigationSettingsObserver.getLeftSensitivity(res); mRightGestureInset = mGestureNavigationSettingsObserver.getRightSensitivity(res); mNavButtonForcedVisible = mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); mNavigationBarLetsThroughTaps = res.getBoolean(R.bool.config_navBarTapThrough); mNavigationBarAlwaysShowOnSideGesture = res.getBoolean(R.bool.config_navBarAlwaysShowOnSideEdgeGesture); Loading Loading @@ -3075,7 +3056,7 @@ public class DisplayPolicy { } void release() { mHandler.post(getGestureNavigationSettingsObserver()::unregister); mHandler.post(mGestureNavigationSettingsObserver::unregister); } @VisibleForTesting Loading
services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java +0 −6 Original line number Diff line number Diff line Loading @@ -126,17 +126,11 @@ class SystemGesturesPointerEventListener implements PointerEventListener { Slog.w(TAG, "Cannot create GestureDetector, display removed:" + displayId); return; } onDisplayInfoChanged(info); mGestureDetector = new GestureDetector(mContext, new FlingGestureDetector(), mHandler) { }; }); } void onDisplayInfoChanged(DisplayInfo info) { screenWidth = info.logicalWidth; screenHeight = info.logicalHeight; } @Override public void onPointerEvent(MotionEvent event) { if (mGestureDetector != null && event.isTouchEvent()) { Loading
services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java +0 −12 Original line number Diff line number Diff line Loading @@ -323,16 +323,4 @@ public class DisplayPolicyTests extends WindowTestsBase { assertFalse(navBarSource.getFrame().isEmpty()); assertTrue(imeSource.getFrame().contains(navBarSource.getFrame())); } @UseTestDisplay @Test public void testDisplayPolicyNotCrash() { final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy(); // Verify if modules initialized after DisplayContent ctr throws NPE. displayPolicy.onDisplayInfoChanged(mDisplayInfo); displayPolicy.onConfigurationChanged(); displayPolicy.onOverlayChangedLw(); displayPolicy.release(); } }
services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +2 −1 Original line number Diff line number Diff line Loading @@ -546,8 +546,9 @@ class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy) { final DisplayContent dc = final DisplayContent display = new TestDisplayContent.Builder(mAtm, info).build(); final DisplayContent dc = display.mDisplayContent; // this display can show IME. dc.mWmService.mDisplayWindowSettings.setDisplayImePolicy(dc, imePolicy); return dc; Loading