summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/DisplayPolicy.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java28
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()));
}
}