diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayPolicy.java | 3 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java | 28 |
2 files changed, 14 insertions, 17 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 7aeebbc2c585..2b34660d307f 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -1940,7 +1940,8 @@ public class DisplayPolicy { final @InsetsType int restorePositionTypes = (Type.statusBars() | Type.navigationBars()) & controlTarget.getRequestedVisibleTypes(); - if (swipeTarget == mNavigationBar + final InsetsSourceProvider sp = swipeTarget.getControllableInsetProvider(); + if (sp != null && sp.getSource().getType() == Type.navigationBars() && (restorePositionTypes & Type.navigationBars()) != 0) { // Don't show status bar when swiping on already visible navigation bar. // But restore the position of navigation bar if it has been moved by the control diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java index 6bb77694b8cb..c694707743f6 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java @@ -26,6 +26,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.WindowInsets.Type.navigationBars; import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS; +import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE; import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; @@ -46,13 +47,7 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.graphics.PixelFormat; @@ -367,23 +362,24 @@ public class DisplayPolicyTests extends WindowTestsBase { assertEquals(attrs.height - 10, navBarSource.getFrame().height()); } + @SetupWindows(addWindows = { W_ACTIVITY, W_NAVIGATION_BAR }) @Test public void testCanSystemBarsBeShownByUser() { ((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true; + mAppWindow.mAttrs.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE; + mAppWindow.setRequestedVisibleTypes(0, navigationBars()); final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy(); - final WindowState windowState = mock(WindowState.class); - final InsetsSourceProvider provider = mock(InsetsSourceProvider.class); - final InsetsControlTarget controlTarget = mock(InsetsControlTarget.class); - when(provider.getControlTarget()).thenReturn(controlTarget); - when(windowState.getControllableInsetProvider()).thenReturn(provider); - when(controlTarget.isRequestedVisible(anyInt())).thenReturn(true); + displayPolicy.addWindowLw(mNavBarWindow, mNavBarWindow.mAttrs); + final InsetsSourceProvider navBarProvider = mNavBarWindow.getControllableInsetProvider(); + navBarProvider.updateControlForTarget(mAppWindow, false); + navBarProvider.getSource().setVisible(false); displayPolicy.setCanSystemBarsBeShownByUser(false); - displayPolicy.requestTransientBars(windowState, true); - verify(controlTarget, never()).showInsets(anyInt(), anyBoolean(), any() /* statsToken */); + displayPolicy.requestTransientBars(mNavBarWindow, true); + assertFalse(mDisplayContent.getInsetsPolicy().isTransient(navigationBars())); displayPolicy.setCanSystemBarsBeShownByUser(true); - displayPolicy.requestTransientBars(windowState, true); - verify(controlTarget).showInsets(anyInt(), anyBoolean(), any() /* statsToken */); + displayPolicy.requestTransientBars(mNavBarWindow, true); + assertTrue(mDisplayContent.getInsetsPolicy().isTransient(navigationBars())); } } |