From f20cc146cfa8f5036be5e752a3dbe3eb6681c2f8 Mon Sep 17 00:00:00 2001 From: John Andrew Camu Date: Sun, 11 Feb 2024 20:02:49 +0800 Subject: [PATCH] Add support PIP for One UI 5.1 core (#4028) --- prebuilts/libs/WindowManager-Shell-14.jar | Bin 2128057 -> 2117635 bytes .../android/quickstep/AbsSwipeUpHandler.java | 22 +++-- .../com/android/quickstep/SystemUiProxy.java | 12 ++- .../src/com/android/wm/shell/pip/IPip.aidl | 91 ++++++++++++++++++ .../wm/shell/pip/IPipAnimationListener.aidl | 41 ++++++++ .../src/com/android/wm/shell/pip/PipData.aidl | 19 ++++ .../src/com/android/wm/shell/pip/PipData.java | 70 ++++++++++++++ 7 files changed, 244 insertions(+), 11 deletions(-) create mode 100644 systemUIShared/src/com/android/wm/shell/pip/IPip.aidl create mode 100644 systemUIShared/src/com/android/wm/shell/pip/IPipAnimationListener.aidl create mode 100644 systemUIShared/src/com/android/wm/shell/pip/PipData.aidl create mode 100644 systemUIShared/src/com/android/wm/shell/pip/PipData.java diff --git a/prebuilts/libs/WindowManager-Shell-14.jar b/prebuilts/libs/WindowManager-Shell-14.jar index a1258b3f25bb56465215f036d9db5e93e0af4656..1ef4dacdfb43bc21ed94b0a3ce890b1564be7896 100644 GIT binary patch delta 7707 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 diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 0f8eed17ba..c13aaef402 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1561,9 +1561,10 @@ public abstract class AbsSwipeUpHandler, Q extends ? mRecentsAnimationTargets .findTask(mGestureState.getTopRunningTaskId()) : null; + var taskInfo = mGestureState.getRunningTask().mAllCachedTasks.get(0); final ArrayList cookies = Utilities.ATLEAST_S && runningTaskTarget != null - && runningTaskTarget.taskInfo != null - ? runningTaskTarget.taskInfo.launchCookies + && taskInfo != null + ? taskInfo.launchCookies : new ArrayList<>(); boolean isTranslucent = runningTaskTarget != null && runningTaskTarget.isTranslucent; boolean hasValidLeash = runningTaskTarget != null @@ -1573,8 +1574,8 @@ public abstract class AbsSwipeUpHandler, Q extends && hasValidLeash && Utilities.ATLEAST_T && runningTaskTarget.allowEnterPip - && runningTaskTarget.taskInfo.pictureInPictureParams != null - && runningTaskTarget.taskInfo.pictureInPictureParams.isAutoEnterEnabled(); + && taskInfo.pictureInPictureParams != null + && taskInfo.pictureInPictureParams.isAutoEnterEnabled(); HomeAnimationFactory homeAnimFactory = createHomeAnimationFactory(cookies, duration, isTranslucent, appCanEnterPip, runningTaskTarget); @@ -1597,6 +1598,8 @@ public abstract class AbsSwipeUpHandler, Q extends mRecentsAnimationController.screenshotTask(taskId)); }); + if (mSwipePipToHomeAnimator == null) return; + // let SystemUi reparent the overlay leash as soon as possible SystemUiProxy.INSTANCE.get(mContext).stopSwipePipToHome( mSwipePipToHomeAnimator.getTaskId(), @@ -1715,7 +1718,7 @@ public abstract class AbsSwipeUpHandler, Q extends private SwipePipToHomeAnimator createWindowAnimationToPip(HomeAnimationFactory homeAnimFactory, RemoteAnimationTarget runningTaskTarget, float startProgress) { // Directly animate the app to PiP (picture-in-picture) mode - final ActivityManager.RunningTaskInfo taskInfo = runningTaskTarget.taskInfo; + final ActivityManager.RunningTaskInfo taskInfo = mGestureState.getRunningTask().mAllCachedTasks.get(0); final RecentsOrientedState orientationState = mRemoteTargetHandles[0].getTaskViewSimulator() .getOrientationState(); final int windowRotation = calculateWindowRotation(runningTaskTarget, orientationState); @@ -1731,11 +1734,13 @@ public abstract class AbsSwipeUpHandler, Q extends windowToHomePositionMap.mapRect(startRect); final Rect hotseatKeepClearArea = getKeepClearAreaForHotseat(); + if (taskInfo == null) return null; final Rect destinationBounds = SystemUiProxy.INSTANCE.get(mContext) .startSwipePipToHome(taskInfo.topActivity, taskInfo.topActivityInfo, - runningTaskTarget.taskInfo.pictureInPictureParams, + taskInfo.pictureInPictureParams, homeRotation, + mDp.hotseatBarSizePx, hotseatKeepClearArea); if (destinationBounds == null) { // No destination bounds returned from SystemUI, bail early. @@ -1759,7 +1764,7 @@ public abstract class AbsSwipeUpHandler, Q extends .setAppIconSizePx(mDp.iconSizePx) .setLeash(runningTaskTarget.leash) .setSourceRectHint( - runningTaskTarget.taskInfo.pictureInPictureParams.getSourceRectHint()) + taskInfo.pictureInPictureParams.getSourceRectHint()) .setAppBounds(appBounds) .setHomeToWindowPositionMap(homeToWindowPositionMap) .setStartBounds(startRect) @@ -2214,7 +2219,8 @@ public abstract class AbsSwipeUpHandler, Q extends * This should happen before {@link #finishRecentsControllerToHome(Runnable)}. */ private void maybeFinishSwipePipToHome() { - if (mIsSwipingPipToHome && mSwipePipToHomeAnimators[0] != null) { + if (mIsSwipingPipToHome && mSwipePipToHomeAnimators[0] != null && mRecentsAnimationController != null) { + mRecentsAnimationController.setFinishTaskTransaction( mSwipePipToHomeAnimator.getTaskId(), mSwipePipToHomeAnimator.getFinishTransaction(), diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java index baa336beb3..88cd3caa64 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -83,6 +83,7 @@ import com.android.wm.shell.desktopmode.IDesktopMode; import com.android.wm.shell.desktopmode.IDesktopTaskListener; import com.android.wm.shell.draganddrop.IDragAndDrop; import com.android.wm.shell.onehanded.IOneHanded; +import com.android.wm.shell.pip.PipData; import com.android.wm.shell.pip.IPip; import com.android.wm.shell.pip.IPipAnimationListener; import com.android.wm.shell.recents.IRecentTasks; @@ -625,14 +626,19 @@ public class SystemUiProxy implements ISystemUiProxy { */ @Nullable public Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo, - PictureInPictureParams pictureInPictureParams, int launcherRotation, + PictureInPictureParams pictureInPictureParams, int launcherRotation, int hotseatBarSize, Rect hotseatKeepClearArea) { if (mPip != null) { try { return mPip.startSwipePipToHome(componentName, activityInfo, - pictureInPictureParams, launcherRotation, hotseatKeepClearArea); + pictureInPictureParams, launcherRotation, new PipData(hotseatBarSize)); } catch (Throwable e) { - Log.w(TAG, "Failed call startSwipePipToHome", e); + try { + return mPip.startSwipePipToHome(componentName, activityInfo, + pictureInPictureParams, launcherRotation, new PipData(hotseatKeepClearArea)); + } catch (Throwable t) { + Log.w(TAG, "Failed call startSwipePipToHome", e); + } } } return null; diff --git a/systemUIShared/src/com/android/wm/shell/pip/IPip.aidl b/systemUIShared/src/com/android/wm/shell/pip/IPip.aidl new file mode 100644 index 0000000000..dae6ed21eb --- /dev/null +++ b/systemUIShared/src/com/android/wm/shell/pip/IPip.aidl @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.wm.shell.pip; + +import android.app.PictureInPictureParams; +import android.view.SurfaceControl; +import android.content.ComponentName; +import android.content.pm.ActivityInfo; +import android.graphics.Rect; +import com.android.wm.shell.pip.IPipAnimationListener; +import com.android.wm.shell.pip.PipData; + +/** + * Interface that is exposed to remote callers to manipulate the Pip feature. + */ +interface IPip { + + /** + * Notifies that Activity is about to be swiped to home with entering PiP transition and + * queries the destination bounds for PiP depends on Launcher's rotation and shelf height. + * + * @param componentName ComponentName represents the Activity + * @param activityInfo ActivityInfo tied to the Activity + * @param pictureInPictureParams PictureInPictureParams tied to the Activity + * @param launcherRotation Launcher rotation to calculate the PiP destination bounds + * @param hotseatKeepClearArea Bounds of Hotseat to avoid used to calculate PiP destination + bounds + * @return destination bounds the PiP window should land into + */ + Rect startSwipePipToHome(in ComponentName componentName, in ActivityInfo activityInfo, + in PictureInPictureParams pictureInPictureParams, + int launcherRotation, in PipData hotseatKeepClearArea) = 1; + + /** + * Notifies the swiping Activity to PiP onto home transition is finished + * + * @param taskId the Task id that the Activity and overlay are currently in. + * @param componentName ComponentName represents the Activity + * @param destinationBounds the destination bounds the PiP window lands into + * @param overlay an optional overlay to fade out after entering PiP + */ + oneway void stopSwipePipToHome(int taskId, in ComponentName componentName, + in Rect destinationBounds, in SurfaceControl overlay) = 2; + + /** + * Notifies the swiping Activity to PiP onto home transition is aborted + * + * @param taskId the Task id that the Activity and overlay are currently in. + * @param componentName ComponentName represents the Activity + */ + oneway void abortSwipePipToHome(int taskId, in ComponentName componentName) = 3; + + /** + * Sets listener to get pinned stack animation callbacks. + */ + oneway void setPipAnimationListener(IPipAnimationListener listener) = 4; + + /** + * Sets the shelf height and visibility. + */ + oneway void setShelfHeight(boolean visible, int shelfHeight) = 5; + + /** + * Sets the next pip animation type to be the alpha animation. + */ + oneway void setPipAnimationTypeToAlpha() = 6; + + /** + * Sets the height and visibility of the Launcher keep clear area. + */ + oneway void setLauncherKeepClearAreaHeight(boolean visible, int height) = 7; + + /** + * Sets the app icon size in pixel used by Launcher + */ + oneway void setLauncherAppIconSize(int iconSizePx) = 8; +} diff --git a/systemUIShared/src/com/android/wm/shell/pip/IPipAnimationListener.aidl b/systemUIShared/src/com/android/wm/shell/pip/IPipAnimationListener.aidl new file mode 100644 index 0000000000..062e3ba263 --- /dev/null +++ b/systemUIShared/src/com/android/wm/shell/pip/IPipAnimationListener.aidl @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.wm.shell.pip; + +/** + * Listener interface that Launcher attaches to SystemUI to get Pip animation callbacks. + */ +oneway interface IPipAnimationListener { + /** + * Notifies the listener that the Pip animation is started. + */ + void onPipAnimationStarted(); + + /** + * Notifies the listener about PiP resource dimensions changed. + * 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. + * @param shadowRadius the pixel value of the shadow radius, zero means it's disabled. + */ + void onPipResourceDimensionsChanged(int cornerRadius, int shadowRadius); + + /** + * Notifies the listener that user leaves PiP by tapping on the expand button. + */ + void onExpandPip(); +} diff --git a/systemUIShared/src/com/android/wm/shell/pip/PipData.aidl b/systemUIShared/src/com/android/wm/shell/pip/PipData.aidl new file mode 100644 index 0000000000..82c8a94ef1 --- /dev/null +++ b/systemUIShared/src/com/android/wm/shell/pip/PipData.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2024 Lawnchair Launcher + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.wm.shell.pip; + +parcelable PipData; \ No newline at end of file diff --git a/systemUIShared/src/com/android/wm/shell/pip/PipData.java b/systemUIShared/src/com/android/wm/shell/pip/PipData.java new file mode 100644 index 0000000000..4487a9e429 --- /dev/null +++ b/systemUIShared/src/com/android/wm/shell/pip/PipData.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2024 Lawnchair Launcher + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.wm.shell.pip; + +import android.os.Parcel; +import android.os.Parcelable; +import android.graphics.Rect; + +public class PipData implements Parcelable { + private Rect rect; + private int intValue; + + public PipData(Rect rect) { + this.rect = rect; + } + + public PipData(int intValue) { + this.intValue = intValue; + } + + protected PipData(Parcel in) { + rect = in.readParcelable(Rect.class.getClassLoader()); + intValue = in.readInt(); + } + + public static final Creator CREATOR = new Creator<>() { + @Override + public PipData createFromParcel(Parcel in) { + return new PipData (in); + } + + @Override + public PipData[] newArray(int size) { + return new PipData[size]; + } + }; + + public Rect getRect() { + return rect; + } + + public int getIntValue() { + return intValue; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(rect, flags); + dest.writeInt(intValue); + } + + @Override + public int describeContents() { + return 0; + } +} \ No newline at end of file