Loading quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +3 −2 Original line number Diff line number Diff line Loading @@ -48,8 +48,8 @@ import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.touch.SingleAxisSwipeDetector; import com.android.launcher3.util.TouchController; import com.android.quickstep.TaskUtils; import com.android.quickstep.TopTaskTracker; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.AssistantUtilities; import com.android.quickstep.util.OverviewToHomeAnim; import com.android.quickstep.views.RecentsView; Loading Loading @@ -112,7 +112,8 @@ public class NavBarToHomeTouchController implements TouchController, return true; } if (FeatureFlags.ASSISTANT_GIVES_LAUNCHER_FOCUS.get() && AssistantUtilities.isExcludedAssistantRunning()) { && TopTaskTracker.INSTANCE.get(mLauncher).getCachedTopTask(false) .isExcludedAssistant()) { return true; } return false; Loading quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +8 −21 Original line number Diff line number Diff line Loading @@ -102,7 +102,6 @@ import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.InputConsumerProxy; import com.android.quickstep.util.InputProxyHandlerFactory; import com.android.quickstep.util.LauncherSplitScreenListener; import com.android.quickstep.util.MotionPauseDetector; import com.android.quickstep.util.ProtoTracer; import com.android.quickstep.util.RecentsOrientedState; Loading @@ -114,6 +113,7 @@ import com.android.quickstep.util.TaskViewSimulator; import com.android.quickstep.util.VibratorWrapper; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; Loading Loading @@ -564,24 +564,12 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, } protected void notifyGestureAnimationStartToRecents() { ActivityManager.RunningTaskInfo[] runningTasks; Task[] runningTasks; if (mIsSwipeForStagedSplit) { int[] splitTaskIds = LauncherSplitScreenListener.INSTANCE.getNoCreate().getRunningSplitTaskIds(); runningTasks = new ActivityManager.RunningTaskInfo[splitTaskIds.length]; for (int i = 0; i < splitTaskIds.length; i++) { int taskId = splitTaskIds[i]; // Order matters here, we want first indexed RunningTaskInfo to be leftTop task for (ActivityManager.RunningTaskInfo rti : mGestureState.getRunningTasks()) { if (taskId == rti.taskId) { runningTasks[i] = rti; break; } } } int[] splitTaskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds(); runningTasks = mGestureState.getRunningTask().getPlaceholderTasks(splitTaskIds); } else { runningTasks = new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()}; runningTasks = mGestureState.getRunningTask().getPlaceholderTasks(); } mRecentsView.onGestureAnimationStart(runningTasks, mDeviceState.getRotationTouchHelper()); } Loading Loading @@ -801,7 +789,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, RecentsAnimationTargets targets) { super.onRecentsAnimationStart(controller, targets); ActiveGestureLog.INSTANCE.addLog("startRecentsAnimationCallback", targets.apps.length); mRemoteTargetHandles = mTargetGluer.assignTargetsForSplitScreen(targets); mRemoteTargetHandles = mTargetGluer.assignTargetsForSplitScreen(mContext, targets); mRecentsAnimationController = controller; mRecentsAnimationTargets = targets; Loading Loading @@ -1380,7 +1368,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private SwipePipToHomeAnimator createWindowAnimationToPip(HomeAnimationFactory homeAnimFactory, RemoteAnimationTargetCompat runningTaskTarget, float startProgress) { // Directly animate the app to PiP (picture-in-picture) mode final ActivityManager.RunningTaskInfo taskInfo = mGestureState.getRunningTask(); final ActivityManager.RunningTaskInfo taskInfo = runningTaskTarget.taskInfo; final RecentsOrientedState orientationState = mRemoteTargetHandles[0].getTaskViewSimulator() .getOrientationState(); final int windowRotation = calculateWindowRotation(runningTaskTarget, orientationState); Loading Loading @@ -1782,8 +1770,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, new PictureInPictureSurfaceTransaction.Builder() .setAlpha(0f) .build(); int[] taskIds = LauncherSplitScreenListener.INSTANCE.getNoCreate().getRunningSplitTaskIds(); int[] taskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds(); for (int taskId : taskIds) { mRecentsAnimationController.setFinishTaskTransaction(taskId, tx, null /* overlay */); Loading quickstep/src/com/android/quickstep/FallbackSwipeHandler.java +13 −12 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACT import android.animation.ObjectAnimator; import android.annotation.TargetApi; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityOptions; import android.content.ActivityNotFoundException; import android.content.Context; Loading Loading @@ -69,7 +69,6 @@ import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.TransformParams; import com.android.quickstep.util.TransformParams.BuilderProxy; import com.android.systemui.shared.recents.model.Task.TaskKey; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams; Loading Loading @@ -109,7 +108,7 @@ public class FallbackSwipeHandler extends super(context, deviceState, taskAnimationManager, gestureState, touchTimeMs, continuingLastGesture, inputConsumer); mRunningOverHome = ActivityManagerWrapper.isHomeTask(mGestureState.getRunningTask()); mRunningOverHome = mGestureState.getRunningTask().isHomeTask(); if (mRunningOverHome) { runActionOnRemoteHandles(remoteTargetHandle -> remoteTargetHandle.getTransformParams().setHomeBuilderProxy( Loading Loading @@ -150,16 +149,17 @@ public class FallbackSwipeHandler extends return new FallbackPipToHomeAnimationFactory(); } mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration); startHomeIntent(mActiveAnimationFactory); startHomeIntent(mActiveAnimationFactory, runningTaskTarget); return mActiveAnimationFactory; } private void startHomeIntent( @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory) { @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory, @Nullable RemoteAnimationTargetCompat runningTaskTarget) { ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0); Intent intent = new Intent(mGestureState.getHomeIntent()); if (gestureContractAnimationFactory != null) { gestureContractAnimationFactory.addGestureContract(intent); if (gestureContractAnimationFactory != null && runningTaskTarget != null) { gestureContractAnimationFactory.addGestureContract(intent, runningTaskTarget.taskInfo); } try { mContext.startActivity(intent, options.toBundle()); Loading Loading @@ -187,7 +187,8 @@ public class FallbackSwipeHandler extends // the PiP task appearing. recentsCallback = () -> { callback.run(); startHomeIntent(null /* gestureContractAnimationFactory */); startHomeIntent( null /* gestureContractAnimationFactory */, null /* runningTaskTarget */); }; } else { recentsCallback = callback; Loading @@ -212,7 +213,7 @@ public class FallbackSwipeHandler extends if (mRunningOverHome) { if (DisplayController.getNavigationMode(mContext).hasGestures) { mRecentsView.onGestureAnimationStartOnHome( new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()}, mGestureState.getRunningTask().getPlaceholderTasks(), mDeviceState.getRotationTouchHelper()); } } else { Loading Loading @@ -396,12 +397,12 @@ public class FallbackSwipeHandler extends } } private void addGestureContract(Intent intent) { if (mRunningOverHome || mGestureState.getRunningTask() == null) { private void addGestureContract(Intent intent, RunningTaskInfo runningTaskInfo) { if (mRunningOverHome || runningTaskInfo == null) { return; } TaskKey key = new TaskKey(mGestureState.getRunningTask()); TaskKey key = new TaskKey(runningTaskInfo); if (key.getComponent() != null) { if (sMessageReceiver == null) { sMessageReceiver = new StaticMessageReceiver(); Loading quickstep/src/com/android/quickstep/GestureState.java +6 −24 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import static com.android.quickstep.MultiStateCallback.DEBUG_STATES; import android.annotation.Nullable; import android.annotation.TargetApi; import android.app.ActivityManager; import android.content.Intent; import android.os.Build; Loading @@ -30,6 +29,7 @@ import com.android.launcher3.statemanager.BaseState; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.tracing.GestureStateProto; import com.android.launcher3.tracing.SwipeHandlerProto; import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.util.ActiveGestureLog; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; Loading Loading @@ -135,8 +135,7 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL private final MultiStateCallback mStateCallback; private final int mGestureId; private ActivityManager.RunningTaskInfo mRunningTask; private ActivityManager.RunningTaskInfo[] mRunningTasks; private CachedTaskInfo mRunningTask; private GestureEndTarget mEndTarget; private RemoteAnimationTargetCompat mLastAppearedTaskTarget; private Set<Integer> mPreviouslyAppearedTaskIds = new HashSet<>(); Loading Loading @@ -232,41 +231,24 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL /** * @return the running task for this gesture. */ public ActivityManager.RunningTaskInfo getRunningTask() { public CachedTaskInfo getRunningTask() { return mRunningTask; } /** * This will array will contain the task returned by {@link #getRunningTask()} * @return the running tasks for this gesture. */ public ActivityManager.RunningTaskInfo[] getRunningTasks() { return mRunningTasks; } /** * @return the running task id for this gesture. */ public int getRunningTaskId() { return mRunningTask != null ? mRunningTask.taskId : -1; return mRunningTask != null ? mRunningTask.getTaskId() : -1; } /** * Updates the running task for the gesture to be the given {@param runningTask}. */ public void updateRunningTask(ActivityManager.RunningTaskInfo runningTask) { public void updateRunningTask(CachedTaskInfo runningTask) { mRunningTask = runningTask; } /** * TODO(b/210903248) refactor to consolidate w/ method above * Updates the running task for the gesture to be the given {@param runningTask}. */ public void updateRunningTasks(ActivityManager.RunningTaskInfo[] runningTasks) { mRunningTasks = runningTasks; updateRunningTask(runningTasks[0]); } /** * Updates the last task that appeared during this gesture. */ Loading Loading @@ -339,7 +321,7 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL * user controlled gesture. */ public void setHandlingAtomicEvent(boolean handlingAtomicEvent) { mHandlingAtomicEvent = true; mHandlingAtomicEvent = handlingAtomicEvent; } /** Loading quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java +12 −27 Original line number Diff line number Diff line Loading @@ -45,14 +45,11 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_Q import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; 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; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.graphics.Region; import android.inputmethodservice.InputMethodService; import android.net.Uri; Loading @@ -61,18 +58,17 @@ import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; import android.view.MotionEvent; import androidx.annotation.BinderThread; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.DisplayController.DisplayInfoChangeListener; import com.android.launcher3.util.DisplayController.Info; import com.android.launcher3.util.DisplayController.NavigationMode; import com.android.launcher3.util.SettingsCache; import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.util.NavBarPosition; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; Loading @@ -83,7 +79,6 @@ import com.android.systemui.shared.system.TaskStackChangeListeners; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * Manages the state of the system during a swipe up gesture. Loading @@ -97,7 +92,6 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { private final int mDisplayId; private final RotationTouchHelper mRotationTouchHelper; private final TaskStackChangeListener mPipListener; private final List<ComponentName> mGestureBlockedActivities; // Cache for better performance since it doesn't change at runtime. private final boolean mCanImeRenderGesturalNavButtons = InputMethodService.canImeRenderGesturalNavButtons(); Loading Loading @@ -129,6 +123,7 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { } }; private int mGestureBlockingTaskId = -1; private Region mExclusionRegion; private SystemGestureExclusionListenerCompat mExclusionListener; Loading Loading @@ -178,22 +173,6 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { onDisplayInfoChanged(context, mDisplayController.getInfo(), CHANGE_ALL); runOnDestroy(() -> mDisplayController.removeChangeListener(this)); // Add any blocked activities String[] blockingActivities; try { blockingActivities = context.getResources().getStringArray(R.array.gesture_blocking_activities); } catch (Resources.NotFoundException e) { blockingActivities = new String[0]; } mGestureBlockedActivities = new ArrayList<>(blockingActivities.length); for (String blockingActivity : blockingActivities) { if (!TextUtils.isEmpty(blockingActivity)) { mGestureBlockedActivities.add( ComponentName.unflattenFromString(blockingActivity)); } } SettingsCache settingsCache = SettingsCache.INSTANCE.get(mContext); if (mIsOneHandedModeSupported) { Uri oneHandedUri = Settings.Secure.getUriFor(ONE_HANDED_ENABLED); Loading Loading @@ -367,11 +346,17 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { } /** * @return whether the given running task info matches the gesture-blocked activity. * Sets the task id where gestures should be blocked */ public void setGestureBlockingTaskId(int taskId) { mGestureBlockingTaskId = taskId; } /** * @return whether the given running task info matches the gesture-blocked task. */ public boolean isGestureBlockedActivity(ActivityManager.RunningTaskInfo runningTaskInfo) { return runningTaskInfo != null && mGestureBlockedActivities.contains(runningTaskInfo.topActivity); public boolean isGestureBlockedTask(CachedTaskInfo taskInfo) { return taskInfo != null && taskInfo.getTaskId() == mGestureBlockingTaskId; } /** Loading Loading
quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +3 −2 Original line number Diff line number Diff line Loading @@ -48,8 +48,8 @@ import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.touch.SingleAxisSwipeDetector; import com.android.launcher3.util.TouchController; import com.android.quickstep.TaskUtils; import com.android.quickstep.TopTaskTracker; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.AssistantUtilities; import com.android.quickstep.util.OverviewToHomeAnim; import com.android.quickstep.views.RecentsView; Loading Loading @@ -112,7 +112,8 @@ public class NavBarToHomeTouchController implements TouchController, return true; } if (FeatureFlags.ASSISTANT_GIVES_LAUNCHER_FOCUS.get() && AssistantUtilities.isExcludedAssistantRunning()) { && TopTaskTracker.INSTANCE.get(mLauncher).getCachedTopTask(false) .isExcludedAssistant()) { return true; } return false; Loading
quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +8 −21 Original line number Diff line number Diff line Loading @@ -102,7 +102,6 @@ import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.InputConsumerProxy; import com.android.quickstep.util.InputProxyHandlerFactory; import com.android.quickstep.util.LauncherSplitScreenListener; import com.android.quickstep.util.MotionPauseDetector; import com.android.quickstep.util.ProtoTracer; import com.android.quickstep.util.RecentsOrientedState; Loading @@ -114,6 +113,7 @@ import com.android.quickstep.util.TaskViewSimulator; import com.android.quickstep.util.VibratorWrapper; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; Loading Loading @@ -564,24 +564,12 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, } protected void notifyGestureAnimationStartToRecents() { ActivityManager.RunningTaskInfo[] runningTasks; Task[] runningTasks; if (mIsSwipeForStagedSplit) { int[] splitTaskIds = LauncherSplitScreenListener.INSTANCE.getNoCreate().getRunningSplitTaskIds(); runningTasks = new ActivityManager.RunningTaskInfo[splitTaskIds.length]; for (int i = 0; i < splitTaskIds.length; i++) { int taskId = splitTaskIds[i]; // Order matters here, we want first indexed RunningTaskInfo to be leftTop task for (ActivityManager.RunningTaskInfo rti : mGestureState.getRunningTasks()) { if (taskId == rti.taskId) { runningTasks[i] = rti; break; } } } int[] splitTaskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds(); runningTasks = mGestureState.getRunningTask().getPlaceholderTasks(splitTaskIds); } else { runningTasks = new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()}; runningTasks = mGestureState.getRunningTask().getPlaceholderTasks(); } mRecentsView.onGestureAnimationStart(runningTasks, mDeviceState.getRotationTouchHelper()); } Loading Loading @@ -801,7 +789,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, RecentsAnimationTargets targets) { super.onRecentsAnimationStart(controller, targets); ActiveGestureLog.INSTANCE.addLog("startRecentsAnimationCallback", targets.apps.length); mRemoteTargetHandles = mTargetGluer.assignTargetsForSplitScreen(targets); mRemoteTargetHandles = mTargetGluer.assignTargetsForSplitScreen(mContext, targets); mRecentsAnimationController = controller; mRecentsAnimationTargets = targets; Loading Loading @@ -1380,7 +1368,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private SwipePipToHomeAnimator createWindowAnimationToPip(HomeAnimationFactory homeAnimFactory, RemoteAnimationTargetCompat runningTaskTarget, float startProgress) { // Directly animate the app to PiP (picture-in-picture) mode final ActivityManager.RunningTaskInfo taskInfo = mGestureState.getRunningTask(); final ActivityManager.RunningTaskInfo taskInfo = runningTaskTarget.taskInfo; final RecentsOrientedState orientationState = mRemoteTargetHandles[0].getTaskViewSimulator() .getOrientationState(); final int windowRotation = calculateWindowRotation(runningTaskTarget, orientationState); Loading Loading @@ -1782,8 +1770,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, new PictureInPictureSurfaceTransaction.Builder() .setAlpha(0f) .build(); int[] taskIds = LauncherSplitScreenListener.INSTANCE.getNoCreate().getRunningSplitTaskIds(); int[] taskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds(); for (int taskId : taskIds) { mRecentsAnimationController.setFinishTaskTransaction(taskId, tx, null /* overlay */); Loading
quickstep/src/com/android/quickstep/FallbackSwipeHandler.java +13 −12 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACT import android.animation.ObjectAnimator; import android.annotation.TargetApi; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityOptions; import android.content.ActivityNotFoundException; import android.content.Context; Loading Loading @@ -69,7 +69,6 @@ import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.TransformParams; import com.android.quickstep.util.TransformParams.BuilderProxy; import com.android.systemui.shared.recents.model.Task.TaskKey; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams; Loading Loading @@ -109,7 +108,7 @@ public class FallbackSwipeHandler extends super(context, deviceState, taskAnimationManager, gestureState, touchTimeMs, continuingLastGesture, inputConsumer); mRunningOverHome = ActivityManagerWrapper.isHomeTask(mGestureState.getRunningTask()); mRunningOverHome = mGestureState.getRunningTask().isHomeTask(); if (mRunningOverHome) { runActionOnRemoteHandles(remoteTargetHandle -> remoteTargetHandle.getTransformParams().setHomeBuilderProxy( Loading Loading @@ -150,16 +149,17 @@ public class FallbackSwipeHandler extends return new FallbackPipToHomeAnimationFactory(); } mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration); startHomeIntent(mActiveAnimationFactory); startHomeIntent(mActiveAnimationFactory, runningTaskTarget); return mActiveAnimationFactory; } private void startHomeIntent( @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory) { @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory, @Nullable RemoteAnimationTargetCompat runningTaskTarget) { ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0); Intent intent = new Intent(mGestureState.getHomeIntent()); if (gestureContractAnimationFactory != null) { gestureContractAnimationFactory.addGestureContract(intent); if (gestureContractAnimationFactory != null && runningTaskTarget != null) { gestureContractAnimationFactory.addGestureContract(intent, runningTaskTarget.taskInfo); } try { mContext.startActivity(intent, options.toBundle()); Loading Loading @@ -187,7 +187,8 @@ public class FallbackSwipeHandler extends // the PiP task appearing. recentsCallback = () -> { callback.run(); startHomeIntent(null /* gestureContractAnimationFactory */); startHomeIntent( null /* gestureContractAnimationFactory */, null /* runningTaskTarget */); }; } else { recentsCallback = callback; Loading @@ -212,7 +213,7 @@ public class FallbackSwipeHandler extends if (mRunningOverHome) { if (DisplayController.getNavigationMode(mContext).hasGestures) { mRecentsView.onGestureAnimationStartOnHome( new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()}, mGestureState.getRunningTask().getPlaceholderTasks(), mDeviceState.getRotationTouchHelper()); } } else { Loading Loading @@ -396,12 +397,12 @@ public class FallbackSwipeHandler extends } } private void addGestureContract(Intent intent) { if (mRunningOverHome || mGestureState.getRunningTask() == null) { private void addGestureContract(Intent intent, RunningTaskInfo runningTaskInfo) { if (mRunningOverHome || runningTaskInfo == null) { return; } TaskKey key = new TaskKey(mGestureState.getRunningTask()); TaskKey key = new TaskKey(runningTaskInfo); if (key.getComponent() != null) { if (sMessageReceiver == null) { sMessageReceiver = new StaticMessageReceiver(); Loading
quickstep/src/com/android/quickstep/GestureState.java +6 −24 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import static com.android.quickstep.MultiStateCallback.DEBUG_STATES; import android.annotation.Nullable; import android.annotation.TargetApi; import android.app.ActivityManager; import android.content.Intent; import android.os.Build; Loading @@ -30,6 +29,7 @@ import com.android.launcher3.statemanager.BaseState; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.tracing.GestureStateProto; import com.android.launcher3.tracing.SwipeHandlerProto; import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.util.ActiveGestureLog; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; Loading Loading @@ -135,8 +135,7 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL private final MultiStateCallback mStateCallback; private final int mGestureId; private ActivityManager.RunningTaskInfo mRunningTask; private ActivityManager.RunningTaskInfo[] mRunningTasks; private CachedTaskInfo mRunningTask; private GestureEndTarget mEndTarget; private RemoteAnimationTargetCompat mLastAppearedTaskTarget; private Set<Integer> mPreviouslyAppearedTaskIds = new HashSet<>(); Loading Loading @@ -232,41 +231,24 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL /** * @return the running task for this gesture. */ public ActivityManager.RunningTaskInfo getRunningTask() { public CachedTaskInfo getRunningTask() { return mRunningTask; } /** * This will array will contain the task returned by {@link #getRunningTask()} * @return the running tasks for this gesture. */ public ActivityManager.RunningTaskInfo[] getRunningTasks() { return mRunningTasks; } /** * @return the running task id for this gesture. */ public int getRunningTaskId() { return mRunningTask != null ? mRunningTask.taskId : -1; return mRunningTask != null ? mRunningTask.getTaskId() : -1; } /** * Updates the running task for the gesture to be the given {@param runningTask}. */ public void updateRunningTask(ActivityManager.RunningTaskInfo runningTask) { public void updateRunningTask(CachedTaskInfo runningTask) { mRunningTask = runningTask; } /** * TODO(b/210903248) refactor to consolidate w/ method above * Updates the running task for the gesture to be the given {@param runningTask}. */ public void updateRunningTasks(ActivityManager.RunningTaskInfo[] runningTasks) { mRunningTasks = runningTasks; updateRunningTask(runningTasks[0]); } /** * Updates the last task that appeared during this gesture. */ Loading Loading @@ -339,7 +321,7 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL * user controlled gesture. */ public void setHandlingAtomicEvent(boolean handlingAtomicEvent) { mHandlingAtomicEvent = true; mHandlingAtomicEvent = handlingAtomicEvent; } /** Loading
quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java +12 −27 Original line number Diff line number Diff line Loading @@ -45,14 +45,11 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_Q import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; 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; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.graphics.Region; import android.inputmethodservice.InputMethodService; import android.net.Uri; Loading @@ -61,18 +58,17 @@ import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; import android.view.MotionEvent; import androidx.annotation.BinderThread; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.DisplayController.DisplayInfoChangeListener; import com.android.launcher3.util.DisplayController.Info; import com.android.launcher3.util.DisplayController.NavigationMode; import com.android.launcher3.util.SettingsCache; import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.util.NavBarPosition; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; Loading @@ -83,7 +79,6 @@ import com.android.systemui.shared.system.TaskStackChangeListeners; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * Manages the state of the system during a swipe up gesture. Loading @@ -97,7 +92,6 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { private final int mDisplayId; private final RotationTouchHelper mRotationTouchHelper; private final TaskStackChangeListener mPipListener; private final List<ComponentName> mGestureBlockedActivities; // Cache for better performance since it doesn't change at runtime. private final boolean mCanImeRenderGesturalNavButtons = InputMethodService.canImeRenderGesturalNavButtons(); Loading Loading @@ -129,6 +123,7 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { } }; private int mGestureBlockingTaskId = -1; private Region mExclusionRegion; private SystemGestureExclusionListenerCompat mExclusionListener; Loading Loading @@ -178,22 +173,6 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { onDisplayInfoChanged(context, mDisplayController.getInfo(), CHANGE_ALL); runOnDestroy(() -> mDisplayController.removeChangeListener(this)); // Add any blocked activities String[] blockingActivities; try { blockingActivities = context.getResources().getStringArray(R.array.gesture_blocking_activities); } catch (Resources.NotFoundException e) { blockingActivities = new String[0]; } mGestureBlockedActivities = new ArrayList<>(blockingActivities.length); for (String blockingActivity : blockingActivities) { if (!TextUtils.isEmpty(blockingActivity)) { mGestureBlockedActivities.add( ComponentName.unflattenFromString(blockingActivity)); } } SettingsCache settingsCache = SettingsCache.INSTANCE.get(mContext); if (mIsOneHandedModeSupported) { Uri oneHandedUri = Settings.Secure.getUriFor(ONE_HANDED_ENABLED); Loading Loading @@ -367,11 +346,17 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { } /** * @return whether the given running task info matches the gesture-blocked activity. * Sets the task id where gestures should be blocked */ public void setGestureBlockingTaskId(int taskId) { mGestureBlockingTaskId = taskId; } /** * @return whether the given running task info matches the gesture-blocked task. */ public boolean isGestureBlockedActivity(ActivityManager.RunningTaskInfo runningTaskInfo) { return runningTaskInfo != null && mGestureBlockedActivities.contains(runningTaskInfo.topActivity); public boolean isGestureBlockedTask(CachedTaskInfo taskInfo) { return taskInfo != null && taskInfo.getTaskId() == mGestureBlockingTaskId; } /** Loading