Merge "Reland "Use non-cached value when calculation button forced visible state"" into udc-dev

This commit is contained in:
Yunfan Chen
2023-03-23 12:31:42 +00:00
committed by Android (Google) Code Review
4 changed files with 33 additions and 35 deletions

View File

@@ -293,7 +293,7 @@ public class InsetsFrameProvider implements Parcelable {
public static void calculateInsetsFrame(Rect displayFrame, Rect containerBounds, public static void calculateInsetsFrame(Rect displayFrame, Rect containerBounds,
Rect displayCutoutSafe, Rect inOutFrame, int source, Insets insetsSize, Rect displayCutoutSafe, Rect inOutFrame, int source, Insets insetsSize,
@WindowManager.LayoutParams.PrivateFlags int privateFlags, @WindowManager.LayoutParams.PrivateFlags int privateFlags,
Insets displayCutoutSafeInsetsSize) { Insets displayCutoutSafeInsetsSize, Rect givenContentInsets) {
boolean extendByCutout = false; boolean extendByCutout = false;
if (source == InsetsFrameProvider.SOURCE_DISPLAY) { if (source == InsetsFrameProvider.SOURCE_DISPLAY) {
inOutFrame.set(displayFrame); inOutFrame.set(displayFrame);
@@ -301,16 +301,20 @@ public class InsetsFrameProvider implements Parcelable {
inOutFrame.set(containerBounds); inOutFrame.set(containerBounds);
} else { } else {
extendByCutout = (privateFlags & PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT) != 0; extendByCutout = (privateFlags & PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT) != 0;
if (givenContentInsets != null) {
inOutFrame.inset(givenContentInsets);
} }
if (insetsSize == null) {
return;
} }
if (displayCutoutSafeInsetsSize != null) { if (displayCutoutSafeInsetsSize != null) {
sTmpRect2.set(inOutFrame); sTmpRect2.set(inOutFrame);
} }
if (insetsSize != null) {
calculateInsetsFrame(inOutFrame, insetsSize); calculateInsetsFrame(inOutFrame, insetsSize);
}
if (extendByCutout) { if (extendByCutout && insetsSize != null) {
// Only extend if the insets size is not null. Otherwise, the frame has already been
// extended by the display cutout during layout process.
WindowLayout.extendFrameByCutout(displayCutoutSafe, displayFrame, inOutFrame, sTmpRect); WindowLayout.extendFrameByCutout(displayCutoutSafe, displayFrame, inOutFrame, sTmpRect);
} }

View File

@@ -159,6 +159,8 @@ import com.android.systemui.util.ViewController;
import com.android.wm.shell.back.BackAnimation; import com.android.wm.shell.back.BackAnimation;
import com.android.wm.shell.pip.Pip; import com.android.wm.shell.pip.Pip;
import dagger.Lazy;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
@@ -167,8 +169,6 @@ import java.util.concurrent.Executor;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.Lazy;
/** /**
* Contains logic for a navigation bar view. * Contains logic for a navigation bar view.
*/ */
@@ -245,12 +245,6 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
private boolean mTransientShown; private boolean mTransientShown;
private boolean mTransientShownFromGestureOnSystemBar; private boolean mTransientShownFromGestureOnSystemBar;
/**
* This is to indicate whether the navigation bar button is forced visible. This is true
* when the setup wizard is on display. When that happens, the window frame should be provided
* as insets size directly.
*/
private boolean mIsButtonForceVisible;
private int mNavBarMode = NAV_BAR_MODE_3BUTTON; private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
private LightBarController mLightBarController; private LightBarController mLightBarController;
private final LightBarController mMainLightBarController; private final LightBarController mMainLightBarController;
@@ -679,8 +673,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
mView.setTouchHandler(mTouchHandler); mView.setTouchHandler(mTouchHandler);
setNavBarMode(mNavBarMode); setNavBarMode(mNavBarMode);
mEdgeBackGestureHandler.setStateChangeCallback(mView::updateStates); mEdgeBackGestureHandler.setStateChangeCallback(mView::updateStates);
mEdgeBackGestureHandler.setButtonForceVisibleChangeCallback((forceVisible) -> { mEdgeBackGestureHandler.setButtonForcedVisibleChangeCallback((forceVisible) -> {
mIsButtonForceVisible = forceVisible;
repositionNavigationBar(mCurrentRotation); repositionNavigationBar(mCurrentRotation);
}); });
mNavigationBarTransitions.addListener(this::onBarTransition); mNavigationBarTransitions.addListener(this::onBarTransition);
@@ -1721,7 +1714,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
.setInsetsSizeOverrides(new InsetsFrameProvider.InsetsSizeOverride[] { .setInsetsSizeOverrides(new InsetsFrameProvider.InsetsSizeOverride[] {
new InsetsFrameProvider.InsetsSizeOverride( new InsetsFrameProvider.InsetsSizeOverride(
TYPE_INPUT_METHOD, null)}); TYPE_INPUT_METHOD, null)});
if (insetsHeight != -1 && !mIsButtonForceVisible) { if (insetsHeight != -1 && !mEdgeBackGestureHandler.isButtonForcedVisible()) {
navBarProvider.setInsetsSize(Insets.of(0, 0, 0, insetsHeight)); navBarProvider.setInsetsSize(Insets.of(0, 0, 0, insetsHeight));
} }

View File

@@ -177,7 +177,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
private final OverviewProxyService mOverviewProxyService; private final OverviewProxyService mOverviewProxyService;
private final SysUiState mSysUiState; private final SysUiState mSysUiState;
private Runnable mStateChangeCallback; private Runnable mStateChangeCallback;
private Consumer<Boolean> mButtonForceVisibleCallback; private Consumer<Boolean> mButtonForcedVisibleCallback;
private final PluginManager mPluginManager; private final PluginManager mPluginManager;
private final ProtoTracer mProtoTracer; private final ProtoTracer mProtoTracer;
@@ -245,7 +245,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
private boolean mGestureBlockingActivityRunning; private boolean mGestureBlockingActivityRunning;
private boolean mIsNewBackAffordanceEnabled; private boolean mIsNewBackAffordanceEnabled;
private boolean mIsTrackpadGestureFeaturesEnabled; private boolean mIsTrackpadGestureFeaturesEnabled;
private boolean mIsButtonForceVisible; private boolean mIsButtonForcedVisible;
private InputMonitor mInputMonitor; private InputMonitor mInputMonitor;
private InputChannelCompat.InputEventReceiver mInputEventReceiver; private InputChannelCompat.InputEventReceiver mInputEventReceiver;
@@ -412,8 +412,8 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
mStateChangeCallback = callback; mStateChangeCallback = callback;
} }
public void setButtonForceVisibleChangeCallback(Consumer<Boolean> callback) { public void setButtonForcedVisibleChangeCallback(Consumer<Boolean> callback) {
mButtonForceVisibleCallback = callback; mButtonForcedVisibleCallback = callback;
} }
public int getEdgeWidthLeft() { public int getEdgeWidthLeft() {
@@ -428,13 +428,14 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
Resources res = mNavigationModeController.getCurrentUserContext().getResources(); Resources res = mNavigationModeController.getCurrentUserContext().getResources();
mEdgeWidthLeft = mGestureNavigationSettingsObserver.getLeftSensitivity(res); mEdgeWidthLeft = mGestureNavigationSettingsObserver.getLeftSensitivity(res);
mEdgeWidthRight = mGestureNavigationSettingsObserver.getRightSensitivity(res); mEdgeWidthRight = mGestureNavigationSettingsObserver.getRightSensitivity(res);
final boolean previousForceVisible = mIsButtonForceVisible; final boolean previousForcedVisible = mIsButtonForcedVisible;
mIsButtonForceVisible = mIsButtonForcedVisible =
mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible();
if (previousForceVisible != mIsButtonForceVisible && mButtonForceVisibleCallback != null) { if (previousForcedVisible != mIsButtonForcedVisible
mButtonForceVisibleCallback.accept(mIsButtonForceVisible); && mButtonForcedVisibleCallback != null) {
mButtonForcedVisibleCallback.accept(mIsButtonForcedVisible);
} }
mIsBackGestureAllowed = !mIsButtonForceVisible; mIsBackGestureAllowed = !mIsButtonForcedVisible;
final DisplayMetrics dm = res.getDisplayMetrics(); final DisplayMetrics dm = res.getDisplayMetrics();
final float defaultGestureHeight = res.getDimension( final float defaultGestureHeight = res.getDimension(
@@ -635,6 +636,10 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
return mIsEnabled && mIsBackGestureAllowed; return mIsEnabled && mIsBackGestureAllowed;
} }
public boolean isButtonForcedVisible() {
return mIsButtonForcedVisible;
}
/** /**
* Update the PiP bounds, used for exclusion calculation. * Update the PiP bounds, used for exclusion calculation.
*/ */

View File

@@ -19,7 +19,6 @@ package com.android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.view.Display.TYPE_INTERNAL; import static android.view.Display.TYPE_INTERNAL;
import static android.view.InsetsFrameProvider.SOURCE_FRAME;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS; import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS; import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS; import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
@@ -1069,7 +1068,7 @@ public class DisplayPolicy {
// runtime as ensured in WMS. Make use of the index in the provider directly // runtime as ensured in WMS. Make use of the index in the provider directly
// to access the latest provided size at runtime. // to access the latest provided size at runtime.
final TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider = final TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider =
getFrameProvider(win, provider, i); getFrameProvider(win, i);
final InsetsFrameProvider.InsetsSizeOverride[] overrides = final InsetsFrameProvider.InsetsSizeOverride[] overrides =
provider.getInsetsSizeOverrides(); provider.getInsetsSizeOverrides();
final SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>> final SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>>
@@ -1095,19 +1094,15 @@ public class DisplayPolicy {
} }
} }
@Nullable
private TriConsumer<DisplayFrames, WindowContainer, Rect> getFrameProvider(WindowState win, private TriConsumer<DisplayFrames, WindowContainer, Rect> getFrameProvider(WindowState win,
InsetsFrameProvider provider, int index) { int index) {
if (provider.getInsetsSize() == null && provider.getSource() == SOURCE_FRAME) {
return null;
}
return (displayFrames, windowContainer, inOutFrame) -> { return (displayFrames, windowContainer, inOutFrame) -> {
final LayoutParams lp = win.mAttrs.forRotation(displayFrames.mRotation); final LayoutParams lp = win.mAttrs.forRotation(displayFrames.mRotation);
final InsetsFrameProvider ifp = lp.providedInsets[index]; final InsetsFrameProvider ifp = lp.providedInsets[index];
InsetsFrameProvider.calculateInsetsFrame(displayFrames.mUnrestricted, InsetsFrameProvider.calculateInsetsFrame(displayFrames.mUnrestricted,
windowContainer.getBounds(), displayFrames.mDisplayCutoutSafe, inOutFrame, windowContainer.getBounds(), displayFrames.mDisplayCutoutSafe, inOutFrame,
ifp.getSource(), ifp.getInsetsSize(), lp.privateFlags, ifp.getSource(), ifp.getInsetsSize(), lp.privateFlags,
ifp.getMinimalInsetsSizeInDisplayCutoutSafe()); ifp.getMinimalInsetsSizeInDisplayCutoutSafe(), win.mGivenContentInsets);
}; };
} }
@@ -1120,7 +1115,8 @@ public class DisplayPolicy {
InsetsFrameProvider.calculateInsetsFrame(displayFrames.mUnrestricted, InsetsFrameProvider.calculateInsetsFrame(displayFrames.mUnrestricted,
windowContainer.getBounds(), displayFrames.mDisplayCutoutSafe, inOutFrame, windowContainer.getBounds(), displayFrames.mDisplayCutoutSafe, inOutFrame,
ifp.getSource(), ifp.getInsetsSizeOverrides()[overrideIndex].getInsetsSize(), ifp.getSource(), ifp.getInsetsSizeOverrides()[overrideIndex].getInsetsSize(),
lp.privateFlags, null /* displayCutoutSafeInsetsSize */); lp.privateFlags, null /* displayCutoutSafeInsetsSize */,
null /* givenContentInsets */);
}; };
} }