Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd6e9816 authored by Hongwei Wang's avatar Hongwei Wang
Browse files

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
parent 5dbfd93d
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -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>

+8 −0
Original line number Diff line number Diff line
@@ -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);
}
+6 −17
Original line number Diff line number Diff line
@@ -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);
        }
        return this;
    }

+18 −4
Original line number Diff line number Diff line
@@ -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,
+2 −3
Original line number Diff line number Diff line
@@ -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);
Loading