Loading core/java/android/app/IActivityTaskManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -368,6 +368,11 @@ 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. * Loading core/java/android/window/flags/windowing_frontend.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -525,3 +525,14 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "delegate_back_gesture_to_shell" namespace: "windowing_frontend" description: "Delegate back gesture event to back animation controller." bug: "394599430" is_fixed_read_only: true metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +27 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont this::createExternalInterface, this); mShellCommandHandler.addDumpCallback(this::dump, this); mShellController.addConfigurationChangeListener(this); registerBackGestureDelegate(); } public BackAnimation getBackAnimationImpl() { Loading Loading @@ -1144,6 +1145,32 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont mBackAnimationAdapter = new BackAnimationAdapter(runner); } private void registerBackGestureDelegate() { if (!Flags.delegateBackGestureToShell()) { return; } final RemoteCallback requestBackMonitor = new RemoteCallback( new RemoteCallback.OnResultListener() { @Override public void onResult(@Nullable Bundle result) { mShellExecutor.execute(() -> { if (mBackGestureStarted) { Log.w(TAG, "Back gesture is running, ignore request"); return; } onMotionEvent(0, 0, KeyEvent.ACTION_DOWN, EDGE_NONE); setTriggerBack(true); onMotionEvent(0, 0, KeyEvent.ACTION_UP, EDGE_NONE); }); } }); try { mActivityTaskManager.registerBackGestureDelegate(requestBackMonitor); } catch (RemoteException remoteException) { Log.w(TAG, "Failed register back gesture request ", remoteException); } } /** * Description of current BackAnimationController state. */ Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -4633,6 +4633,9 @@ 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 */, Loading services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +6 −0 Original line number Diff line number Diff line Loading @@ -803,4 +803,10 @@ 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(); } Loading
core/java/android/app/IActivityTaskManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -368,6 +368,11 @@ 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. * Loading
core/java/android/window/flags/windowing_frontend.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -525,3 +525,14 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "delegate_back_gesture_to_shell" namespace: "windowing_frontend" description: "Delegate back gesture event to back animation controller." bug: "394599430" is_fixed_read_only: true metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file
libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +27 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont this::createExternalInterface, this); mShellCommandHandler.addDumpCallback(this::dump, this); mShellController.addConfigurationChangeListener(this); registerBackGestureDelegate(); } public BackAnimation getBackAnimationImpl() { Loading Loading @@ -1144,6 +1145,32 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont mBackAnimationAdapter = new BackAnimationAdapter(runner); } private void registerBackGestureDelegate() { if (!Flags.delegateBackGestureToShell()) { return; } final RemoteCallback requestBackMonitor = new RemoteCallback( new RemoteCallback.OnResultListener() { @Override public void onResult(@Nullable Bundle result) { mShellExecutor.execute(() -> { if (mBackGestureStarted) { Log.w(TAG, "Back gesture is running, ignore request"); return; } onMotionEvent(0, 0, KeyEvent.ACTION_DOWN, EDGE_NONE); setTriggerBack(true); onMotionEvent(0, 0, KeyEvent.ACTION_UP, EDGE_NONE); }); } }); try { mActivityTaskManager.registerBackGestureDelegate(requestBackMonitor); } catch (RemoteException remoteException) { Log.w(TAG, "Failed register back gesture request ", remoteException); } } /** * Description of current BackAnimationController state. */ Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -4633,6 +4633,9 @@ 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 */, Loading
services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +6 −0 Original line number Diff line number Diff line Loading @@ -803,4 +803,10 @@ 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(); }