diff options
13 files changed, 100 insertions, 55 deletions
diff --git a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubblePositionerTest.kt b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubblePositionerTest.kt index ae60d8bc2596..4b97451a0c41 100644 --- a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubblePositionerTest.kt +++ b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubblePositionerTest.kt @@ -268,7 +268,8 @@ class BubblePositionerTest { ) positioner.update(deviceConfig) val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) assertThat(positioner.getExpandedViewHeight(bubble)).isEqualTo(MAX_HEIGHT) } @@ -294,6 +295,7 @@ class BubblePositionerTest { 0 /* taskId */, null /* locus */, true /* isDismissable */, + directExecutor(), directExecutor() ) {} @@ -322,6 +324,7 @@ class BubblePositionerTest { 0 /* taskId */, null /* locus */, true /* isDismissable */, + directExecutor(), directExecutor() ) {} @@ -416,7 +419,8 @@ class BubblePositionerTest { positioner.update(deviceConfig) val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) // This bubble will have max height so it'll always be top aligned assertThat(positioner.getExpandedViewY(bubble, 0f /* bubblePosition */)) @@ -433,7 +437,8 @@ class BubblePositionerTest { positioner.update(deviceConfig) val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) // Always top aligned in phone portrait assertThat(positioner.getExpandedViewY(bubble, 0f /* bubblePosition */)) @@ -452,7 +457,8 @@ class BubblePositionerTest { positioner.update(deviceConfig) val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) // This bubble will have max height which is always top aligned on small tablets assertThat(positioner.getExpandedViewY(bubble, 0f /* bubblePosition */)) @@ -470,7 +476,8 @@ class BubblePositionerTest { positioner.update(deviceConfig) val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) // This bubble will have max height which is always top aligned on small tablets assertThat(positioner.getExpandedViewY(bubble, 0f /* bubblePosition */)) @@ -489,7 +496,8 @@ class BubblePositionerTest { positioner.update(deviceConfig) val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) // This bubble will have max height which is always top aligned on landscape, large tablet assertThat(positioner.getExpandedViewY(bubble, 0f /* bubblePosition */)) @@ -507,7 +515,8 @@ class BubblePositionerTest { positioner.update(deviceConfig) val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) val manageButtonHeight = context.resources.getDimensionPixelSize(R.dimen.bubble_manage_button_height) diff --git a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt index 84f7bb27ca82..faadf1d623c9 100644 --- a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt +++ b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt @@ -102,6 +102,7 @@ class BubbleStackViewTest { BubbleLogger(UiEventLoggerFake()), positioner, BubbleEducationController(context), + shellExecutor, shellExecutor ) bubbleStackViewManager = FakeBubbleStackViewManager() @@ -364,6 +365,7 @@ class BubbleStackViewTest { /* taskId= */ 0, "locus", /* isDismissable= */ true, + directExecutor(), directExecutor() ) {} inflateBubble(bubble) @@ -373,7 +375,8 @@ class BubbleStackViewTest { private fun createAndInflateBubble(): Bubble { val intent = Intent(Intent.ACTION_VIEW).setPackage(context.packageName) val icon = Icon.createWithResource(context.resources, R.drawable.bubble_ic_overflow_button) - val bubble = Bubble.createAppBubble(intent, UserHandle(1), icon, directExecutor()) + val bubble = + Bubble.createAppBubble(intent, UserHandle(1), icon, directExecutor(), directExecutor()) inflateBubble(bubble) return bubble } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java index 4def84345b4b..021d3c32fd63 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java @@ -54,6 +54,8 @@ import com.android.wm.shell.Flags; import com.android.wm.shell.bubbles.bar.BubbleBarExpandedView; import com.android.wm.shell.bubbles.bar.BubbleBarLayerView; import com.android.wm.shell.common.bubbles.BubbleInfo; +import com.android.wm.shell.shared.annotations.ShellBackgroundThread; +import com.android.wm.shell.shared.annotations.ShellMainThread; import java.io.PrintWriter; import java.util.List; @@ -79,6 +81,7 @@ public class Bubble implements BubbleViewProvider { private final LocusId mLocusId; private final Executor mMainExecutor; + private final Executor mBgExecutor; private long mLastUpdated; private long mLastAccessed; @@ -206,7 +209,9 @@ public class Bubble implements BubbleViewProvider { @VisibleForTesting(visibility = PRIVATE) public Bubble(@NonNull final String key, @NonNull final ShortcutInfo shortcutInfo, final int desiredHeight, final int desiredHeightResId, @Nullable final String title, - int taskId, @Nullable final String locus, boolean isDismissable, Executor mainExecutor, + int taskId, @Nullable final String locus, boolean isDismissable, + @ShellMainThread Executor mainExecutor, + @ShellBackgroundThread Executor bgExecutor, final Bubbles.BubbleMetadataFlagListener listener) { Objects.requireNonNull(key); Objects.requireNonNull(shortcutInfo); @@ -225,6 +230,7 @@ public class Bubble implements BubbleViewProvider { mTitle = title; mShowBubbleUpdateDot = false; mMainExecutor = mainExecutor; + mBgExecutor = bgExecutor; mTaskId = taskId; mBubbleMetadataFlagListener = listener; mIsAppBubble = false; @@ -236,7 +242,8 @@ public class Bubble implements BubbleViewProvider { @Nullable Icon icon, boolean isAppBubble, String key, - Executor mainExecutor) { + @ShellMainThread Executor mainExecutor, + @ShellBackgroundThread Executor bgExecutor) { mGroupKey = null; mLocusId = null; mFlags = 0; @@ -246,13 +253,15 @@ public class Bubble implements BubbleViewProvider { mKey = key; mShowBubbleUpdateDot = false; mMainExecutor = mainExecutor; + mBgExecutor = bgExecutor; mTaskId = INVALID_TASK_ID; mAppIntent = intent; mDesiredHeight = Integer.MAX_VALUE; mPackageName = intent.getPackage(); } - private Bubble(ShortcutInfo info, Executor mainExecutor) { + private Bubble(ShortcutInfo info, @ShellMainThread Executor mainExecutor, + @ShellBackgroundThread Executor bgExecutor) { mGroupKey = null; mLocusId = null; mFlags = 0; @@ -262,6 +271,7 @@ public class Bubble implements BubbleViewProvider { mKey = getBubbleKeyForShortcut(info); mShowBubbleUpdateDot = false; mMainExecutor = mainExecutor; + mBgExecutor = bgExecutor; mTaskId = INVALID_TASK_ID; mAppIntent = null; mDesiredHeight = Integer.MAX_VALUE; @@ -270,24 +280,21 @@ public class Bubble implements BubbleViewProvider { } /** Creates an app bubble. */ - public static Bubble createAppBubble( - Intent intent, - UserHandle user, - @Nullable Icon icon, - Executor mainExecutor) { + public static Bubble createAppBubble(Intent intent, UserHandle user, @Nullable Icon icon, + @ShellMainThread Executor mainExecutor, @ShellBackgroundThread Executor bgExecutor) { return new Bubble(intent, user, icon, /* isAppBubble= */ true, /* key= */ getAppBubbleKeyForApp(intent.getPackage(), user), - mainExecutor); + mainExecutor, bgExecutor); } /** Creates a shortcut bubble. */ public static Bubble createShortcutBubble( ShortcutInfo info, - Executor mainExecutor) { - return new Bubble(info, mainExecutor); + @ShellMainThread Executor mainExecutor, @ShellBackgroundThread Executor bgExecutor) { + return new Bubble(info, mainExecutor, bgExecutor); } /** @@ -312,7 +319,7 @@ public class Bubble implements BubbleViewProvider { public Bubble(@NonNull final BubbleEntry entry, final Bubbles.BubbleMetadataFlagListener listener, final Bubbles.PendingIntentCanceledListener intentCancelListener, - Executor mainExecutor) { + @ShellMainThread Executor mainExecutor, @ShellBackgroundThread Executor bgExecutor) { mIsAppBubble = false; mKey = entry.getKey(); mGroupKey = entry.getGroupKey(); @@ -327,6 +334,7 @@ public class Bubble implements BubbleViewProvider { }); }; mMainExecutor = mainExecutor; + mBgExecutor = bgExecutor; mTaskId = INVALID_TASK_ID; setEntry(entry); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java index b28b2186db7a..221416341dca 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java @@ -1495,7 +1495,7 @@ public class BubbleController implements ConfigurationChangeListener, b.setAppBubbleIntent(intent); } else { // App bubble does not exist, lets add and expand it - b = Bubble.createAppBubble(intent, user, icon, mMainExecutor); + b = Bubble.createAppBubble(intent, user, icon, mMainExecutor, mBackgroundExecutor); } ProtoLog.d(WM_SHELL_BUBBLES, "inflateAndAdd %s", appBubbleKey); b.setShouldAutoExpand(true); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java index 3c6c6fa0d8d5..4ad1802cba7f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java @@ -43,6 +43,8 @@ import com.android.wm.shell.R; import com.android.wm.shell.bubbles.Bubbles.DismissReason; import com.android.wm.shell.common.bubbles.BubbleBarUpdate; import com.android.wm.shell.common.bubbles.RemovedBubble; +import com.android.wm.shell.shared.annotations.ShellBackgroundThread; +import com.android.wm.shell.shared.annotations.ShellMainThread; import java.io.PrintWriter; import java.util.ArrayList; @@ -201,6 +203,7 @@ public class BubbleData { private final BubblePositioner mPositioner; private final BubbleEducationController mEducationController; private final Executor mMainExecutor; + private final Executor mBgExecutor; /** Bubbles that are actively in the stack. */ private final List<Bubble> mBubbles; /** Bubbles that aged out to overflow. */ @@ -246,12 +249,14 @@ public class BubbleData { private HashMap<String, String> mSuppressedGroupKeys = new HashMap<>(); public BubbleData(Context context, BubbleLogger bubbleLogger, BubblePositioner positioner, - BubbleEducationController educationController, Executor mainExecutor) { + BubbleEducationController educationController, @ShellMainThread Executor mainExecutor, + @ShellBackgroundThread Executor bgExecutor) { mContext = context; mLogger = bubbleLogger; mPositioner = positioner; mEducationController = educationController; mMainExecutor = mainExecutor; + mBgExecutor = bgExecutor; mOverflow = new BubbleOverflow(context, positioner); mBubbles = new ArrayList<>(); mOverflowBubbles = new ArrayList<>(); @@ -431,7 +436,8 @@ public class BubbleData { bubbleToReturn = new Bubble(entry, mBubbleMetadataFlagListener, mCancelledListener, - mMainExecutor); + mMainExecutor, + mBgExecutor); } else { // If there's no entry it must be a persisted bubble bubbleToReturn = persistedBubble; @@ -450,7 +456,7 @@ public class BubbleData { String bubbleKey = Bubble.getBubbleKeyForShortcut(info); Bubble bubbleToReturn = findAndRemoveBubbleFromOverflow(bubbleKey); if (bubbleToReturn == null) { - bubbleToReturn = Bubble.createShortcutBubble(info, mMainExecutor); + bubbleToReturn = Bubble.createShortcutBubble(info, mMainExecutor, mBgExecutor); } return bubbleToReturn; } @@ -461,7 +467,7 @@ public class BubbleData { user); Bubble bubbleToReturn = findAndRemoveBubbleFromOverflow(bubbleKey); if (bubbleToReturn == null) { - bubbleToReturn = Bubble.createAppBubble(intent, user, null, mMainExecutor); + bubbleToReturn = Bubble.createAppBubble(intent, user, null, mMainExecutor, mBgExecutor); } return bubbleToReturn; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDataRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDataRepository.kt index df12999afc9d..818ba45bec42 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDataRepository.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDataRepository.kt @@ -31,6 +31,9 @@ import com.android.wm.shell.bubbles.storage.BubbleEntity import com.android.wm.shell.bubbles.storage.BubblePersistentRepository import com.android.wm.shell.bubbles.storage.BubbleVolatileRepository import com.android.wm.shell.common.ShellExecutor +import com.android.wm.shell.shared.annotations.ShellBackgroundThread +import com.android.wm.shell.shared.annotations.ShellMainThread +import java.util.concurrent.Executor import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -41,7 +44,8 @@ import kotlinx.coroutines.yield class BubbleDataRepository( private val launcherApps: LauncherApps, - private val mainExecutor: ShellExecutor, + @ShellMainThread private val mainExecutor: ShellExecutor, + @ShellBackgroundThread private val bgExecutor: Executor, private val persistentRepository: BubblePersistentRepository, ) { private val volatileRepository = BubbleVolatileRepository(launcherApps) @@ -259,8 +263,8 @@ class BubbleDataRepository( entity.locus, entity.isDismissable, mainExecutor, - bubbleMetadataFlagListener - ) + bgExecutor, + bubbleMetadataFlagListener) } } mainExecutor.execute { cb(bubbles) } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 955361ffac1b..63a25730f1aa 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -164,8 +164,10 @@ public abstract class WMShellModule { BubbleLogger logger, BubblePositioner positioner, BubbleEducationController educationController, - @ShellMainThread ShellExecutor mainExecutor) { - return new BubbleData(context, logger, positioner, educationController, mainExecutor); + @ShellMainThread ShellExecutor mainExecutor, + @ShellBackgroundThread ShellExecutor bgExecutor) { + return new BubbleData(context, logger, positioner, educationController, mainExecutor, + bgExecutor); } // Note: Handler needed for LauncherApps.register @@ -198,7 +200,7 @@ public abstract class WMShellModule { IWindowManager wmService) { return new BubbleController(context, shellInit, shellCommandHandler, shellController, data, null /* synchronizer */, floatingContentCoordinator, - new BubbleDataRepository(launcherApps, mainExecutor, + new BubbleDataRepository(launcherApps, mainExecutor, bgExecutor, new BubblePersistentRepository(context)), statusBarService, windowManager, windowManagerShellWrapper, userManager, launcherApps, logger, taskStackListener, organizer, positioner, displayController, diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt index e35995775f76..9ec62c965a14 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt @@ -124,6 +124,7 @@ class BubbleDataRepositoryTest : ShellTestCase() { private val testHandler = Handler(Looper.getMainLooper()) private val mainExecutor = HandlerExecutor(testHandler) + private val bgExecutor = HandlerExecutor(testHandler) private val launcherApps = mock<LauncherApps>() private val persistedBubbles = SparseArray<List<BubbleEntity>>() @@ -134,7 +135,8 @@ class BubbleDataRepositoryTest : ShellTestCase() { @Before fun setup() { persistentRepository = BubblePersistentRepository(mContext) - dataRepository = spy(BubbleDataRepository(launcherApps, mainExecutor, persistentRepository)) + dataRepository = + spy(BubbleDataRepository(launcherApps, mainExecutor, bgExecutor, persistentRepository)) persistedBubbles.put(0, user0BubbleEntities) persistedBubbles.put(1, user1BubbleEntities) diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java index c138a2498d35..859602ec709f 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java @@ -117,6 +117,8 @@ public class BubbleDataTest extends ShellTestCase { private BubbleEducationController mEducationController; @Mock private ShellExecutor mMainExecutor; + @Mock + private ShellExecutor mBgExecutor; @Captor private ArgumentCaptor<BubbleData.Update> mUpdateCaptor; @@ -144,47 +146,47 @@ public class BubbleDataTest extends ShellTestCase { when(ranking.isTextChanged()).thenReturn(true); mEntryInterruptive = createBubbleEntry(1, "interruptive", "package.d", ranking); mBubbleInterruptive = new Bubble(mEntryInterruptive, mBubbleMetadataFlagListener, null, - mMainExecutor); + mMainExecutor, mBgExecutor); mEntryDismissed = createBubbleEntry(1, "dismissed", "package.d", null); mBubbleDismissed = new Bubble(mEntryDismissed, mBubbleMetadataFlagListener, null, - mMainExecutor); + mMainExecutor, mBgExecutor); mEntryLocusId = createBubbleEntry(1, "keyLocus", "package.e", null, new LocusId("locusId1")); mBubbleLocusId = new Bubble(mEntryLocusId, mBubbleMetadataFlagListener, null /* pendingIntentCanceledListener */, - mMainExecutor); + mMainExecutor, mBgExecutor); mBubbleA1 = new Bubble(mEntryA1, mBubbleMetadataFlagListener, mPendingIntentCanceledListener, - mMainExecutor); + mMainExecutor, mBgExecutor); mBubbleA2 = new Bubble(mEntryA2, mBubbleMetadataFlagListener, mPendingIntentCanceledListener, - mMainExecutor); + mMainExecutor, mBgExecutor); mBubbleA3 = new Bubble(mEntryA3, mBubbleMetadataFlagListener, mPendingIntentCanceledListener, - mMainExecutor); + mMainExecutor, mBgExecutor); mBubbleB1 = new Bubble(mEntryB1, mBubbleMetadataFlagListener, mPendingIntentCanceledListener, - mMainExecutor); + mMainExecutor, mBgExecutor); mBubbleB2 = new Bubble(mEntryB2, mBubbleMetadataFlagListener, mPendingIntentCanceledListener, - mMainExecutor); + mMainExecutor, mBgExecutor); mBubbleB3 = new Bubble(mEntryB3, mBubbleMetadataFlagListener, mPendingIntentCanceledListener, - mMainExecutor); + mMainExecutor, mBgExecutor); mBubbleC1 = new Bubble(mEntryC1, mBubbleMetadataFlagListener, mPendingIntentCanceledListener, - mMainExecutor); + mMainExecutor, mBgExecutor); Intent appBubbleIntent = new Intent(mContext, BubblesTestActivity.class); appBubbleIntent.setPackage(mContext.getPackageName()); @@ -192,12 +194,12 @@ public class BubbleDataTest extends ShellTestCase { appBubbleIntent, new UserHandle(1), mock(Icon.class), - mMainExecutor); + mMainExecutor, mBgExecutor); mPositioner = new TestableBubblePositioner(mContext, mContext.getSystemService(WindowManager.class)); mBubbleData = new BubbleData(getContext(), mBubbleLogger, mPositioner, mEducationController, - mMainExecutor); + mMainExecutor, mBgExecutor); // Used by BubbleData to set lastAccessedTime when(mTimeSource.currentTimeMillis()).thenReturn(1000L); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTest.java index afec1ee12341..50c4a1828026 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTest.java @@ -61,6 +61,8 @@ public class BubbleTest extends ShellTestCase { private StatusBarNotification mSbn; @Mock private ShellExecutor mMainExecutor; + @Mock + private ShellExecutor mBgExecutor; private BubbleEntry mBubbleEntry; private Bundle mExtras; @@ -85,7 +87,8 @@ public class BubbleTest extends ShellTestCase { when(mNotif.getBubbleMetadata()).thenReturn(metadata); when(mSbn.getKey()).thenReturn("mock"); mBubbleEntry = new BubbleEntry(mSbn, null, true, false, false, false); - mBubble = new Bubble(mBubbleEntry, mBubbleMetadataFlagListener, null, mMainExecutor); + mBubble = new Bubble(mBubbleEntry, mBubbleMetadataFlagListener, null, mMainExecutor, + mBgExecutor); } @Test @@ -176,7 +179,8 @@ public class BubbleTest extends ShellTestCase { @Test public void testBubbleIsConversation_hasNoShortcut() { - Bubble bubble = new Bubble(mBubbleEntry, mBubbleMetadataFlagListener, null, mMainExecutor); + Bubble bubble = new Bubble(mBubbleEntry, mBubbleMetadataFlagListener, null, mMainExecutor, + mBgExecutor); assertThat(bubble.getShortcutInfo()).isNull(); assertThat(bubble.isConversation()).isFalse(); } @@ -199,7 +203,7 @@ public class BubbleTest extends ShellTestCase { Intent intent = new Intent(mContext, BubblesTestActivity.class); intent.setPackage(mContext.getPackageName()); Bubble bubble = Bubble.createAppBubble(intent, new UserHandle(1 /* userId */), - null /* icon */, mMainExecutor); + null /* icon */, mMainExecutor, mBgExecutor); BubbleInfo bubbleInfo = bubble.asBubbleBarBubble(); assertThat(bubble.getShortcutInfo()).isNull(); @@ -215,6 +219,6 @@ public class BubbleTest extends ShellTestCase { .build(); return new Bubble("mockKey", shortcutInfo, 10, Resources.ID_NULL, "mockTitle", 0 /* taskId */, "mockLocus", true /* isDismissible */, - mMainExecutor, mBubbleMetadataFlagListener); + mMainExecutor, mBgExecutor, mBubbleMetadataFlagListener); } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleViewInfoTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleViewInfoTest.kt index 4a4c5e860bb2..8035e917d5b4 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleViewInfoTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleViewInfoTest.kt @@ -70,6 +70,7 @@ class BubbleViewInfoTest : ShellTestCase() { private lateinit var bubble: Bubble private lateinit var bubbleController: BubbleController private lateinit var mainExecutor: ShellExecutor + private lateinit var bgExecutor: ShellExecutor private lateinit var bubbleStackView: BubbleStackView private lateinit var bubbleBarLayerView: BubbleBarLayerView private lateinit var bubblePositioner: BubblePositioner @@ -92,6 +93,7 @@ class BubbleViewInfoTest : ShellTestCase() { ) mainExecutor = TestShellExecutor() + bgExecutor = TestShellExecutor() val windowManager = context.getSystemService(WindowManager::class.java) val shellInit = ShellInit(mainExecutor) val shellCommandHandler = ShellCommandHandler() @@ -104,7 +106,8 @@ class BubbleViewInfoTest : ShellTestCase() { mock<BubbleLogger>(), bubblePositioner, BubbleEducationController(context), - mainExecutor + mainExecutor, + bgExecutor ) val surfaceSynchronizer = { obj: Runnable -> obj.run() } @@ -132,7 +135,7 @@ class BubbleViewInfoTest : ShellTestCase() { null, mainExecutor, mock<Handler>(), - mock<ShellExecutor>(), + bgExecutor, mock<TaskViewTransitions>(), mock<Transitions>(), mock<SyncTransactionQueue>(), @@ -256,7 +259,7 @@ class BubbleViewInfoTest : ShellTestCase() { "mockLocus", true /* isDismissible */, mainExecutor, - metadataFlagListener - ) + bgExecutor, + metadataFlagListener) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubbleEducationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubbleEducationControllerTest.kt index 2021f02e5a8a..55aff130f691 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubbleEducationControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubbleEducationControllerTest.kt @@ -123,11 +123,12 @@ class BubbleEducationControllerTest : SysUiStateTest() { /* taskId= */ 0, "locus", /* isDismissable= */ true, + directExecutor(), directExecutor() ) {} } else { val intent = Intent(Intent.ACTION_VIEW).setPackage(mContext.packageName) - Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor()) + Bubble.createAppBubble(intent, UserHandle(1), null, directExecutor(), directExecutor()) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index e5e04dc9b82f..9dd3e53efa63 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -459,7 +459,7 @@ public class BubblesTest extends SysuiTestCase { mContext.getSystemService(WindowManager.class)); mPositioner.setMaxBubbles(5); mBubbleData = new BubbleData(mContext, mBubbleLogger, mPositioner, mEducationController, - syncExecutor); + syncExecutor, syncExecutor); when(mUserManager.getProfiles(ActivityManager.getCurrentUser())).thenReturn( Collections.singletonList(mock(UserInfo.class))); @@ -2465,9 +2465,10 @@ public class BubblesTest extends SysuiTestCase { workEntry.setBubbleMetadata(getMetadata()); workEntry.setFlagBubble(true); + SyncExecutor executor = new SyncExecutor(); return new Bubble(mBubblesManager.notifToBubbleEntry(workEntry), null, - mock(Bubbles.PendingIntentCanceledListener.class), new SyncExecutor()); + mock(Bubbles.PendingIntentCanceledListener.class), executor, executor); } private BubbleEntry createBubbleEntry(boolean isConversation) { |