Merge "VisD update for the PipAppIconOverlay 2/N" into tm-qpr-dev am: 3def7dfccf am: 342d5ef128
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22108002 Change-Id: If6bc4d17033004b75ceeb06b1ad4b0bdde9f5a9a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 final @NonNull MotionBoundsState mMotionBoundsState = new MotionBoundsState();
|
||||
@@ -482,6 +483,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) */
|
||||
@@ -534,6 +539,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();
|
||||
|
||||
@@ -587,6 +611,7 @@ public class PipBoundsState {
|
||||
} else {
|
||||
mPipReentryState.dump(pw, innerPrefix);
|
||||
}
|
||||
mLauncherState.dump(pw, innerPrefix);
|
||||
mMotionBoundsState.dump(pw, innerPrefix);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -1608,7 +1608,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);
|
||||
}
|
||||
|
||||
@@ -808,7 +808,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);
|
||||
}
|
||||
|
||||
@@ -942,6 +942,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) {
|
||||
@@ -1286,26 +1290,26 @@ public class PipController implements PipTransitionController.PipTransitionCallb
|
||||
overlay.setUnreleasedWarningCallSite("PipController.stopSwipePipToHome");
|
||||
}
|
||||
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
|
||||
@@ -1323,9 +1327,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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user