Loading core/java/android/window/TaskOrganizerTaskEmbedder.java +1 −3 Original line number Diff line number Diff line Loading @@ -254,9 +254,7 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder { mTaskToken = taskInfo.token; mTaskLeash = mTaskToken.getLeash(); mTransaction.reparent(mTaskLeash, mSurfaceControl) .show(mTaskLeash) .show(mSurfaceControl) .apply(); .show(mSurfaceControl).apply(); if (mPendingNotifyBoundsChanged) { // TODO: Either defer show or hide and synchronize show with the resize notifyBoundsChanged(); Loading packages/SystemUI/src/com/android/systemui/pip/PipAnimationController.java +0 −2 Original line number Diff line number Diff line Loading @@ -319,7 +319,6 @@ public class PipAnimationController { getSurfaceTransactionHelper() .crop(tx, leash, getDestinationBounds()) .round(tx, leash, shouldApplyCornerRadius()); tx.show(leash); tx.apply(); } }; Loading Loading @@ -360,7 +359,6 @@ public class PipAnimationController { getSurfaceTransactionHelper() .alpha(tx, leash, 1f) .round(tx, leash, shouldApplyCornerRadius()); tx.show(leash); tx.apply(); } Loading packages/SystemUI/tests/src/com/android/systemui/pip/PipAnimationControllerTest.java +1 −4 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class PipAnimationControllerTest extends SysuiTestCase { private PipAnimationController mPipAnimationController; @Mock private SurfaceControl mLeash; @Mock Loading @@ -60,10 +61,6 @@ public class PipAnimationControllerTest extends SysuiTestCase { public void setUp() throws Exception { mPipAnimationController = new PipAnimationController( mContext, new PipSurfaceTransactionHelper(mContext)); mLeash = new SurfaceControl.Builder() .setContainerLayer() .setName("FakeLeash") .build(); MockitoAnnotations.initMocks(this); } Loading services/core/java/com/android/server/wm/Task.java +0 −11 Original line number Diff line number Diff line Loading @@ -4131,17 +4131,6 @@ class Task extends WindowContainer<WindowContainer> { // Let the old organizer know it has lost control. sendTaskVanished(); mTaskOrganizer = organizer; // If the task is not yet visible when it is added to the task organizer, then we should // hide it to allow the task organizer to show it when it is properly reparented. We skip // this for tasks created by the organizer because they can synchronously update the leash // before new children are added to the task. if (!mCreatedByOrganizer && organizer != null && (!getHasBeenVisible() || !hasVisibleChildren())) { getPendingTransaction().hide(getSurfaceControl()); commitPendingTransaction(); } sendTaskAppeared(); onTaskOrganizerChanged(); return true; Loading services/core/java/com/android/server/wm/TaskOrganizerController.java +29 −107 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static com.android.server.wm.WindowOrganizerController.CONTROLLABLE_CONFI import static com.android.server.wm.WindowOrganizerController.CONTROLLABLE_WINDOW_CONFIGS; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.WindowConfiguration; import android.content.Intent; Loading @@ -39,7 +38,6 @@ import android.window.ITaskOrganizer; import android.window.ITaskOrganizerController; import android.window.WindowContainerToken; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import java.io.PrintWriter; Loading @@ -48,7 +46,6 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.WeakHashMap; import java.util.function.Consumer; /** * Stores the TaskOrganizers associated with a given windowing mode and Loading Loading @@ -84,95 +81,17 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } } } } /** * A wrapper class around ITaskOrganizer to ensure that the calls are made in the right * lifecycle order since we may be updating the visibility of task surface controls in a pending * transaction before they are presented to the task org. */ private class TaskOrganizerCallbacks { final WindowManagerService mService; final ITaskOrganizer mTaskOrganizer; final Consumer<Runnable> mDeferTaskOrgCallbacksConsumer; TaskOrganizerCallbacks(WindowManagerService wm, ITaskOrganizer taskOrg, Consumer<Runnable> deferTaskOrgCallbacksConsumer) { mService = wm; mDeferTaskOrgCallbacksConsumer = deferTaskOrgCallbacksConsumer; mTaskOrganizer = taskOrg; } IBinder getBinder() { return mTaskOrganizer.asBinder(); } void onTaskAppeared(Task task) { final RunningTaskInfo taskInfo = task.getTaskInfo(); mDeferTaskOrgCallbacksConsumer.accept(() -> { try { mTaskOrganizer.onTaskAppeared(taskInfo); } catch (RemoteException e) { Slog.e(TAG, "Exception sending onTaskAppeared callback", e); } }); } void onTaskVanished(Task task) { final RunningTaskInfo taskInfo = task.getTaskInfo(); mDeferTaskOrgCallbacksConsumer.accept(() -> { try { mTaskOrganizer.onTaskVanished(taskInfo); } catch (RemoteException e) { Slog.e(TAG, "Exception sending onTaskVanished callback", e); } }); } void onTaskInfoChanged(Task task, ActivityManager.RunningTaskInfo taskInfo) { mDeferTaskOrgCallbacksConsumer.accept(() -> { if (!task.isOrganized()) { // This is safe to ignore if the task is no longer organized return; } try { mTaskOrganizer.onTaskInfoChanged(taskInfo); } catch (RemoteException e) { Slog.e(TAG, "Exception sending onTaskInfoChanged callback", e); } }); } void onBackPressedOnTaskRoot(Task task) { mDeferTaskOrgCallbacksConsumer.accept(() -> { if (!task.isOrganized()) { // This is safe to ignore if the task is no longer organized return; } try { mTaskOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending onBackPressedOnTaskRoot callback", e); } }); } } }; private class TaskOrganizerState { private final TaskOrganizerCallbacks mOrganizer; private final ITaskOrganizer mOrganizer; private final DeathRecipient mDeathRecipient; private final ArrayList<Task> mOrganizedTasks = new ArrayList<>(); private final int mUid; private boolean mInterceptBackPressedOnTaskRoot; TaskOrganizerState(ITaskOrganizer organizer, int uid) { final Consumer<Runnable> deferTaskOrgCallbacksConsumer = mDeferTaskOrgCallbacksConsumer != null ? mDeferTaskOrgCallbacksConsumer : mService.mWindowManager.mAnimator::addAfterPrepareSurfacesRunnable; mOrganizer = new TaskOrganizerCallbacks(mService.mWindowManager, organizer, deferTaskOrgCallbacksConsumer); mOrganizer = organizer; mDeathRecipient = new DeathRecipient(organizer); try { organizer.asBinder().linkToDeath(mDeathRecipient, 0); Loading @@ -188,18 +107,26 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { void addTask(Task t) { mOrganizedTasks.add(t); mOrganizer.onTaskAppeared(t); try { mOrganizer.onTaskAppeared(t.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending taskAppeared callback" + e); } } void removeTask(Task t) { try { mOrganizer.onTaskVanished(t.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending taskVanished callback" + e); } mOrganizedTasks.remove(t); mOrganizer.onTaskVanished(t); } void dispose() { releaseTasks(); for (int i = mTaskOrganizersForWindowingMode.size() - 1; i >= 0; --i) { mTaskOrganizersForWindowingMode.valueAt(i).remove(mOrganizer.getBinder()); mTaskOrganizersForWindowingMode.valueAt(i).remove(mOrganizer.asBinder()); } } Loading @@ -212,7 +139,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } void unlinkDeath() { mOrganizer.getBinder().unlinkToDeath(mDeathRecipient, 0); mOrganizer.asBinder().unlinkToDeath(mDeathRecipient, 0); } } Loading @@ -222,10 +149,9 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { private final WeakHashMap<Task, RunningTaskInfo> mLastSentTaskInfos = new WeakHashMap<>(); private final ArrayList<Task> mPendingTaskInfoChanges = new ArrayList<>(); private final ActivityTaskManagerService mService; final ActivityTaskManagerService mService; private RunningTaskInfo mTmpTaskInfo; private Consumer<Runnable> mDeferTaskOrgCallbacksConsumer; RunningTaskInfo mTmpTaskInfo; TaskOrganizerController(ActivityTaskManagerService atm) { mService = atm; Loading @@ -236,15 +162,6 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { mService.mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, func); } /** * Specifies the consumer to run to defer the task org callbacks. Can be overridden while * testing to allow the callbacks to be sent synchronously. */ @VisibleForTesting public void setDeferTaskOrgCallbacksConsumer(Consumer<Runnable> consumer) { mDeferTaskOrgCallbacksConsumer = consumer; } /** * Register a TaskOrganizer to manage tasks as they enter the given windowing mode. * If there was already a TaskOrganizer for this windowing mode it will be evicted Loading Loading @@ -336,7 +253,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { if (state == null) { return null; } return state.mOrganizer.mTaskOrganizer; return state.mOrganizer; } void onTaskAppeared(ITaskOrganizer organizer, Task task) { Loading Loading @@ -441,10 +358,11 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { // change. mTmpTaskInfo = null; if (task.isOrganized()) { final TaskOrganizerState state = mTaskOrganizerStates.get( task.mTaskOrganizer.asBinder()); state.mOrganizer.onTaskInfoChanged(task, newInfo); if (task.mTaskOrganizer != null) { try { task.mTaskOrganizer.onTaskInfoChanged(newInfo); } catch (RemoteException e) { } } } Loading Loading @@ -603,7 +521,11 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { return false; } state.mOrganizer.onBackPressedOnTaskRoot(task); try { state.mOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending interceptBackPressedOnTaskRoot callback" + e); } return true; } Loading @@ -620,7 +542,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { final TaskOrganizerState state = mTaskOrganizerStates.get(taskOrgs.get(j)); final ArrayList<Task> tasks = state.mOrganizedTasks; pw.print(innerPrefix + " "); pw.println(state.mOrganizer.mTaskOrganizer + " uid=" + state.mUid + ":"); pw.println(state.mOrganizer + " uid=" + state.mUid + ":"); for (int k = 0; k < tasks.size(); k++) { pw.println(innerPrefix + " " + tasks.get(k)); } Loading Loading
core/java/android/window/TaskOrganizerTaskEmbedder.java +1 −3 Original line number Diff line number Diff line Loading @@ -254,9 +254,7 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder { mTaskToken = taskInfo.token; mTaskLeash = mTaskToken.getLeash(); mTransaction.reparent(mTaskLeash, mSurfaceControl) .show(mTaskLeash) .show(mSurfaceControl) .apply(); .show(mSurfaceControl).apply(); if (mPendingNotifyBoundsChanged) { // TODO: Either defer show or hide and synchronize show with the resize notifyBoundsChanged(); Loading
packages/SystemUI/src/com/android/systemui/pip/PipAnimationController.java +0 −2 Original line number Diff line number Diff line Loading @@ -319,7 +319,6 @@ public class PipAnimationController { getSurfaceTransactionHelper() .crop(tx, leash, getDestinationBounds()) .round(tx, leash, shouldApplyCornerRadius()); tx.show(leash); tx.apply(); } }; Loading Loading @@ -360,7 +359,6 @@ public class PipAnimationController { getSurfaceTransactionHelper() .alpha(tx, leash, 1f) .round(tx, leash, shouldApplyCornerRadius()); tx.show(leash); tx.apply(); } Loading
packages/SystemUI/tests/src/com/android/systemui/pip/PipAnimationControllerTest.java +1 −4 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class PipAnimationControllerTest extends SysuiTestCase { private PipAnimationController mPipAnimationController; @Mock private SurfaceControl mLeash; @Mock Loading @@ -60,10 +61,6 @@ public class PipAnimationControllerTest extends SysuiTestCase { public void setUp() throws Exception { mPipAnimationController = new PipAnimationController( mContext, new PipSurfaceTransactionHelper(mContext)); mLeash = new SurfaceControl.Builder() .setContainerLayer() .setName("FakeLeash") .build(); MockitoAnnotations.initMocks(this); } Loading
services/core/java/com/android/server/wm/Task.java +0 −11 Original line number Diff line number Diff line Loading @@ -4131,17 +4131,6 @@ class Task extends WindowContainer<WindowContainer> { // Let the old organizer know it has lost control. sendTaskVanished(); mTaskOrganizer = organizer; // If the task is not yet visible when it is added to the task organizer, then we should // hide it to allow the task organizer to show it when it is properly reparented. We skip // this for tasks created by the organizer because they can synchronously update the leash // before new children are added to the task. if (!mCreatedByOrganizer && organizer != null && (!getHasBeenVisible() || !hasVisibleChildren())) { getPendingTransaction().hide(getSurfaceControl()); commitPendingTransaction(); } sendTaskAppeared(); onTaskOrganizerChanged(); return true; Loading
services/core/java/com/android/server/wm/TaskOrganizerController.java +29 −107 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static com.android.server.wm.WindowOrganizerController.CONTROLLABLE_CONFI import static com.android.server.wm.WindowOrganizerController.CONTROLLABLE_WINDOW_CONFIGS; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.WindowConfiguration; import android.content.Intent; Loading @@ -39,7 +38,6 @@ import android.window.ITaskOrganizer; import android.window.ITaskOrganizerController; import android.window.WindowContainerToken; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import java.io.PrintWriter; Loading @@ -48,7 +46,6 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.WeakHashMap; import java.util.function.Consumer; /** * Stores the TaskOrganizers associated with a given windowing mode and Loading Loading @@ -84,95 +81,17 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } } } } /** * A wrapper class around ITaskOrganizer to ensure that the calls are made in the right * lifecycle order since we may be updating the visibility of task surface controls in a pending * transaction before they are presented to the task org. */ private class TaskOrganizerCallbacks { final WindowManagerService mService; final ITaskOrganizer mTaskOrganizer; final Consumer<Runnable> mDeferTaskOrgCallbacksConsumer; TaskOrganizerCallbacks(WindowManagerService wm, ITaskOrganizer taskOrg, Consumer<Runnable> deferTaskOrgCallbacksConsumer) { mService = wm; mDeferTaskOrgCallbacksConsumer = deferTaskOrgCallbacksConsumer; mTaskOrganizer = taskOrg; } IBinder getBinder() { return mTaskOrganizer.asBinder(); } void onTaskAppeared(Task task) { final RunningTaskInfo taskInfo = task.getTaskInfo(); mDeferTaskOrgCallbacksConsumer.accept(() -> { try { mTaskOrganizer.onTaskAppeared(taskInfo); } catch (RemoteException e) { Slog.e(TAG, "Exception sending onTaskAppeared callback", e); } }); } void onTaskVanished(Task task) { final RunningTaskInfo taskInfo = task.getTaskInfo(); mDeferTaskOrgCallbacksConsumer.accept(() -> { try { mTaskOrganizer.onTaskVanished(taskInfo); } catch (RemoteException e) { Slog.e(TAG, "Exception sending onTaskVanished callback", e); } }); } void onTaskInfoChanged(Task task, ActivityManager.RunningTaskInfo taskInfo) { mDeferTaskOrgCallbacksConsumer.accept(() -> { if (!task.isOrganized()) { // This is safe to ignore if the task is no longer organized return; } try { mTaskOrganizer.onTaskInfoChanged(taskInfo); } catch (RemoteException e) { Slog.e(TAG, "Exception sending onTaskInfoChanged callback", e); } }); } void onBackPressedOnTaskRoot(Task task) { mDeferTaskOrgCallbacksConsumer.accept(() -> { if (!task.isOrganized()) { // This is safe to ignore if the task is no longer organized return; } try { mTaskOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending onBackPressedOnTaskRoot callback", e); } }); } } }; private class TaskOrganizerState { private final TaskOrganizerCallbacks mOrganizer; private final ITaskOrganizer mOrganizer; private final DeathRecipient mDeathRecipient; private final ArrayList<Task> mOrganizedTasks = new ArrayList<>(); private final int mUid; private boolean mInterceptBackPressedOnTaskRoot; TaskOrganizerState(ITaskOrganizer organizer, int uid) { final Consumer<Runnable> deferTaskOrgCallbacksConsumer = mDeferTaskOrgCallbacksConsumer != null ? mDeferTaskOrgCallbacksConsumer : mService.mWindowManager.mAnimator::addAfterPrepareSurfacesRunnable; mOrganizer = new TaskOrganizerCallbacks(mService.mWindowManager, organizer, deferTaskOrgCallbacksConsumer); mOrganizer = organizer; mDeathRecipient = new DeathRecipient(organizer); try { organizer.asBinder().linkToDeath(mDeathRecipient, 0); Loading @@ -188,18 +107,26 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { void addTask(Task t) { mOrganizedTasks.add(t); mOrganizer.onTaskAppeared(t); try { mOrganizer.onTaskAppeared(t.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending taskAppeared callback" + e); } } void removeTask(Task t) { try { mOrganizer.onTaskVanished(t.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending taskVanished callback" + e); } mOrganizedTasks.remove(t); mOrganizer.onTaskVanished(t); } void dispose() { releaseTasks(); for (int i = mTaskOrganizersForWindowingMode.size() - 1; i >= 0; --i) { mTaskOrganizersForWindowingMode.valueAt(i).remove(mOrganizer.getBinder()); mTaskOrganizersForWindowingMode.valueAt(i).remove(mOrganizer.asBinder()); } } Loading @@ -212,7 +139,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } void unlinkDeath() { mOrganizer.getBinder().unlinkToDeath(mDeathRecipient, 0); mOrganizer.asBinder().unlinkToDeath(mDeathRecipient, 0); } } Loading @@ -222,10 +149,9 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { private final WeakHashMap<Task, RunningTaskInfo> mLastSentTaskInfos = new WeakHashMap<>(); private final ArrayList<Task> mPendingTaskInfoChanges = new ArrayList<>(); private final ActivityTaskManagerService mService; final ActivityTaskManagerService mService; private RunningTaskInfo mTmpTaskInfo; private Consumer<Runnable> mDeferTaskOrgCallbacksConsumer; RunningTaskInfo mTmpTaskInfo; TaskOrganizerController(ActivityTaskManagerService atm) { mService = atm; Loading @@ -236,15 +162,6 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { mService.mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, func); } /** * Specifies the consumer to run to defer the task org callbacks. Can be overridden while * testing to allow the callbacks to be sent synchronously. */ @VisibleForTesting public void setDeferTaskOrgCallbacksConsumer(Consumer<Runnable> consumer) { mDeferTaskOrgCallbacksConsumer = consumer; } /** * Register a TaskOrganizer to manage tasks as they enter the given windowing mode. * If there was already a TaskOrganizer for this windowing mode it will be evicted Loading Loading @@ -336,7 +253,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { if (state == null) { return null; } return state.mOrganizer.mTaskOrganizer; return state.mOrganizer; } void onTaskAppeared(ITaskOrganizer organizer, Task task) { Loading Loading @@ -441,10 +358,11 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { // change. mTmpTaskInfo = null; if (task.isOrganized()) { final TaskOrganizerState state = mTaskOrganizerStates.get( task.mTaskOrganizer.asBinder()); state.mOrganizer.onTaskInfoChanged(task, newInfo); if (task.mTaskOrganizer != null) { try { task.mTaskOrganizer.onTaskInfoChanged(newInfo); } catch (RemoteException e) { } } } Loading Loading @@ -603,7 +521,11 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { return false; } state.mOrganizer.onBackPressedOnTaskRoot(task); try { state.mOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo()); } catch (Exception e) { Slog.e(TAG, "Exception sending interceptBackPressedOnTaskRoot callback" + e); } return true; } Loading @@ -620,7 +542,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { final TaskOrganizerState state = mTaskOrganizerStates.get(taskOrgs.get(j)); final ArrayList<Task> tasks = state.mOrganizedTasks; pw.print(innerPrefix + " "); pw.println(state.mOrganizer.mTaskOrganizer + " uid=" + state.mUid + ":"); pw.println(state.mOrganizer + " uid=" + state.mUid + ":"); for (int k = 0; k < tasks.size(); k++) { pw.println(innerPrefix + " " + tasks.get(k)); } Loading