Merge "Don't show status bar while swiping on visible taskbar" into udc-dev

This commit is contained in:
Tiger Huang
2023-02-21 08:39:24 +00:00
committed by Android (Google) Code Review
2 changed files with 14 additions and 17 deletions

View File

@@ -1940,7 +1940,8 @@ public class DisplayPolicy {
final @InsetsType int restorePositionTypes = (Type.statusBars() | Type.navigationBars()) final @InsetsType int restorePositionTypes = (Type.statusBars() | Type.navigationBars())
& controlTarget.getRequestedVisibleTypes(); & controlTarget.getRequestedVisibleTypes();
if (swipeTarget == mNavigationBar final InsetsSourceProvider sp = swipeTarget.getControllableInsetProvider();
if (sp != null && sp.getSource().getType() == Type.navigationBars()
&& (restorePositionTypes & Type.navigationBars()) != 0) { && (restorePositionTypes & Type.navigationBars()) != 0) {
// Don't show status bar when swiping on already visible navigation bar. // 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 // But restore the position of navigation bar if it has been moved by the control

View File

@@ -26,6 +26,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.WindowInsets.Type.navigationBars; import static android.view.WindowInsets.Type.navigationBars;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS; 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_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; 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.assertNotNull;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; 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.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
@@ -367,23 +362,24 @@ public class DisplayPolicyTests extends WindowTestsBase {
assertEquals(attrs.height - 10, navBarSource.getFrame().height()); assertEquals(attrs.height - 10, navBarSource.getFrame().height());
} }
@SetupWindows(addWindows = { W_ACTIVITY, W_NAVIGATION_BAR })
@Test @Test
public void testCanSystemBarsBeShownByUser() { public void testCanSystemBarsBeShownByUser() {
((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true; ((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 DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
final WindowState windowState = mock(WindowState.class); displayPolicy.addWindowLw(mNavBarWindow, mNavBarWindow.mAttrs);
final InsetsSourceProvider provider = mock(InsetsSourceProvider.class); final InsetsSourceProvider navBarProvider = mNavBarWindow.getControllableInsetProvider();
final InsetsControlTarget controlTarget = mock(InsetsControlTarget.class); navBarProvider.updateControlForTarget(mAppWindow, false);
when(provider.getControlTarget()).thenReturn(controlTarget); navBarProvider.getSource().setVisible(false);
when(windowState.getControllableInsetProvider()).thenReturn(provider);
when(controlTarget.isRequestedVisible(anyInt())).thenReturn(true);
displayPolicy.setCanSystemBarsBeShownByUser(false); displayPolicy.setCanSystemBarsBeShownByUser(false);
displayPolicy.requestTransientBars(windowState, true); displayPolicy.requestTransientBars(mNavBarWindow, true);
verify(controlTarget, never()).showInsets(anyInt(), anyBoolean(), any() /* statsToken */); assertFalse(mDisplayContent.getInsetsPolicy().isTransient(navigationBars()));
displayPolicy.setCanSystemBarsBeShownByUser(true); displayPolicy.setCanSystemBarsBeShownByUser(true);
displayPolicy.requestTransientBars(windowState, true); displayPolicy.requestTransientBars(mNavBarWindow, true);
verify(controlTarget).showInsets(anyInt(), anyBoolean(), any() /* statsToken */); assertTrue(mDisplayContent.getInsetsPolicy().isTransient(navigationBars()));
} }
} }