Merge "Synchronize WCT for TaskView with SurfaceControl.Transaction." into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
16eeb2c5a3
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ import android.window.WindowContainerToken;
|
|||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
import com.android.wm.shell.common.HandlerExecutor;
|
import com.android.wm.shell.common.HandlerExecutor;
|
||||||
|
import com.android.wm.shell.common.SyncTransactionQueue;
|
||||||
|
import com.android.wm.shell.common.SyncTransactionQueue.TransactionRunnable;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -71,6 +73,8 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
ShellTaskOrganizer mOrganizer;
|
ShellTaskOrganizer mOrganizer;
|
||||||
@Mock
|
@Mock
|
||||||
HandlerExecutor mExecutor;
|
HandlerExecutor mExecutor;
|
||||||
|
@Mock
|
||||||
|
SyncTransactionQueue mSyncQueue;
|
||||||
|
|
||||||
SurfaceSession mSession;
|
SurfaceSession mSession;
|
||||||
SurfaceControl mLeash;
|
SurfaceControl mLeash;
|
||||||
@@ -99,7 +103,14 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
}).when(mExecutor).execute(any());
|
}).when(mExecutor).execute(any());
|
||||||
|
|
||||||
when(mOrganizer.getExecutor()).thenReturn(mExecutor);
|
when(mOrganizer.getExecutor()).thenReturn(mExecutor);
|
||||||
mTaskView = new TaskView(mContext, mOrganizer);
|
|
||||||
|
doAnswer((InvocationOnMock invocationOnMock) -> {
|
||||||
|
final TransactionRunnable r = invocationOnMock.getArgument(0);
|
||||||
|
r.runWithTransaction(new SurfaceControl.Transaction());
|
||||||
|
return null;
|
||||||
|
}).when(mSyncQueue).runInSync(any());
|
||||||
|
|
||||||
|
mTaskView = new TaskView(mContext, mOrganizer, mSyncQueue);
|
||||||
mTaskView.setListener(mExecutor, mViewListener);
|
mTaskView.setListener(mExecutor, mViewListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +123,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetPendingListener_throwsException() {
|
public void testSetPendingListener_throwsException() {
|
||||||
TaskView taskView = new TaskView(mContext, mOrganizer);
|
TaskView taskView = new TaskView(mContext, mOrganizer, mSyncQueue);
|
||||||
taskView.setListener(mExecutor, mViewListener);
|
taskView.setListener(mExecutor, mViewListener);
|
||||||
try {
|
try {
|
||||||
taskView.setListener(mExecutor, mViewListener);
|
taskView.setListener(mExecutor, mViewListener);
|
||||||
|
|||||||
@@ -194,11 +194,12 @@ public abstract class WMShellBaseModule {
|
|||||||
ShellTaskOrganizer organizer,
|
ShellTaskOrganizer organizer,
|
||||||
DisplayController displayController,
|
DisplayController displayController,
|
||||||
@ShellMainThread ShellExecutor mainExecutor,
|
@ShellMainThread ShellExecutor mainExecutor,
|
||||||
@ShellMainThread Handler mainHandler) {
|
@ShellMainThread Handler mainHandler,
|
||||||
|
SyncTransactionQueue syncQueue) {
|
||||||
return Optional.of(BubbleController.create(context, null /* synchronizer */,
|
return Optional.of(BubbleController.create(context, null /* synchronizer */,
|
||||||
floatingContentCoordinator, statusBarService, windowManager,
|
floatingContentCoordinator, statusBarService, windowManager,
|
||||||
windowManagerShellWrapper, launcherApps, taskStackListener,
|
windowManagerShellWrapper, launcherApps, taskStackListener,
|
||||||
uiEventLogger, organizer, displayController, mainExecutor, mainHandler));
|
uiEventLogger, organizer, displayController, mainExecutor, mainHandler, syncQueue));
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -424,8 +425,9 @@ public abstract class WMShellBaseModule {
|
|||||||
@Provides
|
@Provides
|
||||||
static TaskViewFactoryController provideTaskViewFactoryController(
|
static TaskViewFactoryController provideTaskViewFactoryController(
|
||||||
ShellTaskOrganizer shellTaskOrganizer,
|
ShellTaskOrganizer shellTaskOrganizer,
|
||||||
@ShellMainThread ShellExecutor mainExecutor) {
|
@ShellMainThread ShellExecutor mainExecutor,
|
||||||
return new TaskViewFactoryController(shellTaskOrganizer, mainExecutor);
|
SyncTransactionQueue syncQueue) {
|
||||||
|
return new TaskViewFactoryController(shellTaskOrganizer, mainExecutor, syncQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ import com.android.wm.shell.bubbles.Bubbles;
|
|||||||
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.TaskStackListenerImpl;
|
import com.android.wm.shell.common.TaskStackListenerImpl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@@ -318,7 +319,8 @@ public class BubblesTest extends SysuiTestCase {
|
|||||||
mPositioner,
|
mPositioner,
|
||||||
mock(DisplayController.class),
|
mock(DisplayController.class),
|
||||||
syncExecutor,
|
syncExecutor,
|
||||||
mock(Handler.class));
|
mock(Handler.class),
|
||||||
|
mock(SyncTransactionQueue.class));
|
||||||
mBubbleController.setExpandListener(mBubbleExpandListener);
|
mBubbleController.setExpandListener(mBubbleExpandListener);
|
||||||
|
|
||||||
mBubblesManager = new BubblesManager(
|
mBubblesManager = new BubblesManager(
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ import com.android.wm.shell.bubbles.Bubbles;
|
|||||||
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.TaskStackListenerImpl;
|
import com.android.wm.shell.common.TaskStackListenerImpl;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -262,7 +263,8 @@ public class NewNotifPipelineBubblesTest extends SysuiTestCase {
|
|||||||
mPositioner,
|
mPositioner,
|
||||||
mock(DisplayController.class),
|
mock(DisplayController.class),
|
||||||
syncExecutor,
|
syncExecutor,
|
||||||
mock(Handler.class));
|
mock(Handler.class),
|
||||||
|
mock(SyncTransactionQueue.class));
|
||||||
mBubbleController.setExpandListener(mBubbleExpandListener);
|
mBubbleController.setExpandListener(mBubbleExpandListener);
|
||||||
|
|
||||||
mBubblesManager = new BubblesManager(
|
mBubblesManager = new BubblesManager(
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import com.android.wm.shell.bubbles.BubblePositioner;
|
|||||||
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.TaskStackListenerImpl;
|
import com.android.wm.shell.common.TaskStackListenerImpl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,11 +55,12 @@ public class TestableBubbleController extends BubbleController {
|
|||||||
BubblePositioner positioner,
|
BubblePositioner positioner,
|
||||||
DisplayController displayController,
|
DisplayController displayController,
|
||||||
ShellExecutor shellMainExecutor,
|
ShellExecutor shellMainExecutor,
|
||||||
Handler shellMainHandler) {
|
Handler shellMainHandler,
|
||||||
|
SyncTransactionQueue syncQueue) {
|
||||||
super(context, data, Runnable::run, floatingContentCoordinator, dataRepository,
|
super(context, data, Runnable::run, floatingContentCoordinator, dataRepository,
|
||||||
statusBarService, windowManager, windowManagerShellWrapper, launcherApps,
|
statusBarService, windowManager, windowManagerShellWrapper, launcherApps,
|
||||||
bubbleLogger, taskStackListener, shellTaskOrganizer, positioner, displayController,
|
bubbleLogger, taskStackListener, shellTaskOrganizer, positioner, displayController,
|
||||||
shellMainExecutor, shellMainHandler);
|
shellMainExecutor, shellMainHandler, syncQueue);
|
||||||
setInflateSynchronously(true);
|
setInflateSynchronously(true);
|
||||||
initialize();
|
initialize();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user