Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f771fdf9 authored by Sam Dubey's avatar Sam Dubey Committed by Automerger Merge Worker
Browse files

Merge "Revert "Removing AM.getTasks call on UI thread during touch down"" into...

Merge "Revert "Removing AM.getTasks call on UI thread during touch down"" into tm-dev am: 1e064847

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/17800077



Change-Id: I6a98c91c5cd59475def09b8e84b73f314dc0ff4e
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0de0fe8f 1e064847
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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;

@@ -112,8 +112,7 @@ public class NavBarToHomeTouchController implements TouchController,
            return true;
        }
        if (FeatureFlags.ASSISTANT_GIVES_LAUNCHER_FOCUS.get()
                && TopTaskTracker.INSTANCE.get(mLauncher).getCachedTopTask(false)
                        .isExcludedAssistant()) {
                && AssistantUtilities.isExcludedAssistantRunning()) {
            return true;
        }
        return false;
+21 −8
Original line number Diff line number Diff line
@@ -102,6 +102,7 @@ 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;
@@ -113,7 +114,6 @@ 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;
@@ -564,12 +564,24 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    }

    protected void notifyGestureAnimationStartToRecents() {
        Task[] runningTasks;
        ActivityManager.RunningTaskInfo[] runningTasks;
        if (mIsSwipeForStagedSplit) {
            int[] splitTaskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds();
            runningTasks = mGestureState.getRunningTask().getPlaceholderTasks(splitTaskIds);
            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;
                    }

                }
            }
        } else {
            runningTasks = mGestureState.getRunningTask().getPlaceholderTasks();
            runningTasks = new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()};
        }
        mRecentsView.onGestureAnimationStart(runningTasks, mDeviceState.getRotationTouchHelper());
    }
@@ -789,7 +801,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(mContext, targets);
        mRemoteTargetHandles = mTargetGluer.assignTargetsForSplitScreen(targets);
        mRecentsAnimationController = controller;
        mRecentsAnimationTargets = targets;

@@ -1368,7 +1380,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 = runningTaskTarget.taskInfo;
        final ActivityManager.RunningTaskInfo taskInfo = mGestureState.getRunningTask();
        final RecentsOrientedState orientationState = mRemoteTargetHandles[0].getTaskViewSimulator()
                .getOrientationState();
        final int windowRotation = calculateWindowRotation(runningTaskTarget, orientationState);
