Merge "Don't show status bar while swiping on visible taskbar" into udc-dev
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user