Loading core/java/android/view/IRecentsAnimationController.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -59,4 +59,9 @@ interface IRecentsAnimationController { * taken. */ void setAnimationTargetsBehindSystemBars(boolean behindSystemBars); /** * Informs the system that the primary split-screen stack should be minimized. */ void setSplitScreenMinimized(boolean minimized); } packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java +8 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,14 @@ public class RecentsAnimationControllerCompat { } } public void setSplitScreenMinimized(boolean minimized) { try { mAnimationController.setSplitScreenMinimized(minimized); } catch (RemoteException e) { Log.e(TAG, "Failed to set minimize dock", e); } } public void finish(boolean toHome) { try { mAnimationController.finish(toHome); Loading services/core/java/com/android/server/am/RecentsAnimation.java +5 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,11 @@ class RecentsAnimation implements RecentsAnimationCallbacks { // No reason to wait for the pausing activity in this case, as the hiding of // surfaces needs to be done immediately. mWindowManager.executeAppTransition(); // After reordering the stacks, reset the minimized state. At this point, either // home is now top-most and we will stay minimized (if in split-screen), or we // will have returned to the app, and the minimized state should be reset mWindowManager.checkSplitScreenMinimizedChanged(true /* animate */); } finally { mWindowManager.continueSurfaceLayout(); Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); Loading services/core/java/com/android/server/wm/DockedStackDividerController.java +4 −1 Original line number Diff line number Diff line Loading @@ -666,13 +666,16 @@ public class DockedStackDividerController { } final TaskStack topSecondaryStack = mDisplayContent.getTopStackInWindowingMode( WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); final RecentsAnimationController recentsAnim = mService.getRecentsAnimationController(); final boolean minimizedForRecentsAnimation = recentsAnim != null && recentsAnim.isSplitScreenMinimized(); boolean homeVisible = homeTask.getTopVisibleAppToken() != null; if (homeVisible && topSecondaryStack != null) { // Home should only be considered visible if it is greater or equal to the top secondary // stack in terms of z-order. homeVisible = homeStack.compareTo(topSecondaryStack) >= 0; } setMinimizedDockedStack(homeVisible, animate); setMinimizedDockedStack(homeVisible || minimizedForRecentsAnimation, animate); } private boolean isWithinDisplay(Task task) { Loading services/core/java/com/android/server/wm/RecentsAnimationController.java +32 −6 Original line number Diff line number Diff line Loading @@ -98,12 +98,16 @@ public class RecentsAnimationController implements DeathRecipient { private boolean mPendingStart = true; // Set when the animation has been canceled private boolean mCanceled = false; private boolean mCanceled; // Whether or not the input consumer is enabled. The input consumer must be both registered and // enabled for it to start intercepting touch events. private boolean mInputConsumerEnabled; // Whether or not the recents animation should cause the primary split-screen stack to be // minimized private boolean mSplitScreenMinimized; private Rect mTmpRect = new Rect(); public interface RecentsAnimationCallbacks { Loading @@ -116,7 +120,7 @@ public class RecentsAnimationController implements DeathRecipient { @Override public TaskSnapshot screenshotTask(int taskId) { if (DEBUG) Log.d(TAG, "screenshotTask(" + taskId + "): mCanceled=" + mCanceled); long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { Loading Loading @@ -145,7 +149,7 @@ public class RecentsAnimationController implements DeathRecipient { @Override public void finish(boolean moveHomeToTop) { if (DEBUG) Log.d(TAG, "finish(" + moveHomeToTop + "): mCanceled=" + mCanceled); long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { Loading @@ -166,7 +170,7 @@ public class RecentsAnimationController implements DeathRecipient { @Override public void setAnimationTargetsBehindSystemBars(boolean behindSystemBars) throws RemoteException { long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { for (int i = mPendingAnimations.size() - 1; i >= 0; i--) { Loading @@ -183,7 +187,7 @@ public class RecentsAnimationController implements DeathRecipient { public void setInputConsumerEnabled(boolean enabled) { if (DEBUG) Log.d(TAG, "setInputConsumerEnabled(" + enabled + "): mCanceled=" + mCanceled); long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { Loading @@ -198,6 +202,23 @@ public class RecentsAnimationController implements DeathRecipient { Binder.restoreCallingIdentity(token); } } @Override public void setSplitScreenMinimized(boolean minimized) { final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { return; } mSplitScreenMinimized = minimized; mService.checkSplitScreenMinimizedChanged(true /* animate */); } } finally { Binder.restoreCallingIdentity(token); } } }; /** Loading Loading @@ -330,6 +351,7 @@ public class RecentsAnimationController implements DeathRecipient { Slog.e(TAG, "Failed to cancel recents animation", e); } } // Clean up and return to the previous app // Don't hold the WM lock here as it calls back to AM/RecentsAnimation mCallbacks.onAnimationFinished(reorderMode); Loading @@ -350,7 +372,7 @@ public class RecentsAnimationController implements DeathRecipient { mPendingAnimations.clear(); mRunner.asBinder().unlinkToDeath(this, 0); // Clear associated input consumers mService.mInputMonitor.updateInputWindowsLw(true /*force*/); mService.destroyInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION); } Loading @@ -375,6 +397,10 @@ public class RecentsAnimationController implements DeathRecipient { } } boolean isSplitScreenMinimized() { return mSplitScreenMinimized; } boolean isWallpaperVisible(WindowState w) { return w != null && w.mAppToken != null && mHomeAppToken == w.mAppToken && isHomeAppOverWallpaper(); Loading Loading
core/java/android/view/IRecentsAnimationController.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -59,4 +59,9 @@ interface IRecentsAnimationController { * taken. */ void setAnimationTargetsBehindSystemBars(boolean behindSystemBars); /** * Informs the system that the primary split-screen stack should be minimized. */ void setSplitScreenMinimized(boolean minimized); }
packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java +8 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,14 @@ public class RecentsAnimationControllerCompat { } } public void setSplitScreenMinimized(boolean minimized) { try { mAnimationController.setSplitScreenMinimized(minimized); } catch (RemoteException e) { Log.e(TAG, "Failed to set minimize dock", e); } } public void finish(boolean toHome) { try { mAnimationController.finish(toHome); Loading
services/core/java/com/android/server/am/RecentsAnimation.java +5 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,11 @@ class RecentsAnimation implements RecentsAnimationCallbacks { // No reason to wait for the pausing activity in this case, as the hiding of // surfaces needs to be done immediately. mWindowManager.executeAppTransition(); // After reordering the stacks, reset the minimized state. At this point, either // home is now top-most and we will stay minimized (if in split-screen), or we // will have returned to the app, and the minimized state should be reset mWindowManager.checkSplitScreenMinimizedChanged(true /* animate */); } finally { mWindowManager.continueSurfaceLayout(); Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); Loading
services/core/java/com/android/server/wm/DockedStackDividerController.java +4 −1 Original line number Diff line number Diff line Loading @@ -666,13 +666,16 @@ public class DockedStackDividerController { } final TaskStack topSecondaryStack = mDisplayContent.getTopStackInWindowingMode( WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); final RecentsAnimationController recentsAnim = mService.getRecentsAnimationController(); final boolean minimizedForRecentsAnimation = recentsAnim != null && recentsAnim.isSplitScreenMinimized(); boolean homeVisible = homeTask.getTopVisibleAppToken() != null; if (homeVisible && topSecondaryStack != null) { // Home should only be considered visible if it is greater or equal to the top secondary // stack in terms of z-order. homeVisible = homeStack.compareTo(topSecondaryStack) >= 0; } setMinimizedDockedStack(homeVisible, animate); setMinimizedDockedStack(homeVisible || minimizedForRecentsAnimation, animate); } private boolean isWithinDisplay(Task task) { Loading
services/core/java/com/android/server/wm/RecentsAnimationController.java +32 −6 Original line number Diff line number Diff line Loading @@ -98,12 +98,16 @@ public class RecentsAnimationController implements DeathRecipient { private boolean mPendingStart = true; // Set when the animation has been canceled private boolean mCanceled = false; private boolean mCanceled; // Whether or not the input consumer is enabled. The input consumer must be both registered and // enabled for it to start intercepting touch events. private boolean mInputConsumerEnabled; // Whether or not the recents animation should cause the primary split-screen stack to be // minimized private boolean mSplitScreenMinimized; private Rect mTmpRect = new Rect(); public interface RecentsAnimationCallbacks { Loading @@ -116,7 +120,7 @@ public class RecentsAnimationController implements DeathRecipient { @Override public TaskSnapshot screenshotTask(int taskId) { if (DEBUG) Log.d(TAG, "screenshotTask(" + taskId + "): mCanceled=" + mCanceled); long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { Loading Loading @@ -145,7 +149,7 @@ public class RecentsAnimationController implements DeathRecipient { @Override public void finish(boolean moveHomeToTop) { if (DEBUG) Log.d(TAG, "finish(" + moveHomeToTop + "): mCanceled=" + mCanceled); long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { Loading @@ -166,7 +170,7 @@ public class RecentsAnimationController implements DeathRecipient { @Override public void setAnimationTargetsBehindSystemBars(boolean behindSystemBars) throws RemoteException { long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { for (int i = mPendingAnimations.size() - 1; i >= 0; i--) { Loading @@ -183,7 +187,7 @@ public class RecentsAnimationController implements DeathRecipient { public void setInputConsumerEnabled(boolean enabled) { if (DEBUG) Log.d(TAG, "setInputConsumerEnabled(" + enabled + "): mCanceled=" + mCanceled); long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { Loading @@ -198,6 +202,23 @@ public class RecentsAnimationController implements DeathRecipient { Binder.restoreCallingIdentity(token); } } @Override public void setSplitScreenMinimized(boolean minimized) { final long token = Binder.clearCallingIdentity(); try { synchronized (mService.getWindowManagerLock()) { if (mCanceled) { return; } mSplitScreenMinimized = minimized; mService.checkSplitScreenMinimizedChanged(true /* animate */); } } finally { Binder.restoreCallingIdentity(token); } } }; /** Loading Loading @@ -330,6 +351,7 @@ public class RecentsAnimationController implements DeathRecipient { Slog.e(TAG, "Failed to cancel recents animation", e); } } // Clean up and return to the previous app // Don't hold the WM lock here as it calls back to AM/RecentsAnimation mCallbacks.onAnimationFinished(reorderMode); Loading @@ -350,7 +372,7 @@ public class RecentsAnimationController implements DeathRecipient { mPendingAnimations.clear(); mRunner.asBinder().unlinkToDeath(this, 0); // Clear associated input consumers mService.mInputMonitor.updateInputWindowsLw(true /*force*/); mService.destroyInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION); } Loading @@ -375,6 +397,10 @@ public class RecentsAnimationController implements DeathRecipient { } } boolean isSplitScreenMinimized() { return mSplitScreenMinimized; } boolean isWallpaperVisible(WindowState w) { return w != null && w.mAppToken != null && mHomeAppToken == w.mAppToken && isHomeAppOverWallpaper(); Loading