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

Commit 67d43409 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari Committed by Android (Google) Code Review
Browse files

Merge "Shift back gesture handling to Shell BackAnimationController" into main

parents 59ed1435 54885b8d
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -368,11 +368,6 @@ interface IActivityTaskManager {
    android.window.BackNavigationInfo startBackNavigation(
            in RemoteCallback navigationObserver, in BackAnimationAdapter adaptor);

    /**
     * Registers a callback to be invoked when the system server requests a back gesture.
     */
    void registerBackGestureDelegate(in RemoteCallback monitor);

    /**
     * registers a callback to be invoked when a background activity launch is aborted.
     *
+18 −18
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.content.res.Configuration;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.input.InputManager;
import android.hardware.input.KeyGestureEvent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -95,6 +96,7 @@ import com.android.wm.shell.transition.Transitions;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

/**
@@ -138,6 +140,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
    private final ShellExecutor mShellExecutor;
    private final WindowManager mWindowManager;
    private final Transitions mTransitions;
    private final InputManager mInputManager;
    @VisibleForTesting
    final BackTransitionHandler mBackTransitionHandler;
    @VisibleForTesting
@@ -271,6 +274,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
        mLatencyTracker = LatencyTracker.getInstance(mContext);
        mShellCommandHandler = shellCommandHandler;
        mWindowManager = context.getSystemService(WindowManager.class);
        mInputManager = context.getSystemService(InputManager.class);
        mTransitions = transitions;
        mBackTransitionHandler = new BackTransitionHandler(mTransitions);
        mTransitions.addHandler(mBackTransitionHandler);
@@ -1153,10 +1157,9 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
        if (!Flags.delegateBackGestureToShell()) {
            return;
        }
        final RemoteCallback requestBackMonitor = new RemoteCallback(
                new RemoteCallback.OnResultListener() {
                    @Override
                    public void onResult(@Nullable Bundle result) {
        mInputManager.registerKeyGestureEventHandler(List.of(KeyGestureEvent.KEY_GESTURE_TYPE_BACK),
                (event, focussedToken) -> {
                    if (event.getKeyGestureType() == KeyGestureEvent.KEY_GESTURE_TYPE_BACK) {
                        mShellExecutor.execute(() -> {
                            if (mBackGestureStarted) {
                                Log.w(TAG, "Back gesture is running, ignore request");
@@ -1166,13 +1169,10 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
                            setTriggerBack(true);
                            onMotionEvent(0, 0, KeyEvent.ACTION_UP, EDGE_NONE);
                        });
                    } else {
                        Log.w(TAG, "Unsupported gesture " + event + " received!");
                    }
                });
        try {
            mActivityTaskManager.registerBackGestureDelegate(requestBackMonitor);
        } catch (RemoteException remoteException) {
            Log.w(TAG, "Failed register back gesture request ", remoteException);
        }
    }

    /**
+6 −5
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ import static com.android.server.wm.WindowManagerPolicyProto.ROTATION_MODE;
import static com.android.server.wm.WindowManagerPolicyProto.SCREEN_ON_FULLY;
import static com.android.server.wm.WindowManagerPolicyProto.WINDOW_MANAGER_DRAW_COMPLETE;
import static com.android.systemui.shared.Flags.enableLppAssistInvocationEffect;
import static com.android.window.flags.Flags.delegateBackGestureToShell;

import android.accessibilityservice.AccessibilityService;
import android.annotation.Nullable;
@@ -249,6 +250,7 @@ import com.android.server.wm.DisplayPolicy;
import com.android.server.wm.DisplayRotation;
import com.android.server.wm.WindowManagerInternal;
import com.android.server.wm.WindowManagerInternal.AppTransitionListener;
import com.android.window.flags.Flags;

import java.io.File;
import java.io.FileNotFoundException;
@@ -3387,7 +3389,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL,
                KeyGestureEvent.KEY_GESTURE_TYPE_TAKE_SCREENSHOT,
                KeyGestureEvent.KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT,
                KeyGestureEvent.KEY_GESTURE_TYPE_BACK,
                KeyGestureEvent.KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION,
                KeyGestureEvent.KEY_GESTURE_TYPE_DESKTOP_MODE,
                KeyGestureEvent.KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT,
@@ -3406,6 +3407,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                KeyGestureEvent.KEY_GESTURE_TYPE_GLOBAL_ACTIONS,
                KeyGestureEvent.KEY_GESTURE_TYPE_TV_TRIGGER_BUG_REPORT
        ));
        if (!delegateBackGestureToShell()) {
            supportedGestures.add(KeyGestureEvent.KEY_GESTURE_TYPE_BACK);
        }
        if (enableTalkbackAndMagnifierKeyGestures()) {
            supportedGestures.add(KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_TALKBACK);
        }
@@ -3497,7 +3501,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                }
                break;
            case KeyGestureEvent.KEY_GESTURE_TYPE_BACK:
                if (complete) {
                if (!delegateBackGestureToShell() && complete) {
                    injectBackGesture(SystemClock.uptimeMillis());
                }
                break;
@@ -3722,9 +3726,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {

    @SuppressLint("MissingPermission")
    private void injectBackGesture(long downtime) {
        if (mActivityTaskManagerInternal.requestBackGesture()) {
            return;
        }
        // Create and inject down event
        KeyEvent downEvent = new KeyEvent(downtime, downtime, KeyEvent.ACTION_DOWN,
                KeyEvent.KEYCODE_BACK, 0 /* repeat */, 0 /* metaState */,
+0 −6
Original line number Diff line number Diff line
@@ -803,10 +803,4 @@ public abstract class ActivityTaskManagerInternal {

    /** Returns whether assist data is allowed. */
    public abstract boolean isAssistDataAllowed();

    /**
     * Delegate back gesture request from shell.
     * Returns true if the back gesture request was successful, false otherwise.
     */
    public abstract boolean requestBackGesture();
}
+0 −17
Original line number Diff line number Diff line
@@ -1902,18 +1902,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        }
    }

    @Override
    public void registerBackGestureDelegate(RemoteCallback requestObserver) {
        mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS,
                "registerBackGestureDelegate()");
        final long origId = Binder.clearCallingIdentity();
        try {
            mBackNavigationController.registerBackGestureDelegate(requestObserver);
        } finally {
            Binder.restoreCallingIdentity(origId);
        }
    }

    /**
     * Public API to check if the client is allowed to start an activity on specified display.
     *
@@ -7605,11 +7593,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        public boolean isAssistDataAllowed() {
            return ActivityTaskManagerService.this.isAssistDataAllowed();
        }

        @Override
        public boolean requestBackGesture() {
            return mBackNavigationController.requestBackGesture();
        }
    }

    /** Cache the return value for {@link #isPip2ExperimentEnabled()} */
Loading