Unify round corner radius in PipSurfaceTransactionHelper(s)
Per discussion, will keep the two classes in Launcher and WMShell as for now and re-address the unification in next release. In this change - deprecate config_pipEnableRoundCorner since it's now behind a system property and waiting to be turned on - pass the corner radius value from WMShell to Launcher Video: http://recall/-/aaaaaabFQoRHlzixHdtY/dmUy8qBEMxHShFcFKB3cT3 Bug: 171721389 Test: make sure autoEnterPip has round corner support, see video Change-Id: If978ee6c3b0307a7423fe51b996f535d7009e74c
This commit is contained in:
@@ -33,9 +33,6 @@
|
||||
<!-- Allow PIP to resize via dragging the corner of PiP. -->
|
||||
<bool name="config_pipEnableDragCornerResize">false</bool>
|
||||
|
||||
<!-- Allow PIP to enable round corner, see also R.dimen.pip_corner_radius -->
|
||||
<bool name="config_pipEnableRoundCorner">false</bool>
|
||||
|
||||
<!-- Animation duration when using long press on recents to dock -->
|
||||
<integer name="long_press_dock_anim_duration">250</integer>
|
||||
|
||||
|
||||
@@ -24,4 +24,12 @@ oneway interface IPipAnimationListener {
|
||||
* Notifies the listener that the Pip animation is started.
|
||||
*/
|
||||
void onPipAnimationStarted();
|
||||
|
||||
/**
|
||||
* Notifies the listener about PiP round corner radius changes.
|
||||
* Listener can expect an immediate callback the first time they attach.
|
||||
*
|
||||
* @param cornerRadius the pixel value of the corner radius, zero means it's disabled.
|
||||
*/
|
||||
void onPipCornerRadiusChanged(int cornerRadius);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.android.wm.shell.pip;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
@@ -30,10 +29,6 @@ import com.android.wm.shell.R;
|
||||
* Abstracts the common operations on {@link SurfaceControl.Transaction} for PiP transition.
|
||||
*/
|
||||
public class PipSurfaceTransactionHelper {
|
||||
|
||||
private final boolean mEnableCornerRadius;
|
||||
private int mCornerRadius;
|
||||
|
||||
/** for {@link #scale(SurfaceControl.Transaction, SurfaceControl, Rect, Rect)} operation */
|
||||
private final Matrix mTmpTransform = new Matrix();
|
||||
private final float[] mTmpFloat9 = new float[9];
|
||||
@@ -41,11 +36,7 @@ public class PipSurfaceTransactionHelper {
|
||||
private final RectF mTmpDestinationRectF = new RectF();
|
||||
private final Rect mTmpDestinationRect = new Rect();
|
||||
|
||||
public PipSurfaceTransactionHelper(Context context) {
|
||||
final Resources res = context.getResources();
|
||||
mEnableCornerRadius = res.getBoolean(R.bool.config_pipEnableRoundCorner)
|
||||
|| SystemProperties.getBoolean("debug.sf.enable_hole_punch_pip", false);
|
||||
}
|
||||
private int mCornerRadius;
|
||||
|
||||
/**
|
||||
* Called when display size or font size of settings changed
|
||||
@@ -53,10 +44,10 @@ public class PipSurfaceTransactionHelper {
|
||||
* @param context the current context
|
||||
*/
|
||||
public void onDensityOrFontScaleChanged(Context context) {
|
||||
if (mEnableCornerRadius) {
|
||||
final Resources res = context.getResources();
|
||||
mCornerRadius = res.getDimensionPixelSize(R.dimen.pip_corner_radius);
|
||||
}
|
||||
final boolean enableCornerRadius =
|
||||
SystemProperties.getBoolean("debug.sf.enable_hole_punch_pip", false);
|
||||
mCornerRadius = enableCornerRadius
|
||||
? context.getResources().getDimensionPixelSize(R.dimen.pip_corner_radius) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -194,9 +185,7 @@ public class PipSurfaceTransactionHelper {
|
||||
*/
|
||||
public PipSurfaceTransactionHelper round(SurfaceControl.Transaction tx, SurfaceControl leash,
|
||||
boolean applyCornerRadius) {
|
||||
if (mEnableCornerRadius) {
|
||||
tx.setCornerRadius(leash, applyCornerRadius ? mCornerRadius : 0);
|
||||
}
|
||||
tx.setCornerRadius(leash, applyCornerRadius ? mCornerRadius : 0);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ import android.content.res.Configuration;
|
||||
import android.graphics.Rect;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.util.Log;
|
||||
@@ -50,6 +51,7 @@ import androidx.annotation.BinderThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.wm.shell.R;
|
||||
import com.android.wm.shell.WindowManagerShellWrapper;
|
||||
import com.android.wm.shell.common.DisplayChangeController;
|
||||
import com.android.wm.shell.common.DisplayController;
|
||||
@@ -428,6 +430,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
|
||||
|
||||
private void onDensityOrFontScaleChanged() {
|
||||
mPipTaskOrganizer.onDensityOrFontScaleChanged(mContext);
|
||||
onPipCornerRadiusChanged();
|
||||
}
|
||||
|
||||
private void onOverlayChanged() {
|
||||
@@ -487,10 +490,6 @@ public class PipController implements PipTransitionController.PipTransitionCallb
|
||||
mTouchHandler.getMotionHelper().expandLeavePip(false /* skipAnimation */);
|
||||
}
|
||||
|
||||
private PipTouchHandler getPipTouchHandler() {
|
||||
return mTouchHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the PIP menu.
|
||||
*/
|
||||
@@ -530,6 +529,21 @@ public class PipController implements PipTransitionController.PipTransitionCallb
|
||||
|
||||
private void setPinnedStackAnimationListener(IPipAnimationListener callback) {
|
||||
mPinnedStackAnimationRecentsCallback = callback;
|
||||
onPipCornerRadiusChanged();
|
||||
}
|
||||
|
||||
private void onPipCornerRadiusChanged() {
|
||||
if (mPinnedStackAnimationRecentsCallback != null) {
|
||||
final boolean enableCornerRadius =
|
||||
SystemProperties.getBoolean("debug.sf.enable_hole_punch_pip", false);
|
||||
final int cornerRadius = enableCornerRadius
|
||||
? mContext.getResources().getDimensionPixelSize(R.dimen.pip_corner_radius) : 0;
|
||||
try {
|
||||
mPinnedStackAnimationRecentsCallback.onPipCornerRadiusChanged(cornerRadius);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to call onPipCornerRadiusChanged", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo,
|
||||
|
||||
@@ -131,9 +131,8 @@ public class PipMenuView extends FrameLayout {
|
||||
mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
|
||||
inflate(context, R.layout.pip_menu, this);
|
||||
|
||||
final boolean enableCornerRadius = mContext.getResources()
|
||||
.getBoolean(R.bool.config_pipEnableRoundCorner)
|
||||
|| SystemProperties.getBoolean("debug.sf.enable_hole_punch_pip", false);
|
||||
final boolean enableCornerRadius =
|
||||
SystemProperties.getBoolean("debug.sf.enable_hole_punch_pip", false);
|
||||
mBackgroundDrawable = enableCornerRadius
|
||||
? mContext.getDrawable(R.drawable.pip_menu_background)
|
||||
: new ColorDrawable(Color.BLACK);
|
||||
|
||||
@@ -68,7 +68,7 @@ public class PipAnimationControllerTest extends ShellTestCase {
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mPipAnimationController = new PipAnimationController(
|
||||
new PipSurfaceTransactionHelper(mContext));
|
||||
new PipSurfaceTransactionHelper());
|
||||
mLeash = new SurfaceControl.Builder()
|
||||
.setContainerLayer()
|
||||
.setName("FakeLeash")
|
||||
|
||||
@@ -32,15 +32,17 @@ import android.window.PictureInPictureSurfaceTransaction;
|
||||
* source of truth on enabling/disabling and the actual value of corner radius.
|
||||
*/
|
||||
public class PipSurfaceTransactionHelper {
|
||||
/** corner radius is currently disabled. */
|
||||
private final float mCornerRadius = 0f;
|
||||
|
||||
private final int mCornerRadius;
|
||||
private final Matrix mTmpTransform = new Matrix();
|
||||
private final float[] mTmpFloat9 = new float[9];
|
||||
private final RectF mTmpSourceRectF = new RectF();
|
||||
private final RectF mTmpDestinationRectF = new RectF();
|
||||
private final Rect mTmpDestinationRect = new Rect();
|
||||
|
||||
public PipSurfaceTransactionHelper(int cornerRadius) {
|
||||
mCornerRadius = cornerRadius;
|
||||
}
|
||||
|
||||
public PictureInPictureSurfaceTransaction scale(
|
||||
SurfaceControl.Transaction tx, SurfaceControl leash,
|
||||
Rect sourceBounds, Rect destinationBounds) {
|
||||
|
||||
@@ -280,8 +280,8 @@ public abstract class WMShellBaseModule {
|
||||
|
||||
@WMSingleton
|
||||
@Provides
|
||||
static PipSurfaceTransactionHelper providePipSurfaceTransactionHelper(Context context) {
|
||||
return new PipSurfaceTransactionHelper(context);
|
||||
static PipSurfaceTransactionHelper providePipSurfaceTransactionHelper() {
|
||||
return new PipSurfaceTransactionHelper();
|
||||
}
|
||||
|
||||
@WMSingleton
|
||||
|
||||
Reference in New Issue
Block a user