diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 92d9ca9e94d83..b0c5239bb4b82 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -588,4 +588,7 @@
false
+
+
+ true
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
index 49e86f55bb9ea..5126284475300 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
@@ -62,16 +62,10 @@ interface ISystemUiProxy {
*/
Rect getNonMinimizedSplitScreenSecondaryBounds() = 7;
- /**
- * Control the {@param alpha} of the back button in the navigation bar and {@param animate} if
- * needed from current value
- * @deprecated
- */
- void setBackButtonAlpha(float alpha, boolean animate) = 8;
-
/**
* Control the {@param alpha} of the option nav bar button (back-button in 2 button mode
- * and home bar in no-button mode) and {@param animate} if needed from current value
+ * and home handle & background in gestural mode). The {@param animate} is currently only
+ * supported for 2 button mode.
*/
void setNavBarButtonAlpha(float alpha, boolean animate) = 19;
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index 553623702aedb..b4716598cc0ca 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -211,6 +211,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
private Locale mLocale;
private int mLayoutDirection;
+ private boolean mAllowForceNavBarHandleOpaque;
private boolean mForceNavBarHandleOpaque;
private boolean mIsCurrentUserSetup;
@@ -333,13 +334,23 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
// If the current user is not yet setup, then don't update any button alphas
return;
}
+ if (QuickStepContract.isLegacyMode(mNavBarMode)) {
+ // Don't allow the bar buttons to be affected by the alpha
+ return;
+ }
+
ButtonDispatcher buttonDispatcher = null;
boolean forceVisible = false;
- if (QuickStepContract.isSwipeUpMode(mNavBarMode)) {
- buttonDispatcher = mNavigationBarView.getBackButton();
- } else if (QuickStepContract.isGesturalMode(mNavBarMode)) {
- forceVisible = mForceNavBarHandleOpaque;
+ if (QuickStepContract.isGesturalMode(mNavBarMode)) {
+ // Disallow home handle animations when in gestural
+ animate = false;
+ forceVisible = mAllowForceNavBarHandleOpaque && mForceNavBarHandleOpaque;
buttonDispatcher = mNavigationBarView.getHomeHandle();
+ if (getBarTransitions() != null) {
+ getBarTransitions().setBackgroundOverrideAlpha(alpha);
+ }
+ } else if (QuickStepContract.isSwipeUpMode(mNavBarMode)) {
+ buttonDispatcher = mNavigationBarView.getBackButton();
}
if (buttonDispatcher != null) {
buttonDispatcher.setVisibility(
@@ -506,6 +517,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
// Respect the latest disabled-flags.
mCommandQueue.recomputeDisableFlags(mDisplayId, false);
+ mAllowForceNavBarHandleOpaque = mContext.getResources().getBoolean(
+ R.bool.allow_force_nav_bar_handle_opaque);
mForceNavBarHandleOpaque = DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_SYSTEMUI,
NAV_BAR_HANDLE_FORCE_OPAQUE,
@@ -1468,6 +1481,12 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
@Override
public void onNavigationModeChanged(int mode) {
mNavBarMode = mode;
+ if (!QuickStepContract.isGesturalMode(mode)) {
+ // Reset the override alpha
+ if (getBarTransitions() != null) {
+ getBarTransitions().setBackgroundOverrideAlpha(1f);
+ }
+ }
updateScreenPinningGestures();
if (!canShowSecondaryHandle()) {
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java
index 61e1d61e7909d..fbc7c92a4a64d 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java
@@ -36,6 +36,7 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.BarTransitions;
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@@ -135,6 +136,10 @@ public final class NavigationBarTransitions extends BarTransitions implements
mBarBackground.setFrame(frame);
}
+ void setBackgroundOverrideAlpha(float alpha) {
+ mBarBackground.setOverrideAlpha(alpha);
+ }
+
@Override
protected boolean isLightsOut(int mode) {
return super.isLightsOut(mode) || (mAllowAutoDimWallpaperNotVisible && mAutoDim
@@ -230,4 +235,17 @@ public final class NavigationBarTransitions extends BarTransitions implements
public void removeDarkIntensityListener(DarkIntensityListener listener) {
mDarkIntensityListeners.remove(listener);
}
+
+ public void dump(PrintWriter pw) {
+ pw.println("NavigationBarTransitions:");
+ pw.println(" mMode: " + getMode());
+ pw.println(" mAlwaysOpaque: " + isAlwaysOpaque());
+ pw.println(" mAllowAutoDimWallpaperNotVisible: " + mAllowAutoDimWallpaperNotVisible);
+ pw.println(" mWallpaperVisible: " + mWallpaperVisible);
+ pw.println(" mLightsOut: " + mLightsOut);
+ pw.println(" mAutoDim: " + mAutoDim);
+ pw.println(" bg overrideAlpha: " + mBarBackground.getOverrideAlpha());
+ pw.println(" bg color: " + mBarBackground.getColor());
+ pw.println(" bg frame: " + mBarBackground.getFrame());
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
index 35d5ca949f853..a2ed57fbb634e 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
@@ -1158,6 +1158,8 @@ public class NavigationBarView extends FrameLayout implements
int frameHeight = getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_frame_height);
mBarTransitions.setBackgroundFrame(new Rect(0, frameHeight - height, w, h));
+ } else {
+ mBarTransitions.setBackgroundFrame(null);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -1331,6 +1333,7 @@ public class NavigationBarView extends FrameLayout implements
if (mNavigationInflaterView != null) {
mNavigationInflaterView.dump(pw);
}
+ mBarTransitions.dump(pw);
mContextualButtonGroup.dump(pw);
mRecentsOnboarding.dump(pw);
mRegionSamplingHelper.dump(pw);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index a87bfd83916aa..8951605846a10 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -293,11 +293,6 @@ public class OverviewProxyService extends CurrentUserTracker implements
}
}
- @Override
- public void setBackButtonAlpha(float alpha, boolean animate) {
- setNavBarButtonAlpha(alpha, animate);
- }
-
@Override
public void onAssistantProgress(@FloatRange(from = 0.0, to = 1.0) float progress) {
if (!verifyCaller("onAssistantProgress")) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index e6731e6b8a342..c60bbc5f547fa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -166,6 +166,7 @@ public class BarTransitions {
private int mGradientAlpha;
private int mColor;
+ private float mOverrideAlpha = 1f;
private PorterDuffColorFilter mTintFilter;
private Paint mPaint = new Paint();
@@ -195,6 +196,23 @@ public class BarTransitions {
mFrame = frame;
}
+ public void setOverrideAlpha(float overrideAlpha) {
+ mOverrideAlpha = overrideAlpha;
+ invalidateSelf();
+ }
+
+ public float getOverrideAlpha() {
+ return mOverrideAlpha;
+ }
+
+ public int getColor() {
+ return mColor;
+ }
+
+ public Rect getFrame() {
+ return mFrame;
+ }
+
@Override
public void setAlpha(int alpha) {
// noop
@@ -296,11 +314,13 @@ public class BarTransitions {
mGradient.setAlpha(mGradientAlpha);
mGradient.draw(canvas);
}
+
if (Color.alpha(mColor) > 0) {
mPaint.setColor(mColor);
if (mTintFilter != null) {
mPaint.setColorFilter(mTintFilter);
}
+ mPaint.setAlpha((int) (Color.alpha(mColor) * mOverrideAlpha));
if (mFrame != null) {
canvas.drawRect(mFrame, mPaint);
} else {