Don't force IME drawing system bar backgrounds
If IME doesn't have FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, DecorView won't
show the color views for providing background color of system bars.
DecorView will call Window#onDrawLegacyNavigationBarBackgroundChanged
when the flag is changed. This gives NavigationBarController a chance
to decide whether to draw the legacy navigation bar background for the
IME or not.
Bug: 201375975
Test: Show IME in combinations of
a. floating mode or non-floating mode
b. gesture navigation or 3-button navigation
c. taskbar or navigation bar
d. light theme or dark theme
And see if there is anything unexpected
Change-Id: If7ac32e2b874c04a260d542cb6a7595288aae182
This commit is contained in:
@@ -42,6 +42,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
||||
|
||||
import static com.android.internal.policy.PhoneWindow.FEATURE_OPTIONS_PANEL;
|
||||
|
||||
@@ -309,6 +310,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
R.integer.dock_enter_exit_duration);
|
||||
mForceWindowDrawsBarBackgrounds = context.getResources().getBoolean(
|
||||
R.bool.config_forceWindowDrawsStatusBarBackground)
|
||||
&& params.type != TYPE_INPUT_METHOD
|
||||
&& context.getApplicationInfo().targetSdkVersion >= N;
|
||||
mSemiTransparentBarColor = context.getResources().getColor(
|
||||
R.color.system_bar_background_semi_transparent, null /* theme */);
|
||||
@@ -1164,8 +1166,8 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
0 /* sideInset */, animate && !disallowAnimate,
|
||||
mForceWindowDrawsBarBackgrounds, controller);
|
||||
boolean oldDrawLegacy = mDrawLegacyNavigationBarBackground;
|
||||
mDrawLegacyNavigationBarBackground = mNavigationColorViewState.visible
|
||||
&& (mWindow.getAttributes().flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0;
|
||||
mDrawLegacyNavigationBarBackground =
|
||||
(mWindow.getAttributes().flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0;
|
||||
if (oldDrawLegacy != mDrawLegacyNavigationBarBackground) {
|
||||
mDrawLegacyNavigationBarBackgroundHandled =
|
||||
mWindow.onDrawLegacyNavigationBarBackgroundChanged(
|
||||
@@ -1206,7 +1208,8 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
boolean hideNavigation = (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0
|
||||
|| !(controller == null || controller.isRequestedVisible(ITYPE_NAVIGATION_BAR));
|
||||
boolean decorFitsSystemWindows = mWindow.mDecorFitsSystemWindows;
|
||||
boolean forceConsumingNavBar = (mForceWindowDrawsBarBackgrounds
|
||||
boolean forceConsumingNavBar =
|
||||
((mForceWindowDrawsBarBackgrounds || mDrawLegacyNavigationBarBackgroundHandled)
|
||||
&& (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0
|
||||
&& (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0
|
||||
&& decorFitsSystemWindows
|
||||
|
||||
Reference in New Issue
Block a user