Merge "Add auto-enter-pip support in FallbackSwipeHandler" into tm-dev am: 1acabce45b
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/17300479 Change-Id: I865c39eac5d1afb46fed74d42af304eb32b320ce
This commit is contained in:
@@ -1273,8 +1273,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
HomeAnimationFactory homeAnimFactory =
|
||||
createHomeAnimationFactory(cookies, duration, isTranslucent, appCanEnterPip,
|
||||
runningTaskTarget);
|
||||
mIsSwipingPipToHome = !mIsSwipeForStagedSplit
|
||||
&& homeAnimFactory.supportSwipePipToHome() && appCanEnterPip;
|
||||
mIsSwipingPipToHome = !mIsSwipeForStagedSplit && appCanEnterPip;
|
||||
final RectFSpringAnim[] windowAnim;
|
||||
if (mIsSwipingPipToHome) {
|
||||
mSwipePipToHomeAnimator = createWindowAnimationToPip(
|
||||
|
||||
@@ -50,12 +50,14 @@ import android.view.SurfaceControl;
|
||||
import android.view.SurfaceControl.Transaction;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.PendingAnimation;
|
||||
import com.android.launcher3.anim.SpringAnimationBuilder;
|
||||
import com.android.launcher3.states.StateAnimationConfig;
|
||||
import com.android.launcher3.util.DisplayController;
|
||||
import com.android.quickstep.fallback.FallbackRecentsView;
|
||||
import com.android.quickstep.fallback.RecentsState;
|
||||
@@ -93,6 +95,8 @@ public class FallbackSwipeHandler extends
|
||||
private final Matrix mTmpMatrix = new Matrix();
|
||||
private float mMaxLauncherScale = 1;
|
||||
|
||||
private boolean mAppCanEnterPip;
|
||||
|
||||
public FallbackSwipeHandler(Context context, RecentsAnimationDeviceState deviceState,
|
||||
TaskAnimationManager taskAnimationManager, GestureState gestureState, long touchTimeMs,
|
||||
boolean continuingLastGesture, InputConsumerController inputConsumer) {
|
||||
@@ -135,16 +139,27 @@ public class FallbackSwipeHandler extends
|
||||
protected HomeAnimationFactory createHomeAnimationFactory(ArrayList<IBinder> launchCookies,
|
||||
long duration, boolean isTargetTranslucent, boolean appCanEnterPip,
|
||||
RemoteAnimationTargetCompat runningTaskTarget) {
|
||||
mAppCanEnterPip = appCanEnterPip;
|
||||
if (appCanEnterPip) {
|
||||
return new FallbackPipToHomeAnimationFactory();
|
||||
}
|
||||
mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration);
|
||||
startHomeIntent(mActiveAnimationFactory);
|
||||
return mActiveAnimationFactory;
|
||||
}
|
||||
|
||||
private void startHomeIntent(
|
||||
@Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory) {
|
||||
ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
|
||||
Intent intent = new Intent(mGestureState.getHomeIntent());
|
||||
mActiveAnimationFactory.addGestureContract(intent);
|
||||
if (gestureContractAnimationFactory != null) {
|
||||
gestureContractAnimationFactory.addGestureContract(intent);
|
||||
}
|
||||
try {
|
||||
mContext.startActivity(intent, options.toBundle());
|
||||
} catch (NullPointerException | ActivityNotFoundException | SecurityException e) {
|
||||
mContext.startActivity(createHomeIntent());
|
||||
}
|
||||
return mActiveAnimationFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -160,8 +175,19 @@ public class FallbackSwipeHandler extends
|
||||
|
||||
@Override
|
||||
protected void finishRecentsControllerToHome(Runnable callback) {
|
||||
final Runnable recentsCallback;
|
||||
if (mAppCanEnterPip) {
|
||||
// Make sure Launcher is resumed after auto-enter-pip transition to actually trigger
|
||||
// the PiP task appearing.
|
||||
recentsCallback = () -> {
|
||||
callback.run();
|
||||
startHomeIntent(null /* gestureContractAnimationFactory */);
|
||||
};
|
||||
} else {
|
||||
recentsCallback = callback;
|
||||
}
|
||||
mRecentsAnimationController.finish(
|
||||
false /* toRecents */, callback, true /* sendUserLeaveHint */);
|
||||
mAppCanEnterPip /* toRecents */, recentsCallback, true /* sendUserLeaveHint */);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -186,6 +212,17 @@ public class FallbackSwipeHandler extends
|
||||
}
|
||||
}
|
||||
|
||||
private class FallbackPipToHomeAnimationFactory extends HomeAnimationFactory {
|
||||
@NonNull
|
||||
@Override
|
||||
public AnimatorPlaybackController createActivityAnimationToHome() {
|
||||
// copied from {@link LauncherSwipeHandlerV2.LauncherHomeAnimationFactory}
|
||||
long accuracy = 2 * Math.max(mDp.widthPx, mDp.heightPx);
|
||||
return mActivity.getStateManager().createAnimationToNewWorkspace(
|
||||
RecentsState.HOME, accuracy, StateAnimationConfig.SKIP_ALL_ANIMATIONS);
|
||||
}
|
||||
}
|
||||
|
||||
private class FallbackHomeAnimationFactory extends HomeAnimationFactory {
|
||||
private final Rect mTempRect = new Rect();
|
||||
private final TransformParams mHomeAlphaParams = new TransformParams();
|
||||
|
||||
@@ -284,10 +284,5 @@ public class LauncherSwipeHandlerV2 extends
|
||||
getViewIgnoredInWorkspaceRevealAnimation())
|
||||
.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportSwipePipToHome() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,14 +183,6 @@ public abstract class SwipeUpAnimationLogic implements
|
||||
|
||||
public void onCancel() { }
|
||||
|
||||
/**
|
||||
* @return {@code true} if this factory supports animating an Activity to PiP window on
|
||||
* swiping up to home.
|
||||
*/
|
||||
public boolean supportSwipePipToHome() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param progress The progress of the animation to the home screen.
|
||||
* @return The current alpha to set on the animating app window.
|
||||
|
||||
Reference in New Issue
Block a user