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

Commit b04ee60f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Synchronize WCT for TaskView with SurfaceControl.Transaction." into...

Merge "Synchronize WCT for TaskView with SurfaceControl.Transaction." into sc-v2-dev am: 16eeb2c5 am: fc2de1ae

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14690649

Change-Id: I632de9b8b029c9d7a332df48ee6d20f51d6db065
parents 746e5cb8 fc2de1ae
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -1554,12 +1554,21 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
     * @hide
     * @hide
     */
     */
    public void setResizeBackgroundColor(int bgColor) {
    public void setResizeBackgroundColor(int bgColor) {
        setResizeBackgroundColor(mTmpTransaction, bgColor);
        mTmpTransaction.apply();
    }

    /**
     * Version of {@link #setResizeBackgroundColor(int)} that allows you to provide
     * {@link SurfaceControl.Transaction}.
     * @hide
     */
    public void setResizeBackgroundColor(@NonNull SurfaceControl.Transaction t, int bgColor) {
        if (mBackgroundControl == null) {
        if (mBackgroundControl == null) {
            return;
            return;
        }
        }

        mBackgroundColor = bgColor;
        mBackgroundColor = bgColor;
        updateBackgroundColor(mTmpTransaction).apply();
        updateBackgroundColor(t);
    }
    }


    @UnsupportedAppUsage
    @UnsupportedAppUsage
+17 −10
Original line number Original line Diff line number Diff line
@@ -40,6 +40,8 @@ import android.view.ViewTreeObserver;
import android.window.WindowContainerToken;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
import android.window.WindowContainerTransaction;


import com.android.wm.shell.common.SyncTransactionQueue;

import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.concurrent.Executor;
import java.util.concurrent.Executor;


@@ -74,6 +76,7 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,


    private final ShellTaskOrganizer mTaskOrganizer;
    private final ShellTaskOrganizer mTaskOrganizer;
    private final Executor mShellExecutor;
    private final Executor mShellExecutor;
    private final SyncTransactionQueue mSyncQueue;


    private ActivityManager.RunningTaskInfo mTaskInfo;
    private ActivityManager.RunningTaskInfo mTaskInfo;
    private WindowContainerToken mTaskToken;
    private WindowContainerToken mTaskToken;
@@ -89,11 +92,12 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
    private final Rect mTmpRootRect = new Rect();
    private final Rect mTmpRootRect = new Rect();
    private final int[] mTmpLocation = new int[2];
    private final int[] mTmpLocation = new int[2];


    public TaskView(Context context, ShellTaskOrganizer organizer) {
    public TaskView(Context context, ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue) {
        super(context, null, 0, 0, true /* disableBackgroundLayer */);
        super(context, null, 0, 0, true /* disableBackgroundLayer */);


        mTaskOrganizer = organizer;
        mTaskOrganizer = organizer;
        mShellExecutor = organizer.getExecutor();
        mShellExecutor = organizer.getExecutor();
        mSyncQueue = syncQueue;
        setUseAlpha();
        setUseAlpha();
        getHolder().addCallback(this);
        getHolder().addCallback(this);
        mGuard.open("release");
        mGuard.open("release");
@@ -189,8 +193,7 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,


        WindowContainerTransaction wct = new WindowContainerTransaction();
        WindowContainerTransaction wct = new WindowContainerTransaction();
        wct.setBounds(mTaskToken, mTmpRect);
        wct.setBounds(mTaskToken, mTmpRect);
        // TODO(b/151449487): Enable synchronization
        mSyncQueue.queue(wct);
        mTaskOrganizer.applyTransaction(wct);
    }
    }


    /**
    /**
@@ -236,14 +239,16 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
    private void updateTaskVisibility() {
    private void updateTaskVisibility() {
        WindowContainerTransaction wct = new WindowContainerTransaction();
        WindowContainerTransaction wct = new WindowContainerTransaction();
        wct.setHidden(mTaskToken, !mSurfaceCreated /* hidden */);
        wct.setHidden(mTaskToken, !mSurfaceCreated /* hidden */);
        mTaskOrganizer.applyTransaction(wct);
        mSyncQueue.queue(wct);
        // TODO(b/151449487): Only call callback once we enable synchronization
        if (mListener == null) {
        if (mListener != null) {
            return;
            final int taskId = mTaskInfo.taskId;
        }
        int taskId = mTaskInfo.taskId;
        mSyncQueue.runInSync((t) -> {
            mListenerExecutor.execute(() -> {
            mListenerExecutor.execute(() -> {
                mListener.onTaskVisibilityChanged(taskId, mSurfaceCreated);
                mListener.onTaskVisibilityChanged(taskId, mSurfaceCreated);
            });
            });
        }
        });
    }
    }


    @Override
    @Override
