Loading core/java/android/view/WindowManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,11 @@ public interface WindowManager extends ViewManager { * @hide */ int TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION = 14; /** * Lock task mode is starting. * @hide */ int TRANSIT_START_LOCK_TASK_MODE = 15; /** * The first slot for custom transition types. Callers (like Shell) can make use of custom Loading Loading @@ -429,6 +434,7 @@ public interface WindowManager extends ViewManager { TRANSIT_SLEEP, TRANSIT_PREPARE_BACK_NAVIGATION, TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION, TRANSIT_START_LOCK_TASK_MODE, TRANSIT_FIRST_CUSTOM }) @Retention(RetentionPolicy.SOURCE) Loading services/core/java/com/android/server/wm/ActivityClientController.java +24 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import static android.service.voice.VoiceInteractionSession.SHOW_SOURCE_APPLICAT import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_START_LOCK_TASK_MODE; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; Loading Loading @@ -1426,9 +1427,31 @@ class ActivityClientController extends IActivityClientController.Stub { synchronized (mGlobalLock) { final ActivityRecord r = ActivityRecord.forTokenLocked(token); if (r == null) return; if (DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_ENTERPRISE_BUGFIX.isTrue() && mService.getTransitionController().isShellTransitionsEnabled()) { final Task task = r.getTask(); final Transition transition = new Transition(TRANSIT_START_LOCK_TASK_MODE, 0 /* flags */, mService.getTransitionController(), mService.mWindowManager.mSyncEngine); mService.getTransitionController().startCollectOrQueue(transition, (deferred) -> { final ActionChain chain = mService.mChainTracker.start( "startLockTaskModeByToken", transition); mService.getTransitionController().requestStartTransition(transition, task, null /* remoteTransition */, null /* displayChange */); chain.collect(task); mService.startLockTaskMode(task, false /* isSystemCaller */); transition.setReady(task, true); mService.mChainTracker.end(); }); } else { mService.startLockTaskMode(r.getTask(), false /* isSystemCaller */); } } } @Override public void stopLockTaskModeByToken(IBinder token) { Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +26 −4 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_PIP; import static android.view.WindowManager.TRANSIT_START_LOCK_TASK_MODE; import static android.view.WindowManager.TRANSIT_TO_FRONT; import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT; import static android.window.DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_PIP; Loading Loading @@ -252,6 +253,7 @@ import android.view.RemoteAnimationDefinition; import android.view.WindowManager; import android.window.BackAnimationAdapter; import android.window.BackNavigationInfo; import android.window.DesktopExperienceFlags; import android.window.ITaskSnapshotManager; import android.window.IWindowOrganizerController; import android.window.SplashScreenView.SplashScreenViewParcelable; Loading Loading @@ -2687,10 +2689,30 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { if (task == null) { return; } // When starting lock task mode the root task must be in front and focused if (DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_ENTERPRISE_BUGFIX.isTrue() && getTransitionController().isShellTransitionsEnabled()) { final Transition transition = new Transition(TRANSIT_START_LOCK_TASK_MODE, 0 /* flags */, getTransitionController(), mWindowManager.mSyncEngine); getTransitionController().startCollectOrQueue(transition, (deferred) -> { final ActionChain chain = mChainTracker.start( "startSystemLockTaskMOde", transition); getTransitionController().requestStartTransition(transition, task, null /* remoteTransition */, null /* displayChange */); chain.collect(task); // When starting lock task mode the root task must be in front // and focused task.getRootTask().moveToFront("startSystemLockTaskMode"); startLockTaskMode(task, true /* isSystemCaller */); transition.setReady(task, true); mChainTracker.end(); }); } else { task.getRootTask().moveToFront("startSystemLockTaskMode"); startLockTaskMode(task, true /* isSystemCaller */); } } } finally { Binder.restoreCallingIdentity(ident); Loading services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +27 −2 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_START_LOCK_TASK_MODE; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; Loading Loading @@ -903,7 +904,31 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { || (task.mLockTaskAuth == LOCK_TASK_AUTH_ALLOWLISTED && lockTaskController.getLockTaskModeState() == LOCK_TASK_MODE_LOCKED)) { lockTaskController.startLockTaskMode(task, false, 0 /* blank UID */); if (DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_ENTERPRISE_BUGFIX.isTrue() && task.mTransitionController.isShellTransitionsEnabled()) { final Transition transition = new Transition(TRANSIT_START_LOCK_TASK_MODE, 0 /* flags */, task.mTransitionController, mWindowManager.mSyncEngine); task.mTransitionController.startCollectOrQueue(transition, (deferred) -> { final ActionChain chain = mService.mChainTracker.start( "realStartActivity", transition); task.mTransitionController.requestStartTransition(transition, task, null /* remoteTransition */, null /* displayChange */); chain.collect(task); // When starting lock task mode the root task must be in front and // focused lockTaskController.startLockTaskMode(task, false, 0 /* blank UID */); transition.setReady(task, true); mService.mChainTracker.end(); }); } else { lockTaskController.startLockTaskMode(task, false, 0 /* blank UID */); } } final RemoteException e = tryRealStartActivityInner( Loading services/core/java/com/android/server/wm/LockTaskController.java +1 −2 Original line number Diff line number Diff line Loading @@ -679,7 +679,6 @@ public class LockTaskController { stopLockTaskMode(/* task= */ null, /* stopAppPinning= */ true, callingUid); } } // When a task is locked, dismiss the root pinned task if it exists mSupervisor.mRootWindowContainer.removeRootTasksInWindowingModes(WINDOWING_MODE_PINNED); Loading Loading
core/java/android/view/WindowManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,11 @@ public interface WindowManager extends ViewManager { * @hide */ int TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION = 14; /** * Lock task mode is starting. * @hide */ int TRANSIT_START_LOCK_TASK_MODE = 15; /** * The first slot for custom transition types. Callers (like Shell) can make use of custom Loading Loading @@ -429,6 +434,7 @@ public interface WindowManager extends ViewManager { TRANSIT_SLEEP, TRANSIT_PREPARE_BACK_NAVIGATION, TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION, TRANSIT_START_LOCK_TASK_MODE, TRANSIT_FIRST_CUSTOM }) @Retention(RetentionPolicy.SOURCE) Loading
services/core/java/com/android/server/wm/ActivityClientController.java +24 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import static android.service.voice.VoiceInteractionSession.SHOW_SOURCE_APPLICAT import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_START_LOCK_TASK_MODE; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; Loading Loading @@ -1426,9 +1427,31 @@ class ActivityClientController extends IActivityClientController.Stub { synchronized (mGlobalLock) { final ActivityRecord r = ActivityRecord.forTokenLocked(token); if (r == null) return; if (DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_ENTERPRISE_BUGFIX.isTrue() && mService.getTransitionController().isShellTransitionsEnabled()) { final Task task = r.getTask(); final Transition transition = new Transition(TRANSIT_START_LOCK_TASK_MODE, 0 /* flags */, mService.getTransitionController(), mService.mWindowManager.mSyncEngine); mService.getTransitionController().startCollectOrQueue(transition, (deferred) -> { final ActionChain chain = mService.mChainTracker.start( "startLockTaskModeByToken", transition); mService.getTransitionController().requestStartTransition(transition, task, null /* remoteTransition */, null /* displayChange */); chain.collect(task); mService.startLockTaskMode(task, false /* isSystemCaller */); transition.setReady(task, true); mService.mChainTracker.end(); }); } else { mService.startLockTaskMode(r.getTask(), false /* isSystemCaller */); } } } @Override public void stopLockTaskModeByToken(IBinder token) { Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +26 −4 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_PIP; import static android.view.WindowManager.TRANSIT_START_LOCK_TASK_MODE; import static android.view.WindowManager.TRANSIT_TO_FRONT; import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT; import static android.window.DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_PIP; Loading Loading @@ -252,6 +253,7 @@ import android.view.RemoteAnimationDefinition; import android.view.WindowManager; import android.window.BackAnimationAdapter; import android.window.BackNavigationInfo; import android.window.DesktopExperienceFlags; import android.window.ITaskSnapshotManager; import android.window.IWindowOrganizerController; import android.window.SplashScreenView.SplashScreenViewParcelable; Loading Loading @@ -2687,10 +2689,30 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { if (task == null) { return; } // When starting lock task mode the root task must be in front and focused if (DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_ENTERPRISE_BUGFIX.isTrue() && getTransitionController().isShellTransitionsEnabled()) { final Transition transition = new Transition(TRANSIT_START_LOCK_TASK_MODE, 0 /* flags */, getTransitionController(), mWindowManager.mSyncEngine); getTransitionController().startCollectOrQueue(transition, (deferred) -> { final ActionChain chain = mChainTracker.start( "startSystemLockTaskMOde", transition); getTransitionController().requestStartTransition(transition, task, null /* remoteTransition */, null /* displayChange */); chain.collect(task); // When starting lock task mode the root task must be in front // and focused task.getRootTask().moveToFront("startSystemLockTaskMode"); startLockTaskMode(task, true /* isSystemCaller */); transition.setReady(task, true); mChainTracker.end(); }); } else { task.getRootTask().moveToFront("startSystemLockTaskMode"); startLockTaskMode(task, true /* isSystemCaller */); } } } finally { Binder.restoreCallingIdentity(ident); Loading
services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +27 −2 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_START_LOCK_TASK_MODE; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; Loading Loading @@ -903,7 +904,31 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { || (task.mLockTaskAuth == LOCK_TASK_AUTH_ALLOWLISTED && lockTaskController.getLockTaskModeState() == LOCK_TASK_MODE_LOCKED)) { lockTaskController.startLockTaskMode(task, false, 0 /* blank UID */); if (DesktopExperienceFlags.ENABLE_DESKTOP_WINDOWING_ENTERPRISE_BUGFIX.isTrue() && task.mTransitionController.isShellTransitionsEnabled()) { final Transition transition = new Transition(TRANSIT_START_LOCK_TASK_MODE, 0 /* flags */, task.mTransitionController, mWindowManager.mSyncEngine); task.mTransitionController.startCollectOrQueue(transition, (deferred) -> { final ActionChain chain = mService.mChainTracker.start( "realStartActivity", transition); task.mTransitionController.requestStartTransition(transition, task, null /* remoteTransition */, null /* displayChange */); chain.collect(task); // When starting lock task mode the root task must be in front and // focused lockTaskController.startLockTaskMode(task, false, 0 /* blank UID */); transition.setReady(task, true); mService.mChainTracker.end(); }); } else { lockTaskController.startLockTaskMode(task, false, 0 /* blank UID */); } } final RemoteException e = tryRealStartActivityInner( Loading
services/core/java/com/android/server/wm/LockTaskController.java +1 −2 Original line number Diff line number Diff line Loading @@ -679,7 +679,6 @@ public class LockTaskController { stopLockTaskMode(/* task= */ null, /* stopAppPinning= */ true, callingUid); } } // When a task is locked, dismiss the root pinned task if it exists mSupervisor.mRootWindowContainer.removeRootTasksInWindowingModes(WINDOWING_MODE_PINNED); Loading