Merge "Create input consumer only when nav bar is hidden by client" into rvc-dev

This commit is contained in:
Tiger Huang
2020-04-07 17:12:06 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 4 deletions

View File

@@ -1494,9 +1494,7 @@ public class DisplayPolicy {
final int behavior = mLastBehavior; final int behavior = mLastBehavior;
boolean navVisible = ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL boolean navVisible = ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL
? (sysui & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0 ? (sysui & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0
: mNavigationBar != null && mNavigationBar.getControllableInsetProvider() != null : isNavigationBarRequestedVisible();
&& mNavigationBar.getControllableInsetProvider().isClientVisible()
&& !mDisplayContent.getInsetsPolicy().isTransient(ITYPE_NAVIGATION_BAR);
boolean navTranslucent = (sysui boolean navTranslucent = (sysui
& (View.NAVIGATION_BAR_TRANSLUCENT | View.NAVIGATION_BAR_TRANSPARENT)) != 0; & (View.NAVIGATION_BAR_TRANSLUCENT | View.NAVIGATION_BAR_TRANSPARENT)) != 0;
boolean immersive = (sysui & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0 boolean immersive = (sysui & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0
@@ -1533,6 +1531,14 @@ public class DisplayPolicy {
mLastNotificationShadeForcesShowingNavigation = notificationShadeForcesShowingNavigation; mLastNotificationShadeForcesShowingNavigation = notificationShadeForcesShowingNavigation;
} }
boolean isNavigationBarRequestedVisible() {
final InsetsSourceProvider provider =
mDisplayContent.getInsetsStateController().peekSourceProvider(ITYPE_NAVIGATION_BAR);
return provider == null
? InsetsState.getDefaultVisibility(ITYPE_NAVIGATION_BAR)
: provider.isClientVisible();
}
void updateHideNavInputEventReceiver(boolean navVisible, boolean navAllowedHidden) { void updateHideNavInputEventReceiver(boolean navVisible, boolean navAllowedHidden) {
// When the navigation bar isn't visible, we put up a fake input window to catch all // When the navigation bar isn't visible, we put up a fake input window to catch all
// touch events. This way we can detect when the user presses anywhere to bring back the // touch events. This way we can detect when the user presses anywhere to bring back the

View File

@@ -99,7 +99,7 @@ class InsetsPolicy {
} }
private void updateHideNavInputEventReceiver() { private void updateHideNavInputEventReceiver() {
mPolicy.updateHideNavInputEventReceiver(!isHidden(ITYPE_NAVIGATION_BAR), mPolicy.updateHideNavInputEventReceiver(mPolicy.isNavigationBarRequestedVisible(),
mFocusedWin != null mFocusedWin != null
&& mFocusedWin.mAttrs.insetsFlags.behavior != BEHAVIOR_SHOW_BARS_BY_TOUCH); && mFocusedWin.mAttrs.insetsFlags.behavior != BEHAVIOR_SHOW_BARS_BY_TOUCH);
} }