@@ -264,10 +269,12 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
            updateTaskVisibility();
            updateTaskVisibility();
        }
        }
        mTaskOrganizer.setInterceptBackPressedOnTaskRoot(mTaskToken, true);
        mTaskOrganizer.setInterceptBackPressedOnTaskRoot(mTaskToken, true);
        // TODO: Synchronize show with the resize
        onLocationChanged();
        onLocationChanged();
        if (taskInfo.taskDescription != null) {
        if (taskInfo.taskDescription != null) {
            setResizeBackgroundColor(taskInfo.taskDescription.getBackgroundColor());
            int backgroundColor = taskInfo.taskDescription.getBackgroundColor();
            mSyncQueue.runInSync((t) -> {
                setResizeBackgroundColor(t, backgroundColor);
            });
        }
        }


        if (mListener != null) {
        if (mListener != null) {
+5 −3
Original line number Original line Diff line number Diff line
@@ -20,8 +20,8 @@ import android.annotation.UiContext;
import android.content.Context;
import android.content.Context;


import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.common.annotations.ExternalThread;
import com.android.wm.shell.common.annotations.ExternalThread;
import com.android.wm.shell.common.annotations.ShellMainThread;


import java.util.concurrent.Executor;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.function.Consumer;
@@ -30,12 +30,14 @@ import java.util.function.Consumer;
public class TaskViewFactoryController {
public class TaskViewFactoryController {
    private final ShellTaskOrganizer mTaskOrganizer;
    private final ShellTaskOrganizer mTaskOrganizer;
    private final ShellExecutor mShellExecutor;
    private final ShellExecutor mShellExecutor;
    private final SyncTransactionQueue mSyncQueue;
    private final TaskViewFactory mImpl = new TaskViewFactoryImpl();
    private final TaskViewFactory mImpl = new TaskViewFactoryImpl();


    public TaskViewFactoryController(ShellTaskOrganizer taskOrganizer,
    public TaskViewFactoryController(ShellTaskOrganizer taskOrganizer,
            ShellExecutor shellExecutor) {
            ShellExecutor shellExecutor, SyncTransactionQueue syncQueue) {
        mTaskOrganizer = taskOrganizer;
        mTaskOrganizer = taskOrganizer;
        mShellExecutor = shellExecutor;
        mShellExecutor = shellExecutor;
        mSyncQueue = syncQueue;
    }
    }


    public TaskViewFactory asTaskViewFactory() {
    public TaskViewFactory asTaskViewFactory() {
@@ -44,7 +46,7 @@ public class TaskViewFactoryController {


    /** Creates an {@link TaskView} */
    /** Creates an {@link TaskView} */
    public void create(@UiContext Context context, Executor executor, Consumer<TaskView> onCreate) {
    public void create(@UiContext Context context, Executor executor, Consumer<TaskView> onCreate) {
        TaskView taskView = new TaskView(context, mTaskOrganizer);
        TaskView taskView = new TaskView(context, mTaskOrganizer, mSyncQueue);
        executor.execute(() -> {
        executor.execute(() -> {
            onCreate.accept(taskView);
            onCreate.accept(taskView);
        });
        });
+12 −3
Original line number Original line Diff line number Diff line
@@ -85,6 +85,7 @@ import com.android.wm.shell.common.DisplayChangeController;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.FloatingContentCoordinator;
import com.android.wm.shell.common.FloatingContentCoordinator;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.common.TaskStackListenerCallback;
import com.android.wm.shell.common.TaskStackListenerCallback;
import com.android.wm.shell.common.TaskStackListenerImpl;
import com.android.wm.shell.common.TaskStackListenerImpl;
import com.android.wm.shell.pip.PinnedStackListenerForwarder;
import com.android.wm.shell.pip.PinnedStackListenerForwarder;
@@ -136,6 +137,7 @@ public class BubbleController {
    private final TaskStackListenerImpl mTaskStackListener;
    private final TaskStackListenerImpl mTaskStackListener;
    private final ShellTaskOrganizer mTaskOrganizer;
    private final ShellTaskOrganizer mTaskOrganizer;
    private final DisplayController mDisplayController;
    private final DisplayController mDisplayController;
    private final SyncTransactionQueue mSyncQueue;


    // Used to post to main UI thread
    // Used to post to main UI thread
    private final ShellExecutor mMainExecutor;
    private final ShellExecutor mMainExecutor;
@@ -208,7 +210,8 @@ public class BubbleController {
            ShellTaskOrganizer organizer,
            ShellTaskOrganizer organizer,
            DisplayController displayController,
            DisplayController displayController,
            ShellExecutor mainExecutor,
            ShellExecutor mainExecutor,
            Handler mainHandler) {
            Handler mainHandler,
            SyncTransactionQueue syncQueue) {
        BubbleLogger logger = new BubbleLogger(uiEventLogger);
        BubbleLogger logger = new BubbleLogger(uiEventLogger);
        BubblePositioner positioner = new BubblePositioner(context, windowManager);
        BubblePositioner positioner = new BubblePositioner(context, windowManager);
        BubbleData data = new BubbleData(context, logger, positioner, mainExecutor);
        BubbleData data = new BubbleData(context, logger, positioner, mainExecutor);
@@ -216,7 +219,7 @@ public class BubbleController {
                new BubbleDataRepository(context, launcherApps, mainExecutor),
                new BubbleDataRepository(context, launcherApps, mainExecutor),
                statusBarService, windowManager, windowManagerShellWrapper, launcherApps,
                statusBarService, windowManager, windowManagerShellWrapper, launcherApps,
                logger, taskStackListener, organizer, positioner, displayController, mainExecutor,
                logger, taskStackListener, organizer, positioner, displayController, mainExecutor,
                mainHandler);
                mainHandler, syncQueue);
    }
    }


    /**
    /**
@@ -238,7 +241,8 @@ public class BubbleController {
            BubblePositioner positioner,
            BubblePositioner positioner,
            DisplayController displayController,
            DisplayController displayController,
            ShellExecutor mainExecutor,
            ShellExecutor mainExecutor,
            Handler mainHandler) {
            Handler mainHandler,
            SyncTransactionQueue syncQueue) {
        mContext = context;
        mContext = context;
        mLauncherApps = launcherApps;
        mLauncherApps = launcherApps;
        mBarService = statusBarService == null
        mBarService = statusBarService == null
@@ -261,6 +265,7 @@ public class BubbleController {
        mSavedBubbleKeysPerUser = new SparseSetArray<>();
        mSavedBubbleKeysPerUser = new SparseSetArray<>();
        mBubbleIconFactory = new BubbleIconFactory(context);
        mBubbleIconFactory = new BubbleIconFactory(context);
        mDisplayController = displayController;
        mDisplayController = displayController;
        mSyncQueue = syncQueue;
    }
    }


    public void initialize() {
    public void initialize() {
@@ -544,6 +549,10 @@ public class BubbleController {
        return mTaskOrganizer;
        return mTaskOrganizer;
    }
    }


    SyncTransactionQueue getSyncTransactionQueue() {
        return mSyncQueue;
    }

    /** Contains information to help position things on the screen.  */
    /** Contains information to help position things on the screen.  */
    BubblePositioner getPositioner() {
    BubblePositioner getPositioner() {
        return mBubblePositioner;
        return mBubblePositioner;
+2 −1
Original line number Original line Diff line number Diff line
@@ -338,7 +338,8 @@ public class BubbleExpandedView extends LinearLayout {
            bringChildToFront(mOverflowView);
            bringChildToFront(mOverflowView);
            mManageButton.setVisibility(GONE);
            mManageButton.setVisibility(GONE);
        } else {
        } else {
            mTaskView = new TaskView(mContext, mController.getTaskOrganizer());
            mTaskView = new TaskView(mContext, mController.getTaskOrganizer(),
                    mController.getSyncTransactionQueue());
            mTaskView.setListener(mController.getMainExecutor(), mTaskViewListener);
            mTaskView.setListener(mController.getMainExecutor(), mTaskViewListener);
            mExpandedViewContainer.addView(mTaskView);
            mExpandedViewContainer.addView(mTaskView);
            bringChildToFront(mTaskView);
            bringChildToFront(mTaskView);
Loading