Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66cb88c5 authored by Winson Chung's avatar Winson Chung
Browse files

Updating call for single organizer

- This call no longer makes sense when organizers are unified, but
  the caller can set this on a per-task basis.

Bug: 161980327
Test: atest WindowOrganizerTests
Change-Id: I8b8d3cafdf0f42861e69a28007045f46b351ba94
parent b754f528
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5579,7 +5579,7 @@ package android.window {
    method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void registerOrganizer();
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setInterceptBackPressedOnTaskRoot(boolean);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setInterceptBackPressedOnTaskRoot(@NonNull android.window.WindowContainerToken, boolean);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static void setLaunchRoot(int, @NonNull android.window.WindowContainerToken);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void unregisterOrganizer();
  }
+2 −1
Original line number Diff line number Diff line
@@ -60,5 +60,6 @@ interface ITaskOrganizerController {
     * Requests that the given task organizer is notified when back is pressed on the root activity
     * of one of its controlled tasks.
     */
    void setInterceptBackPressedOnTaskRoot(ITaskOrganizer organizer, boolean interceptBackPressed);
    void setInterceptBackPressedOnTaskRoot(in WindowContainerToken task,
            boolean interceptBackPressed);
}
+3 −2
Original line number Diff line number Diff line
@@ -149,9 +149,10 @@ public class TaskOrganizer extends WindowOrganizer {
     * of one of its controlled tasks.
     */
    @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
    public void setInterceptBackPressedOnTaskRoot(boolean interceptBackPressed) {
    public void setInterceptBackPressedOnTaskRoot(@NonNull WindowContainerToken task,
            boolean interceptBackPressed) {
        try {
            getController().setInterceptBackPressedOnTaskRoot(mInterface, interceptBackPressed);
            getController().setInterceptBackPressedOnTaskRoot(task, interceptBackPressed);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
        // windowing mode tasks. Plan is to migrate this to a wm-shell front-end when that
        // infrastructure is ready.
        // mTaskOrganizer.registerOrganizer();
        mTaskOrganizer.setInterceptBackPressedOnTaskRoot(true);
        // mTaskOrganizer.setInterceptBackPressedOnTaskRoot(true);

        return super.onInitialize();
    }
+17 −14
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;
import android.util.SparseBooleanArray;
import android.view.SurfaceControl;
import android.window.ITaskOrganizer;
import android.window.ITaskOrganizerController;
@@ -50,6 +51,7 @@ import com.android.internal.util.ArrayUtils;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@@ -206,7 +208,6 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
        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 =
@@ -224,10 +225,6 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
            mUid = uid;
        }

        void setInterceptBackPressedOnTaskRoot(boolean interceptBackPressed) {
            mInterceptBackPressedOnTaskRoot = interceptBackPressed;
        }

        void addTask(Task t) {
            if (t.mTaskAppearedSent) return;

@@ -247,6 +244,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
                mOrganizer.onTaskVanished(t);
            }
            mOrganizedTasks.remove(t);
            mInterceptBackPressedOnRootTasks.remove(t.mTaskId);
        }

        void dispose() {
@@ -278,6 +276,8 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
    private final HashMap<IBinder, TaskOrganizerState> mTaskOrganizerStates = new HashMap<>();
    private final WeakHashMap<Task, RunningTaskInfo> mLastSentTaskInfos = new WeakHashMap<>();
    private final ArrayList<Task> mPendingTaskInfoChanges = new ArrayList<>();
    // Set of organized tasks (by taskId) that dispatch back pressed to their organizers
    private final HashSet<Integer> mInterceptBackPressedOnRootTasks = new HashSet();

    private final ActivityTaskManagerService mService;

@@ -623,7 +623,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
    }

    @Override
    public void setInterceptBackPressedOnTaskRoot(ITaskOrganizer organizer,
    public void setInterceptBackPressedOnTaskRoot(WindowContainerToken token,
            boolean interceptBackPressed) {
        enforceStackPermission("setInterceptBackPressedOnTaskRoot()");
        final long origId = Binder.clearCallingIdentity();
@@ -631,9 +631,15 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
            synchronized (mGlobalLock) {
                ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Set intercept back pressed on root=%b",
                        interceptBackPressed);
                final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
                if (state != null) {
                    state.setInterceptBackPressedOnTaskRoot(interceptBackPressed);
                final Task task = WindowContainer.fromBinder(token.asBinder()).asTask();
                if (task == null) {
                    Slog.w(TAG, "Could not resolve task from token");
                    return;
                }
                if (interceptBackPressed) {
                    mInterceptBackPressedOnRootTasks.add(task.mTaskId);
                } else {
                    mInterceptBackPressedOnRootTasks.remove(task.mTaskId);
                }
            }
        } finally {
@@ -642,15 +648,12 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
    }

    public boolean handleInterceptBackPressedOnTaskRoot(Task task) {
        if (task == null || !task.isOrganized()) {
        if (task == null || !task.isOrganized()
                || !mInterceptBackPressedOnRootTasks.contains(task.mTaskId)) {
            return false;
        }

        final TaskOrganizerState state = mTaskOrganizerStates.get(task.mTaskOrganizer.asBinder());
        if (!state.mInterceptBackPressedOnTaskRoot) {
            return false;
        }

        state.mOrganizer.onBackPressedOnTaskRoot(task);
        return true;
    }
Loading