diff options
| author | 2023-03-17 16:24:56 +0000 | |
|---|---|---|
| committer | 2023-03-17 16:24:56 +0000 | |
| commit | 3def7dfccfa8899c534d1737fc13320c75af8cf5 (patch) | |
| tree | ea30dc1cb43b946d52486fbacc83895465c5d021 | |
| parent | 8ab6e160d97fb5c8dc51933fe048a0b85bb0ff77 (diff) | |
| parent | 99f800b1caea80af1417e3c01db34bec2c502b4e (diff) | |
Merge "VisD update for the PipAppIconOverlay 2/N" into tm-qpr-dev
7 files changed, 61 insertions, 28 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/IPip.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/IPip.aidl index d961d8658b98..78de5f3e7a1f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/IPip.aidl +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/IPip.aidl @@ -75,4 +75,9 @@ interface IPip { * Sets the height and visibility of the Launcher keep clear area. */ oneway void setLauncherKeepClearAreaHeight(boolean visible, int height) = 6; + + /** + * Sets the app icon size in pixel used by Launcher + */ + oneway void setLauncherAppIconSize(int iconSizePx) = 7; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java index fe8ede67c415..1187126f5bf1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java @@ -371,10 +371,11 @@ public class PipAnimationController { new PipContentOverlay.PipSnapshotOverlay(snapshot, sourceRectHint)); } - void setAppIconContentOverlay(Context context, Rect bounds, ActivityInfo activityInfo) { + void setAppIconContentOverlay(Context context, Rect bounds, ActivityInfo activityInfo, + int appIconSizePx) { reattachContentOverlay( new PipContentOverlay.PipAppIconOverlay(context, bounds, - () -> new IconProvider(context).getIcon(activityInfo))); + new IconProvider(context).getIcon(activityInfo), appIconSizePx)); } private void reattachContentOverlay(PipContentOverlay overlay) { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java index 8883ce2ddbe5..92cf8cbf643e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java @@ -86,6 +86,7 @@ public class PipBoundsState { private int mStashedState = STASH_TYPE_NONE; private int mStashOffset; private @Nullable PipReentryState mPipReentryState; + private final LauncherState mLauncherState = new LauncherState(); private final @Nullable PipSizeSpecHandler mPipSizeSpecHandler; private @Nullable ComponentName mLastPipComponentName; private int mDisplayId = Display.DEFAULT_DISPLAY; @@ -497,6 +498,10 @@ public class PipBoundsState { mOnPipExclusionBoundsChangeCallbacks.remove(onPipExclusionBoundsChangeCallback); } + public LauncherState getLauncherState() { + return mLauncherState; + } + /** Source of truth for the current bounds of PIP that may be in motion. */ public static class MotionBoundsState { /** The bounds used when PIP is in motion (e.g. during a drag or animation) */ @@ -549,6 +554,25 @@ public class PipBoundsState { } } + /** Data class for Launcher state. */ + public static final class LauncherState { + private int mAppIconSizePx; + + public void setAppIconSizePx(int appIconSizePx) { + mAppIconSizePx = appIconSizePx; + } + + public int getAppIconSizePx() { + return mAppIconSizePx; + } + + void dump(PrintWriter pw, String prefix) { + final String innerPrefix = prefix + " "; + pw.println(prefix + LauncherState.class.getSimpleName()); + pw.println(innerPrefix + "getAppIconSizePx=" + getAppIconSizePx()); + } + } + static final class PipReentryState { private static final String TAG = PipReentryState.class.getSimpleName(); @@ -603,6 +627,7 @@ public class PipBoundsState { } else { mPipReentryState.dump(pw, innerPrefix); } + mLauncherState.dump(pw, innerPrefix); mMotionBoundsState.dump(pw, innerPrefix); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipContentOverlay.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipContentOverlay.java index d228dfbb7705..9fa57cacb11f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipContentOverlay.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipContentOverlay.java @@ -32,8 +32,6 @@ import android.view.SurfaceControl; import android.view.SurfaceSession; import android.window.TaskSnapshot; -import java.util.function.Supplier; - /** * Represents the content overlay used during the entering PiP animation. */ @@ -176,9 +174,8 @@ public abstract class PipContentOverlay { /** A {@link PipContentOverlay} shows app icon on solid color background. */ public static final class PipAppIconOverlay extends PipContentOverlay { private static final String TAG = PipAppIconOverlay.class.getSimpleName(); - // Align with the practical / reasonable launcher:iconImageSize as in - // vendor/unbundled_google/packages/NexusLauncher/res/xml/device_profiles.xml - private static final int APP_ICON_SIZE_DP = 66; + // The maximum size for app icon in pixel. + private static final int MAX_APP_ICON_SIZE_DP = 72; private final Context mContext; private final int mAppIconSizePx; @@ -188,14 +185,16 @@ public abstract class PipContentOverlay { private Bitmap mBitmap; - public PipAppIconOverlay(Context context, Rect appBounds, Supplier<Drawable> iconSupplier) { + public PipAppIconOverlay(Context context, Rect appBounds, + Drawable appIcon, int appIconSizePx) { mContext = context; - mAppIconSizePx = (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, APP_ICON_SIZE_DP, - context.getResources().getDisplayMetrics()); + final int maxAppIconSizePx = (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, + MAX_APP_ICON_SIZE_DP, context.getResources().getDisplayMetrics()); + mAppIconSizePx = Math.min(maxAppIconSizePx, appIconSizePx); mAppBounds = new Rect(appBounds); mBitmap = Bitmap.createBitmap(appBounds.width(), appBounds.height(), Bitmap.Config.ARGB_8888); - prepareAppIconOverlay(iconSupplier); + prepareAppIconOverlay(appIcon); mLeash = new SurfaceControl.Builder(new SurfaceSession()) .setCallsite(TAG) .setName(LAYER_NAME) @@ -238,7 +237,7 @@ public abstract class PipContentOverlay { } } - private void prepareAppIconOverlay(Supplier<Drawable> iconSupplier) { + private void prepareAppIconOverlay(Drawable appIcon) { final Canvas canvas = new Canvas(); canvas.setBitmap(mBitmap); final TypedArray ta = mContext.obtainStyledAttributes(new int[] { @@ -252,7 +251,6 @@ public abstract class PipContentOverlay { } finally { ta.recycle(); } - final Drawable appIcon = iconSupplier.get(); final Rect appIconBounds = new Rect( mAppBounds.centerX() - mAppIconSizePx / 2, mAppBounds.centerY() - mAppIconSizePx / 2, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index eb336d56b62c..6831a47c3f1a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -1610,7 +1610,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, if (SystemProperties.getBoolean( "persist.wm.debug.enable_pip_app_icon_overlay", true)) { animator.setAppIconContentOverlay( - mContext, currentBounds, mTaskInfo.topActivityInfo); + mContext, currentBounds, mTaskInfo.topActivityInfo, + mPipBoundsState.getLauncherState().getAppIconSizePx()); } else { animator.setColorContentOverlay(mContext); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java index e01b406eb4c1..8e7b30eb60d0 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java @@ -813,7 +813,8 @@ public class PipTransition extends PipTransitionController { "persist.wm.debug.enable_pip_app_icon_overlay", true) && hasTopActivityInfo) { animator.setAppIconContentOverlay( - mContext, currentBounds, taskInfo.topActivityInfo); + mContext, currentBounds, taskInfo.topActivityInfo, + mPipBoundsState.getLauncherState().getAppIconSizePx()); } else { animator.setColorContentOverlay(mContext); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index 0864af624192..11e2a92b89e8 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -937,6 +937,10 @@ public class PipController implements PipTransitionController.PipTransitionCallb } } + private void setLauncherAppIconSize(int iconSizePx) { + mPipBoundsState.getLauncherState().setAppIconSizePx(iconSizePx); + } + private void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) { mOnIsInPipStateChangedListener = callback; if (mOnIsInPipStateChangedListener != null) { @@ -1285,26 +1289,26 @@ public class PipController implements PipTransitionController.PipTransitionCallb public void stopSwipePipToHome(int taskId, ComponentName componentName, Rect destinationBounds, SurfaceControl overlay) { executeRemoteCallWithTaskPermission(mController, "stopSwipePipToHome", - (controller) -> { - controller.stopSwipePipToHome(taskId, componentName, destinationBounds, - overlay); - }); + (controller) -> controller.stopSwipePipToHome( + taskId, componentName, destinationBounds, overlay)); } @Override public void setShelfHeight(boolean visible, int height) { executeRemoteCallWithTaskPermission(mController, "setShelfHeight", - (controller) -> { - controller.setShelfHeight(visible, height); - }); + (controller) -> controller.setShelfHeight(visible, height)); } @Override public void setLauncherKeepClearAreaHeight(boolean visible, int height) { executeRemoteCallWithTaskPermission(mController, "setLauncherKeepClearAreaHeight", - (controller) -> { - controller.setLauncherKeepClearAreaHeight(visible, height); - }); + (controller) -> controller.setLauncherKeepClearAreaHeight(visible, height)); + } + + @Override + public void setLauncherAppIconSize(int iconSizePx) { + executeRemoteCallWithTaskPermission(mController, "setLauncherAppIconSize", + (controller) -> controller.setLauncherAppIconSize(iconSizePx)); } @Override @@ -1322,9 +1326,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb @Override public void setPipAnimationTypeToAlpha() { executeRemoteCallWithTaskPermission(mController, "setPipAnimationTypeToAlpha", - (controller) -> { - controller.setPinnedStackAnimationType(ANIM_TYPE_ALPHA); - }); + (controller) -> controller.setPinnedStackAnimationType(ANIM_TYPE_ALPHA)); } } } |