Merge "Track PictureInPictureParams in PipTaskOrganizer" into rvc-dev

This commit is contained in:
Hongwei Wang
2020-05-01 19:02:48 +00:00
committed by Android (Google) Code Review

View File

@@ -190,6 +190,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
private @PipAnimationController.AnimationType int mOneShotAnimationType = ANIM_TYPE_BOUNDS;
private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
mSurfaceControlTransactionFactory;
private PictureInPictureParams mPictureInPictureParams;
public PipTaskOrganizer(Context context, @NonNull PipBoundsHandler boundsHandler,
@NonNull PipSurfaceTransactionHelper surfaceTransactionHelper,
@@ -257,8 +258,9 @@ public class PipTaskOrganizer extends TaskOrganizer {
@Override
public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) {
Objects.requireNonNull(info, "Requires RunningTaskInfo");
mPictureInPictureParams = info.pictureInPictureParams;
final Rect destinationBounds = mPipBoundsHandler.getDestinationBounds(
info.topActivity, getAspectRatioOrDefault(info.pictureInPictureParams),
info.topActivity, getAspectRatioOrDefault(mPictureInPictureParams),
null /* bounds */, getMinimalSize(info.topActivityInfo));
Objects.requireNonNull(destinationBounds, "Missing destination bounds");
mTaskInfo = info;
@@ -304,6 +306,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
Log.wtf(TAG, "Unrecognized token: " + token);
return;
}
mPictureInPictureParams = null;
mInPip = false;
}
@@ -311,7 +314,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
Objects.requireNonNull(mToken, "onTaskInfoChanged requires valid existing mToken");
final PictureInPictureParams newParams = info.pictureInPictureParams;
if (!shouldUpdateDestinationBounds(newParams)) {
if (!applyPictureInPictureParams(newParams)) {
Log.d(TAG, "Ignored onTaskInfoChanged with PiP param: " + newParams);
return;
}
@@ -359,7 +362,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
}
final Rect newDestinationBounds = mPipBoundsHandler.getDestinationBounds(
mTaskInfo.topActivity, getAspectRatioOrDefault(mTaskInfo.pictureInPictureParams),
mTaskInfo.topActivity, getAspectRatioOrDefault(mPictureInPictureParams),
null /* bounds */, getMinimalSize(mTaskInfo.topActivityInfo));
if (newDestinationBounds.equals(currentDestinationBounds)) return;
if (animator.getAnimationType() == ANIM_TYPE_BOUNDS) {
@@ -373,12 +376,14 @@ public class PipTaskOrganizer extends TaskOrganizer {
* @return {@code true} if the aspect ratio is changed since no other parameters within
* {@link PictureInPictureParams} would affect the bounds.
*/
private boolean shouldUpdateDestinationBounds(PictureInPictureParams params) {
if (params == null || mTaskInfo.pictureInPictureParams == null) {
return params != mTaskInfo.pictureInPictureParams;
private boolean applyPictureInPictureParams(@NonNull PictureInPictureParams params) {
final boolean changed = (mPictureInPictureParams == null) ? true : !Objects.equals(
mPictureInPictureParams.getAspectRatioRational(), params.getAspectRatioRational());
if (changed) {
mPictureInPictureParams = params;
mPipBoundsHandler.onAspectRatioChanged(params.getAspectRatio());
}
return !Objects.equals(mTaskInfo.pictureInPictureParams.getAspectRatioRational(),
params.getAspectRatioRational());
return changed;
}
/**