mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Merge changes Ib7d3a07e,Ic22ccf17 into sc-dev
* changes: Disallow auto-enter PIP when there is an existing PIP Don't use icon home animator when entering PIP
This commit is contained in:
@@ -117,6 +117,7 @@ import com.android.systemui.shared.system.LatencyTrackerCompat;
|
||||
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
|
||||
import com.android.systemui.shared.system.TaskInfoCompat;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.Consumer;
|
||||
@@ -1072,7 +1073,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
|
||||
protected abstract HomeAnimationFactory createHomeAnimationFactory(
|
||||
ArrayList<IBinder> launchCookies, long duration, boolean isTargetTranslucent,
|
||||
RemoteAnimationTargetCompat runningTaskTarget);
|
||||
boolean appCanEnterPip, RemoteAnimationTargetCompat runningTaskTarget);
|
||||
|
||||
private final TaskStackChangeListener mActivityRestartListener = new TaskStackChangeListener() {
|
||||
@Override
|
||||
@@ -1083,7 +1084,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
// Since this is an edge case, just cancel and relaunch with default activity
|
||||
// options (since we don't know if there's an associated app icon to launch from)
|
||||
endRunningWindowAnim(true /* cancel */);
|
||||
ActivityManagerWrapper.getInstance().unregisterTaskStackListener(
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
|
||||
mActivityRestartListener);
|
||||
ActivityManagerWrapper.getInstance().startActivityFromRecents(task.taskId, null);
|
||||
}
|
||||
@@ -1098,7 +1099,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
// If we are transitioning to launcher, then listen for the activity to be restarted while
|
||||
// the transition is in progress
|
||||
if (mGestureState.getEndTarget().isLauncher) {
|
||||
ActivityManagerWrapper.getInstance().registerTaskStackListener(
|
||||
TaskStackChangeListeners.getInstance().registerTaskStackListener(
|
||||
mActivityRestartListener);
|
||||
|
||||
mParallelRunningAnim = mActivityInterface.getParallelAnimationToLauncher(
|
||||
@@ -1117,13 +1118,15 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
? runningTaskTarget.taskInfo.launchCookies
|
||||
: new ArrayList<>();
|
||||
boolean isTranslucent = runningTaskTarget != null && runningTaskTarget.isTranslucent;
|
||||
HomeAnimationFactory homeAnimFactory =
|
||||
createHomeAnimationFactory(cookies, duration, isTranslucent, runningTaskTarget);
|
||||
mIsSwipingPipToHome = homeAnimFactory.supportSwipePipToHome()
|
||||
boolean appCanEnterPip = !mDeviceState.isPipActive()
|
||||
&& runningTaskTarget != null
|
||||
&& runningTaskTarget.taskInfo.pictureInPictureParams != null
|
||||
&& TaskInfoCompat.isAutoEnterPipEnabled(
|
||||
runningTaskTarget.taskInfo.pictureInPictureParams);
|
||||
HomeAnimationFactory homeAnimFactory =
|
||||
createHomeAnimationFactory(cookies, duration, isTranslucent, appCanEnterPip,
|
||||
runningTaskTarget);
|
||||
mIsSwipingPipToHome = homeAnimFactory.supportSwipePipToHome() && appCanEnterPip;
|
||||
if (mIsSwipingPipToHome) {
|
||||
mSwipePipToHomeAnimator = getSwipePipToHomeAnimator(
|
||||
homeAnimFactory, runningTaskTarget, start);
|
||||
@@ -1399,7 +1402,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
}
|
||||
|
||||
mActivityInitListener.unregister();
|
||||
ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mActivityRestartListener);
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
|
||||
mActivityRestartListener);
|
||||
mTaskSnapshot = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ public class FallbackSwipeHandler extends
|
||||
|
||||
@Override
|
||||
protected HomeAnimationFactory createHomeAnimationFactory(ArrayList<IBinder> launchCookies,
|
||||
long duration, boolean isTargetTranslucent,
|
||||
long duration, boolean isTargetTranslucent, boolean appCanEnterPip,
|
||||
RemoteAnimationTargetCompat runningTaskTarget) {
|
||||
mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration);
|
||||
ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
|
||||
|
||||
@@ -88,7 +88,7 @@ public class LauncherSwipeHandlerV2 extends
|
||||
|
||||
@Override
|
||||
protected HomeAnimationFactory createHomeAnimationFactory(ArrayList<IBinder> launchCookies,
|
||||
long duration, boolean isTargetTranslucent,
|
||||
long duration, boolean isTargetTranslucent, boolean appCanEnterPip,
|
||||
RemoteAnimationTargetCompat runningTaskTarget) {
|
||||
if (mActivity == null) {
|
||||
mStateCallback.addChangeListener(STATE_LAUNCHER_PRESENT | STATE_HANDLER_INVALIDATED,
|
||||
@@ -108,7 +108,7 @@ public class LauncherSwipeHandlerV2 extends
|
||||
mActivity.getRootView().setForceHideBackArrow(true);
|
||||
mActivity.setHintUserWillBeActive();
|
||||
|
||||
if (!canUseWorkspaceView) {
|
||||
if (!canUseWorkspaceView || appCanEnterPip) {
|
||||
return new LauncherHomeAnimationFactory();
|
||||
}
|
||||
if (workspaceView instanceof LauncherAppWidgetHostView) {
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.android.systemui.shared.recents.model.Task;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.KeyguardManagerCompat;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -66,7 +67,7 @@ public class RecentTasksList extends TaskStackChangeListener {
|
||||
mKeyguardManager = keyguardManager;
|
||||
mChangeId = 1;
|
||||
mActivityManagerWrapper = activityManagerWrapper;
|
||||
mActivityManagerWrapper.registerTaskStackListener(this);
|
||||
TaskStackChangeListeners.getInstance().registerTaskStackListener(this);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.android.quickstep;
|
||||
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
||||
import static android.content.Intent.ACTION_USER_UNLOCKED;
|
||||
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_ALL;
|
||||
@@ -41,6 +43,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_S
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.app.ActivityTaskManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@@ -50,6 +53,7 @@ import android.content.res.Resources;
|
||||
import android.graphics.Region;
|
||||
import android.net.Uri;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
@@ -75,6 +79,8 @@ import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags;
|
||||
import com.android.systemui.shared.system.SystemGestureExclusionListenerCompat;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
@@ -96,6 +102,8 @@ public class RecentsAnimationDeviceState implements
|
||||
private final DisplayController mDisplayController;
|
||||
private final int mDisplayId;
|
||||
private final RotationTouchHelper mRotationTouchHelper;
|
||||
private final TaskStackChangeListener mPipListener;
|
||||
private final List<ComponentName> mGestureBlockedActivities;
|
||||
|
||||
private final ArrayList<Runnable> mOnDestroyActions = new ArrayList<>();
|
||||
|
||||
@@ -106,9 +114,11 @@ public class RecentsAnimationDeviceState implements
|
||||
private final Region mDeferredGestureRegion = new Region();
|
||||
private boolean mAssistantAvailable;
|
||||
private float mAssistantVisibility;
|
||||
private boolean mIsUserSetupComplete;
|
||||
private boolean mIsOneHandedModeEnabled;
|
||||
private boolean mIsSwipeToNotificationEnabled;
|
||||
private final boolean mIsOneHandedModeSupported;
|
||||
private boolean mPipIsActive;
|
||||
|
||||
private boolean mIsUserUnlocked;
|
||||
private final ArrayList<Runnable> mUserUnlockedActions = new ArrayList<>();
|
||||
@@ -125,10 +135,6 @@ public class RecentsAnimationDeviceState implements
|
||||
private Region mExclusionRegion;
|
||||
private SystemGestureExclusionListenerCompat mExclusionListener;
|
||||
|
||||
private final List<ComponentName> mGestureBlockedActivities;
|
||||
|
||||
private boolean mIsUserSetupComplete;
|
||||
|
||||
public RecentsAnimationDeviceState(Context context) {
|
||||
this(context, false);
|
||||
}
|
||||
@@ -204,7 +210,6 @@ public class RecentsAnimationDeviceState implements
|
||||
mIsOneHandedModeEnabled = false;
|
||||
}
|
||||
|
||||
|
||||
Uri swipeBottomNotificationUri =
|
||||
Settings.Secure.getUriFor(ONE_HANDED_SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED);
|
||||
SettingsCache.OnChangeListener onChangeListener =
|
||||
@@ -220,6 +225,27 @@ public class RecentsAnimationDeviceState implements
|
||||
settingsCache.register(setupCompleteUri, userSetupChangeListener);
|
||||
runOnDestroy(() -> settingsCache.unregister(setupCompleteUri, userSetupChangeListener));
|
||||
}
|
||||
|
||||
try {
|
||||
mPipIsActive = ActivityTaskManager.getService().getRootTaskInfo(
|
||||
WINDOWING_MODE_PINNED, ACTIVITY_TYPE_UNDEFINED) != null;
|
||||
} catch (RemoteException e) {
|
||||
// Do nothing
|
||||
}
|
||||
mPipListener = new TaskStackChangeListener() {
|
||||
@Override
|
||||
public void onActivityPinned(String packageName, int userId, int taskId, int stackId) {
|
||||
mPipIsActive = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityUnpinned() {
|
||||
mPipIsActive = false;
|
||||
}
|
||||
};
|
||||
TaskStackChangeListeners.getInstance().registerTaskStackListener(mPipListener);
|
||||
runOnDestroy(() ->
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mPipListener));
|
||||
}
|
||||
|
||||
private void runOnDestroy(Runnable action) {
|
||||
@@ -579,6 +605,10 @@ public class RecentsAnimationDeviceState implements
|
||||
return mIsSwipeToNotificationEnabled;
|
||||
}
|
||||
|
||||
public boolean isPipActive() {
|
||||
return mPipIsActive;
|
||||
}
|
||||
|
||||
public RotationTouchHelper getRotationTouchHelper() {
|
||||
return mRotationTouchHelper;
|
||||
}
|
||||
@@ -596,6 +626,7 @@ public class RecentsAnimationDeviceState implements
|
||||
pw.println(" isOneHandedModeEnabled=" + mIsOneHandedModeEnabled);
|
||||
pw.println(" isSwipeToNotificationEnabled=" + mIsSwipeToNotificationEnabled);
|
||||
pw.println(" deferredGestureRegion=" + mDeferredGestureRegion);
|
||||
pw.println(" pipIsActive=" + mPipIsActive);
|
||||
mRotationTouchHelper.dump(pw);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import com.android.systemui.shared.recents.model.ThumbnailData;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.KeyguardManagerCompat;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -75,7 +76,7 @@ public class RecentsModel extends TaskStackChangeListener implements IconChangeL
|
||||
mIconCache = new TaskIconCache(context, RECENTS_MODEL_EXECUTOR, iconProvider);
|
||||
mThumbnailCache = new TaskThumbnailCache(context, RECENTS_MODEL_EXECUTOR);
|
||||
|
||||
ActivityManagerWrapper.getInstance().registerTaskStackListener(this);
|
||||
TaskStackChangeListeners.getInstance().registerTaskStackListener(this);
|
||||
iconProvider.registerIconChangeListener(this, MAIN_EXECUTOR.getHandler());
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.android.quickstep.util.RecentsOrientedState;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
@@ -178,14 +179,14 @@ public class RotationTouchHelper implements
|
||||
}
|
||||
|
||||
private void setupOrientationSwipeHandler() {
|
||||
ActivityManagerWrapper.getInstance().registerTaskStackListener(mFrozenTaskListener);
|
||||
mOnDestroyFrozenTaskRunnable = () -> ActivityManagerWrapper.getInstance()
|
||||
TaskStackChangeListeners.getInstance().registerTaskStackListener(mFrozenTaskListener);
|
||||
mOnDestroyFrozenTaskRunnable = () -> TaskStackChangeListeners.getInstance()
|
||||
.unregisterTaskStackListener(mFrozenTaskListener);
|
||||
runOnDestroy(mOnDestroyFrozenTaskRunnable);
|
||||
}
|
||||
|
||||
private void destroyOrientationSwipeHandlerCallback() {
|
||||
ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mFrozenTaskListener);
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mFrozenTaskListener);
|
||||
mOnDestroyActions.remove(mOnDestroyFrozenTaskRunnable);
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ import com.android.systemui.shared.system.ActivityOptionsCompat;
|
||||
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
|
||||
import com.android.systemui.shared.system.RemoteTransitionCompat;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||
|
||||
public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAnimationListener {
|
||||
public static final boolean ENABLE_SHELL_TRANSITIONS =
|
||||
@@ -58,7 +59,7 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
|
||||
public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
|
||||
boolean homeTaskVisible, boolean clearedTask, boolean wasVisible) {
|
||||
if (mLastGestureState == null) {
|
||||
ActivityManagerWrapper.getInstance().unregisterTaskStackListener(
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
|
||||
mLiveTileRestartListener);
|
||||
return;
|
||||
}
|
||||
@@ -68,7 +69,7 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
|
||||
RecentsView recentsView = activityInterface.getCreatedActivity().getOverviewPanel();
|
||||
if (recentsView != null) {
|
||||
recentsView.launchSideTaskInLiveTileModeForRestartedApp(task.taskId);
|
||||
ActivityManagerWrapper.getInstance().unregisterTaskStackListener(
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
|
||||
mLiveTileRestartListener);
|
||||
}
|
||||
}
|
||||
@@ -197,7 +198,7 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
|
||||
}
|
||||
|
||||
public void enableLiveTileRestartListener() {
|
||||
ActivityManagerWrapper.getInstance().registerTaskStackListener(mLiveTileRestartListener);
|
||||
TaskStackChangeListeners.getInstance().registerTaskStackListener(mLiveTileRestartListener);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -241,7 +242,7 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
|
||||
mLiveTileCleanUpHandler.run();
|
||||
mLiveTileCleanUpHandler = null;
|
||||
}
|
||||
ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mLiveTileRestartListener);
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mLiveTileRestartListener);
|
||||
|
||||
// Release all the target leashes
|
||||
if (mTargets != null) {
|
||||
|
||||
Reference in New Issue
Block a user