@@ -1770,7 +1782,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
                    new PictureInPictureSurfaceTransaction.Builder()
                            .setAlpha(0f)
                            .build();
            int[] taskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds();
            int[] taskIds =
                        LauncherSplitScreenListener.INSTANCE.getNoCreate().getRunningSplitTaskIds();
            for (int taskId : taskIds) {
                mRecentsAnimationController.setFinishTaskTransaction(taskId,
                        tx, null /* overlay */);
+12 −13
Original line number Diff line number Diff line
@@ -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.RunningTaskInfo;
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.content.ActivityNotFoundException;
import android.content.Context;
@@ -69,6 +69,7 @@ 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;
@@ -108,7 +109,7 @@ public class FallbackSwipeHandler extends
        super(context, deviceState, taskAnimationManager, gestureState, touchTimeMs,
                continuingLastGesture, inputConsumer);

        mRunningOverHome = mGestureState.getRunningTask().isHomeTask();
        mRunningOverHome = ActivityManagerWrapper.isHomeTask(mGestureState.getRunningTask());
        if (mRunningOverHome) {
            runActionOnRemoteHandles(remoteTargetHandle ->
                    remoteTargetHandle.getTransformParams().setHomeBuilderProxy(
@@ -149,17 +150,16 @@ public class FallbackSwipeHandler extends
            return new FallbackPipToHomeAnimationFactory();
        }
        mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration);
        startHomeIntent(mActiveAnimationFactory, runningTaskTarget);
        startHomeIntent(mActiveAnimationFactory);
        return mActiveAnimationFactory;
    }

    private void startHomeIntent(
            @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory,
            @Nullable RemoteAnimationTargetCompat runningTaskTarget) {
            @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory) {
        ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
        Intent intent = new Intent(mGestureState.getHomeIntent());
        if (gestureContractAnimationFactory != null && runningTaskTarget != null) {
            gestureContractAnimationFactory.addGestureContract(intent, runningTaskTarget.taskInfo);
        if (gestureContractAnimationFactory != null) {
            gestureContractAnimationFactory.addGestureContract(intent);
        }
        try {
            mContext.startActivity(intent, options.toBundle());
@@ -187,8 +187,7 @@ public class FallbackSwipeHandler extends
            // the PiP task appearing.
            recentsCallback = () -> {
                callback.run();
                startHomeIntent(
                        null /* gestureContractAnimationFactory */, null /* runningTaskTarget */);
                startHomeIntent(null /* gestureContractAnimationFactory */);
            };
        } else {
            recentsCallback = callback;
@@ -213,7 +212,7 @@ public class FallbackSwipeHandler extends
        if (mRunningOverHome) {
            if (DisplayController.getNavigationMode(mContext).hasGestures) {
                mRecentsView.onGestureAnimationStartOnHome(
                        mGestureState.getRunningTask().getPlaceholderTasks(),
                        new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()},
                        mDeviceState.getRotationTouchHelper());
            }
        } else {
@@ -397,12 +396,12 @@ public class FallbackSwipeHandler extends
            }
        }

        private void addGestureContract(Intent intent, RunningTaskInfo runningTaskInfo) {
            if (mRunningOverHome || runningTaskInfo == null) {
        private void addGestureContract(Intent intent) {
            if (mRunningOverHome || mGestureState.getRunningTask() == null) {
                return;
            }

            TaskKey key = new TaskKey(runningTaskInfo);
            TaskKey key = new TaskKey(mGestureState.getRunningTask());
            if (key.getComponent() != null) {
                if (sMessageReceiver == null) {
                    sMessageReceiver = new StaticMessageReceiver();
+24 −6
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ 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;

@@ -29,7 +30,6 @@ 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;
@@ -135,7 +135,8 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL
    private final MultiStateCallback mStateCallback;
    private final int mGestureId;

    private CachedTaskInfo mRunningTask;
    private ActivityManager.RunningTaskInfo mRunningTask;
    private ActivityManager.RunningTaskInfo[] mRunningTasks;
    private GestureEndTarget mEndTarget;
    private RemoteAnimationTargetCompat mLastAppearedTaskTarget;
    private Set<Integer> mPreviouslyAppearedTaskIds = new HashSet<>();
@@ -231,24 +232,41 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL
    /**
     * @return the running task for this gesture.
     */
    public CachedTaskInfo getRunningTask() {
    public ActivityManager.RunningTaskInfo 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.getTaskId() : -1;
        return mRunningTask != null ? mRunningTask.taskId : -1;
    }

    /**
     * Updates the running task for the gesture to be the given {@param runningTask}.
     */
    public void updateRunningTask(CachedTaskInfo runningTask) {
    public void updateRunningTask(ActivityManager.RunningTaskInfo 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.
     */
@@ -321,7 +339,7 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL
     * user controlled gesture.
     */
    public void setHandlingAtomicEvent(boolean handlingAtomicEvent) {
        mHandlingAtomicEvent = handlingAtomicEvent;
        mHandlingAtomicEvent = true;
    }

    /**
+27 −12
Original line number Diff line number Diff line
@@ -45,11 +45,14 @@ 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;
@@ -58,17 +61,18 @@ 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;
@@ -79,6 +83,7 @@ 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.
@@ -92,6 +97,7 @@ 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();
@@ -123,7 +129,6 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener {
        }
    };

    private int mGestureBlockingTaskId = -1;
    private Region mExclusionRegion;
    private SystemGestureExclusionListenerCompat mExclusionListener;

@@ -173,6 +178,22 @@ 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);
@@ -346,17 +367,11 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener {
    }

    /**
     * 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.
     * @return whether the given running task info matches the gesture-blocked activity.
     */
    public boolean isGestureBlockedTask(CachedTaskInfo taskInfo) {
        return taskInfo != null && taskInfo.getTaskId() == mGestureBlockingTaskId;
    public boolean isGestureBlockedActivity(ActivityManager.RunningTaskInfo runningTaskInfo) {
        return runningTaskInfo != null
                && mGestureBlockedActivities.contains(runningTaskInfo.topActivity);
    }

    /**
Loading