Loading core/java/android/app/IActivityTaskManager.aidl +4 −3 Original line number Diff line number Diff line Loading @@ -65,12 +65,12 @@ import android.os.Debug; import android.os.IBinder; import android.os.IProgressListener; import android.os.ParcelFileDescriptor; import android.os.RemoteCallback; import android.os.StrictMode; import android.os.WorkSource; import android.service.voice.IVoiceInteractionSession; import android.view.IRecentsAnimationRunner; import android.view.IRemoteAnimationRunner; import android.view.IWindowFocusObserver; import android.view.RemoteAnimationDefinition; import android.view.RemoteAnimationAdapter; import android.window.IWindowOrganizerController; Loading Loading @@ -349,12 +349,13 @@ interface IActivityTaskManager { /** * Prepare the back navigation in the server. This setups the leashed for sysui to animate * the back gesture and returns the data needed for the animation. * @param focusObserver a remote callback to nofify shell when the focused window lost focus. * @param navigationObserver a remote callback to nofify shell when the focused window is gone, or an unexpected transition has happened on the navigation target. * @param adaptor a remote animation to be run for the back navigation plays the animation. * @return Returns the back navigation info. */ android.window.BackNavigationInfo startBackNavigation( in IWindowFocusObserver focusObserver, in BackAnimationAdapter adaptor); in RemoteCallback navigationObserver, in BackAnimationAdapter adaptor); /** * registers a callback to be invoked when the screen is captured. Loading libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +17 −18 Original line number Diff line number Diff line Loading @@ -29,8 +29,9 @@ import android.content.Context; import android.database.ContentObserver; import android.hardware.input.InputManager; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; Loading @@ -39,7 +40,6 @@ import android.provider.Settings.Global; import android.util.Log; import android.util.SparseArray; import android.view.IRemoteAnimationRunner; import android.view.IWindowFocusObserver; import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; Loading Loading @@ -121,23 +121,22 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont private IOnBackInvokedCallback mActiveCallback; @VisibleForTesting final IWindowFocusObserver mFocusObserver = new IWindowFocusObserver.Stub() { final RemoteCallback mNavigationObserver = new RemoteCallback( new RemoteCallback.OnResultListener() { @Override public void focusGained(IBinder inputToken) { } @Override public void focusLost(IBinder inputToken) { public void onResult(@Nullable Bundle result) { mShellExecutor.execute(() -> { if (!mBackGestureStarted || mPostCommitAnimationInProgress) { // If an uninterruptible animation is already in progress, we should ignore // this due to it may cause focus lost. (alpha = 0) // If an uninterruptible animation is already in progress, we should // ignore this due to it may cause focus lost. (alpha = 0) return; } ProtoLog.i(WM_SHELL_BACK_PREVIEW, "Target window lost focus."); ProtoLog.i(WM_SHELL_BACK_PREVIEW, "Navigation window gone."); setTriggerBack(false); onGestureFinished(false); }); } }; }); private final BackAnimationBackground mAnimationBackground; Loading Loading @@ -351,7 +350,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont try { mBackNavigationInfo = mActivityTaskManager.startBackNavigation( mFocusObserver, mEnableAnimations.get() ? mBackAnimationAdapter : null); mNavigationObserver, mEnableAnimations.get() ? mBackAnimationAdapter : null); onBackNavigationInfoReceived(mBackNavigationInfo); } catch (RemoteException remoteException) { Log.e(TAG, "Failed to initAnimation", remoteException); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +1 −4 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; Loading @@ -40,7 +39,6 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.RemoteCallback; import android.os.RemoteException; import android.provider.Settings; Loading Loading @@ -341,8 +339,7 @@ public class BackAnimationControllerTest extends ShellTestCase { mController.setTriggerBack(true); // Fake trigger back // In case the focus has been changed. IBinder token = mock(IBinder.class); mController.mFocusObserver.focusLost(token); mController.mNavigationObserver.sendResult(null); mShellExecutor.flushAll(); verify(mAnimatorCallback).onBackCancelled(); Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +3 −3 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ import android.os.Parcel; import android.os.PowerManager; import android.os.PowerManagerInternal; import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.StrictMode; Loading @@ -228,7 +229,6 @@ import android.util.SparseArray; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import android.view.IRecentsAnimationRunner; import android.view.IWindowFocusObserver; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; import android.view.WindowManager; Loading Loading @@ -1853,11 +1853,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override public BackNavigationInfo startBackNavigation( IWindowFocusObserver observer, BackAnimationAdapter adapter) { RemoteCallback navigationObserver, BackAnimationAdapter adapter) { mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS, "startBackNavigation()"); return mBackNavigationController.startBackNavigation(observer, adapter); return mBackNavigationController.startBackNavigation(navigationObserver, adapter); } /** Loading services/core/java/com/android/server/wm/AppTransitionController.java +1 −1 Original line number Diff line number Diff line Loading @@ -253,7 +253,7 @@ public class AppTransitionController { ArraySet<ActivityRecord> tmpOpenApps = mDisplayContent.mOpeningApps; ArraySet<ActivityRecord> tmpCloseApps = mDisplayContent.mClosingApps; if (mDisplayContent.mAtmService.mBackNavigationController.isWaitBackTransition()) { if (mDisplayContent.mAtmService.mBackNavigationController.isMonitoringTransition()) { tmpOpenApps = new ArraySet<>(mDisplayContent.mOpeningApps); tmpCloseApps = new ArraySet<>(mDisplayContent.mClosingApps); if (mDisplayContent.mAtmService.mBackNavigationController Loading Loading
core/java/android/app/IActivityTaskManager.aidl +4 −3 Original line number Diff line number Diff line Loading @@ -65,12 +65,12 @@ import android.os.Debug; import android.os.IBinder; import android.os.IProgressListener; import android.os.ParcelFileDescriptor; import android.os.RemoteCallback; import android.os.StrictMode; import android.os.WorkSource; import android.service.voice.IVoiceInteractionSession; import android.view.IRecentsAnimationRunner; import android.view.IRemoteAnimationRunner; import android.view.IWindowFocusObserver; import android.view.RemoteAnimationDefinition; import android.view.RemoteAnimationAdapter; import android.window.IWindowOrganizerController; Loading Loading @@ -349,12 +349,13 @@ interface IActivityTaskManager { /** * Prepare the back navigation in the server. This setups the leashed for sysui to animate * the back gesture and returns the data needed for the animation. * @param focusObserver a remote callback to nofify shell when the focused window lost focus. * @param navigationObserver a remote callback to nofify shell when the focused window is gone, or an unexpected transition has happened on the navigation target. * @param adaptor a remote animation to be run for the back navigation plays the animation. * @return Returns the back navigation info. */ android.window.BackNavigationInfo startBackNavigation( in IWindowFocusObserver focusObserver, in BackAnimationAdapter adaptor); in RemoteCallback navigationObserver, in BackAnimationAdapter adaptor); /** * registers a callback to be invoked when the screen is captured. Loading
libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +17 −18 Original line number Diff line number Diff line Loading @@ -29,8 +29,9 @@ import android.content.Context; import android.database.ContentObserver; import android.hardware.input.InputManager; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; Loading @@ -39,7 +40,6 @@ import android.provider.Settings.Global; import android.util.Log; import android.util.SparseArray; import android.view.IRemoteAnimationRunner; import android.view.IWindowFocusObserver; import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; Loading Loading @@ -121,23 +121,22 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont private IOnBackInvokedCallback mActiveCallback; @VisibleForTesting final IWindowFocusObserver mFocusObserver = new IWindowFocusObserver.Stub() { final RemoteCallback mNavigationObserver = new RemoteCallback( new RemoteCallback.OnResultListener() { @Override public void focusGained(IBinder inputToken) { } @Override public void focusLost(IBinder inputToken) { public void onResult(@Nullable Bundle result) { mShellExecutor.execute(() -> { if (!mBackGestureStarted || mPostCommitAnimationInProgress) { // If an uninterruptible animation is already in progress, we should ignore // this due to it may cause focus lost. (alpha = 0) // If an uninterruptible animation is already in progress, we should // ignore this due to it may cause focus lost. (alpha = 0) return; } ProtoLog.i(WM_SHELL_BACK_PREVIEW, "Target window lost focus."); ProtoLog.i(WM_SHELL_BACK_PREVIEW, "Navigation window gone."); setTriggerBack(false); onGestureFinished(false); }); } }; }); private final BackAnimationBackground mAnimationBackground; Loading Loading @@ -351,7 +350,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont try { mBackNavigationInfo = mActivityTaskManager.startBackNavigation( mFocusObserver, mEnableAnimations.get() ? mBackAnimationAdapter : null); mNavigationObserver, mEnableAnimations.get() ? mBackAnimationAdapter : null); onBackNavigationInfoReceived(mBackNavigationInfo); } catch (RemoteException remoteException) { Log.e(TAG, "Failed to initAnimation", remoteException); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +1 −4 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; Loading @@ -40,7 +39,6 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.RemoteCallback; import android.os.RemoteException; import android.provider.Settings; Loading Loading @@ -341,8 +339,7 @@ public class BackAnimationControllerTest extends ShellTestCase { mController.setTriggerBack(true); // Fake trigger back // In case the focus has been changed. IBinder token = mock(IBinder.class); mController.mFocusObserver.focusLost(token); mController.mNavigationObserver.sendResult(null); mShellExecutor.flushAll(); verify(mAnimatorCallback).onBackCancelled(); Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +3 −3 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ import android.os.Parcel; import android.os.PowerManager; import android.os.PowerManagerInternal; import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.StrictMode; Loading @@ -228,7 +229,6 @@ import android.util.SparseArray; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import android.view.IRecentsAnimationRunner; import android.view.IWindowFocusObserver; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; import android.view.WindowManager; Loading Loading @@ -1853,11 +1853,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override public BackNavigationInfo startBackNavigation( IWindowFocusObserver observer, BackAnimationAdapter adapter) { RemoteCallback navigationObserver, BackAnimationAdapter adapter) { mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS, "startBackNavigation()"); return mBackNavigationController.startBackNavigation(observer, adapter); return mBackNavigationController.startBackNavigation(navigationObserver, adapter); } /** Loading
services/core/java/com/android/server/wm/AppTransitionController.java +1 −1 Original line number Diff line number Diff line Loading @@ -253,7 +253,7 @@ public class AppTransitionController { ArraySet<ActivityRecord> tmpOpenApps = mDisplayContent.mOpeningApps; ArraySet<ActivityRecord> tmpCloseApps = mDisplayContent.mClosingApps; if (mDisplayContent.mAtmService.mBackNavigationController.isWaitBackTransition()) { if (mDisplayContent.mAtmService.mBackNavigationController.isMonitoringTransition()) { tmpOpenApps = new ArraySet<>(mDisplayContent.mOpeningApps); tmpCloseApps = new ArraySet<>(mDisplayContent.mClosingApps); if (mDisplayContent.mAtmService.mBackNavigationController Loading