Merge "Fixed QS tiles incorrectly clipping in landscape shade" into udc-dev

This commit is contained in:
Shawn Lee
2023-04-28 00:13:47 +00:00
committed by Android (Google) Code Review
4 changed files with 39 additions and 10 deletions

View File

@@ -131,7 +131,8 @@ public interface QS extends FragmentBase {
/**
* A rounded corner clipping that makes QS feel as if it were behind everything.
*/
void setFancyClipping(int top, int bottom, int cornerRadius, boolean visible);
void setFancyClipping(int leftInset, int top, int rightInset, int bottom, int cornerRadius,
boolean visible, boolean fullWidth);
/**
* @return if quick settings is fully collapsed currently

View File

@@ -38,7 +38,9 @@ import java.io.PrintWriter;
*/
public class QSContainerImpl extends FrameLayout implements Dumpable {
private int mFancyClippingLeftInset;
private int mFancyClippingTop;
private int mFancyClippingRightInset;
private int mFancyClippingBottom;
private final float[] mFancyClippingRadii = new float[] {0, 0, 0, 0, 0, 0, 0, 0};
private final Path mFancyClippingPath = new Path();
@@ -53,6 +55,7 @@ public class QSContainerImpl extends FrameLayout implements Dumpable {
private boolean mQsDisabled;
private int mContentHorizontalPadding = -1;
private boolean mClippingEnabled;
private boolean mIsFullWidth;
public QSContainerImpl(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -237,7 +240,8 @@ public class QSContainerImpl extends FrameLayout implements Dumpable {
/**
* Clip QS bottom using a concave shape.
*/
public void setFancyClipping(int top, int bottom, int radius, boolean enabled) {
public void setFancyClipping(int leftInset, int top, int rightInset, int bottom, int radius,
boolean enabled, boolean fullWidth) {
boolean updatePath = false;
if (mFancyClippingRadii[0] != radius) {
mFancyClippingRadii[0] = radius;
@@ -246,10 +250,18 @@ public class QSContainerImpl extends FrameLayout implements Dumpable {
mFancyClippingRadii[3] = radius;
updatePath = true;
}
if (mFancyClippingLeftInset != leftInset) {
mFancyClippingLeftInset = leftInset;
updatePath = true;
}
if (mFancyClippingTop != top) {
mFancyClippingTop = top;
updatePath = true;
}
if (mFancyClippingRightInset != rightInset) {
mFancyClippingRightInset = rightInset;
updatePath = true;
}
if (mFancyClippingBottom != bottom) {
mFancyClippingBottom = bottom;
updatePath = true;
@@ -258,6 +270,10 @@ public class QSContainerImpl extends FrameLayout implements Dumpable {
mClippingEnabled = enabled;
updatePath = true;
}
if (mIsFullWidth != fullWidth) {
mIsFullWidth = fullWidth;
updatePath = true;
}
if (updatePath) {
updateClippingPath();
@@ -281,15 +297,21 @@ public class QSContainerImpl extends FrameLayout implements Dumpable {
return;
}
mFancyClippingPath.addRoundRect(0, mFancyClippingTop, getWidth(),
int clippingLeft = mIsFullWidth ? -mFancyClippingLeftInset : 0;
int clippingRight = mIsFullWidth ? getWidth() + mFancyClippingRightInset : getWidth();
mFancyClippingPath.addRoundRect(clippingLeft, mFancyClippingTop, clippingRight,
mFancyClippingBottom, mFancyClippingRadii, Path.Direction.CW);
invalidate();
}
@Override
public void dump(PrintWriter pw, String[] args) {
pw.println(getClass().getSimpleName() + " updateClippingPath: top("
+ mFancyClippingTop + ") bottom(" + mFancyClippingBottom + ") mClippingEnabled("
+ mClippingEnabled + ")");
pw.println(getClass().getSimpleName() + " updateClippingPath: "
+ "leftInset(" + mFancyClippingLeftInset + ") "
+ "top(" + mFancyClippingTop + ") "
+ "rightInset(" + mFancyClippingRightInset + ") "
+ "bottom(" + mFancyClippingBottom + ") "
+ "mClippingEnabled(" + mClippingEnabled + ") "
+ "mIsFullWidth(" + mIsFullWidth + ")");
}
}

View File

@@ -18,9 +18,10 @@ import static android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS;
import static com.android.systemui.media.dagger.MediaModule.QS_PANEL;
import static com.android.systemui.media.dagger.MediaModule.QUICK_QS_PANEL;
import static com.android.systemui.statusbar.disableflags.DisableFlagsLogger.DisableState;
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
import static com.android.systemui.statusbar.disableflags.DisableFlagsLogger.DisableState;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.res.Configuration;
@@ -395,9 +396,11 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
}
@Override
public void setFancyClipping(int top, int bottom, int cornerRadius, boolean visible) {
public void setFancyClipping(int leftInset, int top, int rightInset, int bottom,
int cornerRadius, boolean visible, boolean fullWidth) {
if (getView() instanceof QSContainerImpl) {
((QSContainerImpl) getView()).setFancyClipping(top, bottom, cornerRadius, visible);
((QSContainerImpl) getView()).setFancyClipping(leftInset, top, rightInset, bottom,
cornerRadius, visible, fullWidth);
}
}

View File

@@ -1230,10 +1230,13 @@ public class QuickSettingsController {
mVisible = qsVisible;
mQs.setQsVisible(qsVisible);
mQs.setFancyClipping(
mDisplayLeftInset,
clipTop,
mDisplayRightInset,
clipBottom,
radius,
qsVisible && !mSplitShadeEnabled);
qsVisible && !mSplitShadeEnabled,
mIsFullWidth);
}