diff options
| author | 2019-12-19 15:43:20 -0500 | |
|---|---|---|
| committer | 2019-12-23 09:35:44 -0500 | |
| commit | c7cf9fc1dec73430fd510a871ac42b96f3d6dfea (patch) | |
| tree | 1a2312b118ca64c01239d00197d24ccd74f381a9 | |
| parent | cd87f72f02009d10b186da4824549b755245f122 (diff) | |
Start removing Dependency.get(UiOffloadThread.class)
This actually begins the process of deprecation and removing
UiOffloadThread in favor of using Executors directly.
This CL hits the easiest spots in the code. There are a few
more remaining calls that should be in their own independent CLs.
Bug: 146567476
Test: atest SystemUITests
Change-Id: I2542cc61653f330a1931b15a57e3b7c77d18e2e6
27 files changed, 220 insertions, 124 deletions
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index 1b171e87bf4a..867100fe5351 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -59,7 +59,6 @@ import com.android.systemui.BatteryMeterView; import com.android.systemui.Dependency; import com.android.systemui.Prefs; import com.android.systemui.R; -import com.android.systemui.UiOffloadThread; import com.android.systemui.assist.AssistManager; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.bubbles.BubbleController; @@ -68,6 +67,7 @@ import com.android.systemui.car.CarDeviceProvisionedListener; import com.android.systemui.car.CarServiceProvider; import com.android.systemui.classifier.FalsingLog; import com.android.systemui.colorextraction.SysuiColorExtractor; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.fragments.FragmentHostManager; import com.android.systemui.keyguard.DismissCallbackRegistry; import com.android.systemui.keyguard.KeyguardViewMediator; @@ -141,6 +141,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Map; import java.util.Optional; +import java.util.concurrent.Executor; import javax.inject.Named; import javax.inject.Provider; @@ -273,7 +274,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt NotificationAlertingManager notificationAlertingManager, DisplayMetrics displayMetrics, MetricsLogger metricsLogger, - UiOffloadThread uiOffloadThread, + @UiBackground Executor uiBgExecutor, NotificationMediaManager notificationMediaManager, NotificationLockscreenUserManager lockScreenUserManager, NotificationRemoteInputManager remoteInputManager, @@ -353,7 +354,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt notificationAlertingManager, displayMetrics, metricsLogger, - uiOffloadThread, + uiBgExecutor, notificationMediaManager, lockScreenUserManager, remoteInputManager, diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java index 7b21d9d8a2d7..e3bb293fa6f9 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java @@ -25,12 +25,12 @@ import android.util.DisplayMetrics; import com.android.internal.logging.MetricsLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.ViewMediatorCallback; -import com.android.systemui.UiOffloadThread; import com.android.systemui.assist.AssistManager; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.bubbles.BubbleController; import com.android.systemui.car.CarServiceProvider; import com.android.systemui.colorextraction.SysuiColorExtractor; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.keyguard.DismissCallbackRegistry; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.keyguard.ScreenLifecycle; @@ -96,6 +96,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.volume.VolumeComponent; import java.util.Optional; +import java.util.concurrent.Executor; import javax.inject.Named; import javax.inject.Provider; @@ -143,7 +144,7 @@ public class CarStatusBarModule { NotificationAlertingManager notificationAlertingManager, DisplayMetrics displayMetrics, MetricsLogger metricsLogger, - UiOffloadThread uiOffloadThread, + @UiBackground Executor uiBgExecutor, NotificationMediaManager notificationMediaManager, NotificationLockscreenUserManager lockScreenUserManager, NotificationRemoteInputManager remoteInputManager, @@ -222,7 +223,7 @@ public class CarStatusBarModule { notificationAlertingManager, displayMetrics, metricsLogger, - uiOffloadThread, + uiBgExecutor, notificationMediaManager, lockScreenUserManager, remoteInputManager, diff --git a/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java b/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java index a726b42f714f..d5a46de980f9 100644 --- a/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java +++ b/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ package com.android.systemui; @@ -36,7 +36,7 @@ public class UiOffloadThread { public UiOffloadThread() { } - public Future<?> submit(Runnable runnable) { + public Future<?> execute(Runnable runnable) { return mExecutorService.submit(runnable); } } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java index 20742d6d2358..eb014ed0fc48 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java @@ -37,8 +37,8 @@ import com.android.internal.logging.MetricsLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.Dependency; -import com.android.systemui.UiOffloadThread; import com.android.systemui.analytics.DataCollector; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; @@ -46,6 +46,7 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.util.sensors.AsyncSensorManager; import java.io.PrintWriter; +import java.util.concurrent.Executor; /** * When the phone is locked, listens to touch, sensor and phone events and sends them to @@ -77,7 +78,7 @@ public class FalsingManagerImpl implements FalsingManager { private final DataCollector mDataCollector; private final HumanInteractionClassifier mHumanInteractionClassifier; private final AccessibilityManager mAccessibilityManager; - private final UiOffloadThread mUiOffloadThread; + private final Executor mUiBgExecutor; private boolean mEnforceBouncer = false; private boolean mBouncerOn = false; @@ -137,13 +138,13 @@ public class FalsingManagerImpl implements FalsingManager { } }; - FalsingManagerImpl(Context context) { + FalsingManagerImpl(Context context, @UiBackground Executor uiBgExecutor) { mContext = context; mSensorManager = Dependency.get(AsyncSensorManager.class); mAccessibilityManager = context.getSystemService(AccessibilityManager.class); mDataCollector = DataCollector.getInstance(mContext); mHumanInteractionClassifier = HumanInteractionClassifier.getInstance(mContext); - mUiOffloadThread = Dependency.get(UiOffloadThread.class); + mUiBgExecutor = uiBgExecutor; mScreenOn = context.getSystemService(PowerManager.class).isInteractive(); mMetricsLogger = new MetricsLogger(); @@ -196,7 +197,7 @@ public class FalsingManagerImpl implements FalsingManager { } // This can be expensive, and doesn't need to happen on the main thread. - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { mSensorManager.unregisterListener(mSensorEventListener); }); } @@ -237,7 +238,7 @@ public class FalsingManagerImpl implements FalsingManager { if (s != null) { // This can be expensive, and doesn't need to happen on the main thread. - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { mSensorManager.registerListener( mSensorEventListener, s, SensorManager.SENSOR_DELAY_GAME); }); diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java index 4663b1c60124..f475948b43f7 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java @@ -31,6 +31,7 @@ import com.android.systemui.Dependency; import com.android.systemui.classifier.brightline.BrightLineFalsingManager; import com.android.systemui.classifier.brightline.FalsingDataProvider; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingPlugin; import com.android.systemui.plugins.PluginListener; @@ -39,6 +40,7 @@ import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.sensors.ProximitySensor; import java.io.PrintWriter; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -58,13 +60,16 @@ public class FalsingManagerProxy implements FalsingManager { private DeviceConfig.OnPropertiesChangedListener mDeviceConfigListener; private final DeviceConfigProxy mDeviceConfig; private boolean mBrightlineEnabled; + private Executor mUiBgExecutor; @Inject FalsingManagerProxy(Context context, PluginManager pluginManager, @Main Handler handler, ProximitySensor proximitySensor, - DeviceConfigProxy deviceConfig) { + DeviceConfigProxy deviceConfig, + @UiBackground Executor uiBgExecutor) { mProximitySensor = proximitySensor; + mUiBgExecutor = uiBgExecutor; mProximitySensor.setTag(PROXIMITY_SENSOR_TAG); mProximitySensor.setSensorDelay(SensorManager.SENSOR_DELAY_GAME); mDeviceConfig = deviceConfig; @@ -87,7 +92,7 @@ public class FalsingManagerProxy implements FalsingManager { } public void onPluginDisconnected(FalsingPlugin plugin) { - mInternalFalsingManager = new FalsingManagerImpl(context); + mInternalFalsingManager = new FalsingManagerImpl(context, mUiBgExecutor); } }; @@ -117,7 +122,7 @@ public class FalsingManagerProxy implements FalsingManager { mInternalFalsingManager.cleanup(); } if (!brightlineEnabled) { - mInternalFalsingManager = new FalsingManagerImpl(context); + mInternalFalsingManager = new FalsingManagerImpl(context, mUiBgExecutor); } else { mInternalFalsingManager = new BrightLineFalsingManager( new FalsingDataProvider(context.getResources().getDisplayMetrics()), diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/UiBackground.java b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/UiBackground.java new file mode 100644 index 000000000000..bf2237aa8c11 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/UiBackground.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.dagger.qualifiers; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.inject.Qualifier; + + +/** + * An annotation for injecting instances related to UI operations off the main-thread. + */ +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface UiBackground { +} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java b/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java index 25ac8f868435..f6f3b9985371 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java @@ -11,16 +11,16 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ package com.android.systemui.keyguard; import com.android.internal.policy.IKeyguardDismissCallback; -import com.android.systemui.Dependency; -import com.android.systemui.UiOffloadThread; +import com.android.systemui.dagger.qualifiers.UiBackground; import java.util.ArrayList; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -32,10 +32,12 @@ import javax.inject.Singleton; public class DismissCallbackRegistry { private final ArrayList<DismissCallbackWrapper> mDismissCallbacks = new ArrayList<>(); - private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); + private final Executor mUiBgExecutor; @Inject - public DismissCallbackRegistry() {} + public DismissCallbackRegistry(@UiBackground Executor uiBgExecutor) { + mUiBgExecutor = uiBgExecutor; + } public void addCallback(IKeyguardDismissCallback callback) { mDismissCallbacks.add(new DismissCallbackWrapper(callback)); @@ -44,7 +46,7 @@ public class DismissCallbackRegistry { public void notifyDismissCancelled() { for (int i = mDismissCallbacks.size() - 1; i >= 0; i--) { DismissCallbackWrapper callback = mDismissCallbacks.get(i); - mUiOffloadThread.submit(callback::notifyDismissCancelled); + mUiBgExecutor.execute(callback::notifyDismissCancelled); } mDismissCallbacks.clear(); } @@ -52,7 +54,7 @@ public class DismissCallbackRegistry { public void notifyDismissSucceeded() { for (int i = mDismissCallbacks.size() - 1; i >= 0; i--) { DismissCallbackWrapper callback = mDismissCallbacks.get(i); - mUiOffloadThread.submit(callback::notifyDismissSucceeded); + mUiBgExecutor.execute(callback::notifyDismissSucceeded); } mDismissCallbacks.clear(); } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index beba203b9702..9fcf0221e41a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ package com.android.systemui.keyguard; @@ -81,8 +81,8 @@ import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.SystemUI; import com.android.systemui.SystemUIFactory; -import com.android.systemui.UiOffloadThread; import com.android.systemui.broadcast.BroadcastDispatcher; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.phone.BiometricUnlockController; import com.android.systemui.statusbar.phone.KeyguardBypassController; @@ -95,6 +95,7 @@ import com.android.systemui.util.InjectionInflationController; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -211,7 +212,7 @@ public class KeyguardViewMediator extends SystemUI { private AudioManager mAudioManager; private StatusBarManager mStatusBarManager; private final StatusBarWindowController mStatusBarWindowController; - private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); + private final Executor mUiBgExecutor; private boolean mSystemReady; private boolean mBootCompleted; @@ -689,7 +690,8 @@ public class KeyguardViewMediator extends SystemUI { BroadcastDispatcher broadcastDispatcher, StatusBarWindowController statusBarWindowController, Lazy<StatusBarKeyguardViewManager> statusBarKeyguardViewManagerLazy, - DismissCallbackRegistry dismissCallbackRegistry) { + DismissCallbackRegistry dismissCallbackRegistry, + @UiBackground Executor uiBgExecutor) { super(context); mFalsingManager = falsingManager; mLockPatternUtils = lockPatternUtils; @@ -697,6 +699,7 @@ public class KeyguardViewMediator extends SystemUI { mStatusBarWindowController = statusBarWindowController; mStatusBarKeyguardViewManagerLazy = statusBarKeyguardViewManagerLazy; mDismissCallbackRegistry = dismissCallbackRegistry; + mUiBgExecutor = uiBgExecutor; } public void userActivity() { @@ -1662,7 +1665,7 @@ public class KeyguardViewMediator extends SystemUI { private void handleKeyguardDone() { Trace.beginSection("KeyguardViewMediator#handleKeyguardDone"); final int currentUser = KeyguardUpdateMonitor.getCurrentUser(); - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { if (mLockPatternUtils.isSecure(currentUser)) { mLockPatternUtils.getDevicePolicyManager().reportKeyguardDismissed(currentUser); } @@ -1705,7 +1708,7 @@ public class KeyguardViewMediator extends SystemUI { final UserHandle currentUser = new UserHandle(currentUserId); final UserManager um = (UserManager) mContext.getSystemService( Context.USER_SERVICE); - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { for (int profileId : um.getProfileIdsWithDisabled(currentUser.getIdentifier())) { mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, UserHandle.of(profileId)); } @@ -1756,7 +1759,7 @@ public class KeyguardViewMediator extends SystemUI { mUiSoundsStreamType = mAudioManager.getUiSoundsStreamType(); } - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { // If the stream is muted, don't play the sound if (mAudioManager.isStreamMute(mUiSoundsStreamType)) return; @@ -1775,7 +1778,7 @@ public class KeyguardViewMediator extends SystemUI { } private void updateActivityLockScreenState(boolean showing, boolean aodShowing) { - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { if (DEBUG) { Log.d(TAG, "updateActivityLockScreenState(" + showing + ", " + aodShowing + ")"); } @@ -1854,7 +1857,7 @@ public class KeyguardViewMediator extends SystemUI { // Posting to mUiOffloadThread to ensure that calls to ActivityTaskManager will be in // order. final int keyguardFlag = flags; - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { try { ActivityTaskManager.getService().keyguardGoingAway(keyguardFlag); } catch (RemoteException e) { @@ -2217,7 +2220,7 @@ public class KeyguardViewMediator extends SystemUI { } }); updateInputRestrictedLocked(); - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { mTrustManager.reportKeyguardShowingChanged(); }); } diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index 0a89017ff05d..f39d1ecb0585 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -100,7 +100,7 @@ public class PipManager implements BasePipManager { mMenuController.onActivityPinned(); mAppOpsListener.onActivityPinned(packageName); - Dependency.get(UiOffloadThread.class).submit(() -> { + Dependency.get(UiOffloadThread.class).execute(() -> { WindowManagerWrapper.getInstance().setPipVisibility(true); }); } @@ -114,7 +114,7 @@ public class PipManager implements BasePipManager { mTouchHandler.onActivityUnpinned(topActivity); mAppOpsListener.onActivityUnpinned(); - Dependency.get(UiOffloadThread.class).submit(() -> { + Dependency.get(UiOffloadThread.class).execute(() -> { WindowManagerWrapper.getInstance().setPipVisibility(topActivity != null); }); } diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java index 696db683a7d0..1d92375a7541 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java @@ -750,7 +750,7 @@ public class PipManager implements BasePipManager { } private void updatePipVisibility(final boolean visible) { - Dependency.get(UiOffloadThread.class).submit(() -> { + Dependency.get(UiOffloadThread.class).execute(() -> { WindowManagerWrapper.getInstance().setPipVisibility(visible); }); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java index 49bed15c79a8..93f58053f486 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java @@ -54,12 +54,13 @@ import com.android.systemui.Dependency; import com.android.systemui.DockedStackExistsListener; import com.android.systemui.R; import com.android.systemui.SystemUI; -import com.android.systemui.UiOffloadThread; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.NotificationChannels; import java.util.List; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -74,16 +75,18 @@ public class InstantAppNotifier extends SystemUI public static final int NUM_TASKS_FOR_INSTANT_APP_INFO = 5; private final Handler mHandler = new Handler(); - private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); + private final Executor mUiBgExecutor; private final ArraySet<Pair<String, Integer>> mCurrentNotifs = new ArraySet<>(); private final CommandQueue mCommandQueue; private boolean mDockedStackExists; private KeyguardStateController mKeyguardStateController; @Inject - public InstantAppNotifier(Context context, CommandQueue commandQueue) { + public InstantAppNotifier(Context context, CommandQueue commandQueue, + @UiBackground Executor uiBgExecutor) { super(context); mCommandQueue = commandQueue; + mUiBgExecutor = uiBgExecutor; } @Override @@ -151,7 +154,7 @@ public class InstantAppNotifier extends SystemUI private void updateForegroundInstantApps() { NotificationManager noMan = mContext.getSystemService(NotificationManager.class); IPackageManager pm = AppGlobals.getPackageManager(); - mUiOffloadThread.submit( + mUiBgExecutor.execute( () -> { ArraySet<Pair<String, Integer>> notifs = new ArraySet<>(mCurrentNotifs); try { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java index 77ccf19f65ee..3e1b5bd0571e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ package com.android.systemui.statusbar.notification.logging; @@ -32,7 +32,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; -import com.android.systemui.UiOffloadThread; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.statusbar.NotificationListener; @@ -47,6 +47,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -68,7 +69,7 @@ public class NotificationLogger implements StateListener { // Dependencies: private final NotificationListenerService mNotificationListener; - private final UiOffloadThread mUiOffloadThread; + private final Executor mUiBgExecutor; private final NotificationEntryManager mEntryManager; private HeadsUpManager mHeadsUpManager; private final ExpansionStateLogger mExpansionStateLogger; @@ -193,12 +194,12 @@ public class NotificationLogger implements StateListener { @Inject public NotificationLogger(NotificationListener notificationListener, - UiOffloadThread uiOffloadThread, + @UiBackground Executor uiBgExecutor, NotificationEntryManager entryManager, StatusBarStateController statusBarStateController, ExpansionStateLogger expansionStateLogger) { mNotificationListener = notificationListener; - mUiOffloadThread = uiOffloadThread; + mUiBgExecutor = uiBgExecutor; mEntryManager = entryManager; mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); @@ -319,7 +320,7 @@ public class NotificationLogger implements StateListener { final NotificationVisibility[] newlyVisibleAr = cloneVisibilitiesAsArr(newlyVisible); final NotificationVisibility[] noLongerVisibleAr = cloneVisibilitiesAsArr(noLongerVisible); - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { try { mBarService.onNotificationVisibilityChanged(newlyVisibleAr, noLongerVisibleAr); } catch (RemoteException e) { @@ -429,13 +430,13 @@ public class NotificationLogger implements StateListener { * Notification key -> last logged expansion state, should be accessed in UI thread only. */ private final Map<String, Boolean> mLoggedExpansionState = new ArrayMap<>(); - private final UiOffloadThread mUiOffloadThread; + private final Executor mUiBgExecutor; @VisibleForTesting IStatusBarService mBarService; @Inject - public ExpansionStateLogger(UiOffloadThread uiOffloadThread) { - mUiOffloadThread = uiOffloadThread; + public ExpansionStateLogger(@UiBackground Executor uiBgExecutor) { + mUiBgExecutor = uiBgExecutor; mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); @@ -513,7 +514,7 @@ public class NotificationLogger implements StateListener { } mLoggedExpansionState.put(key, state.mIsExpanded); final State stateToBeLogged = new State(state); - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { try { mBarService.onNotificationExpansionChanged(key, stateToBeLogged.mIsUserAction, stateToBeLogged.mIsExpanded, stateToBeLogged.mLocation.ordinal()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java index 90ea6e344226..0a1a2fe3ee54 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ package com.android.systemui.statusbar.notification.row.wrapper; @@ -244,17 +244,18 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp mUiOffloadThread = Dependency.get(UiOffloadThread.class); } if (view.isAttachedToWindow()) { - mUiOffloadThread.submit(() -> pendingIntent.registerCancelListener(listener)); + mUiOffloadThread.execute(() -> pendingIntent.registerCancelListener(listener)); } view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { - mUiOffloadThread.submit(() -> pendingIntent.registerCancelListener(listener)); + mUiOffloadThread.execute(() -> pendingIntent.registerCancelListener(listener)); } @Override public void onViewDetachedFromWindow(View v) { - mUiOffloadThread.submit(() -> pendingIntent.unregisterCancelListener(listener)); + mUiOffloadThread.execute( + () -> pendingIntent.unregisterCancelListener(listener)); } }); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java index 1df9411019d2..d6336ed3e18a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java @@ -53,7 +53,7 @@ import android.util.Log; import android.util.SparseBooleanArray; import com.android.systemui.Dumpable; -import com.android.systemui.UiOffloadThread; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.statusbar.policy.DeviceProvisionedController; @@ -61,6 +61,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -82,7 +83,7 @@ public class NavigationModeController implements Dumpable { private Context mCurrentUserContext; private final IOverlayManager mOverlayManager; private final DeviceProvisionedController mDeviceProvisionedController; - private final UiOffloadThread mUiOffloadThread; + private final Executor mUiBgExecutor; private SparseBooleanArray mRestoreGesturalNavBarMode = new SparseBooleanArray(); @@ -146,12 +147,12 @@ public class NavigationModeController implements Dumpable { @Inject public NavigationModeController(Context context, DeviceProvisionedController deviceProvisionedController, - UiOffloadThread uiOffloadThread) { + @UiBackground Executor uiBgExecutor) { mContext = context; mCurrentUserContext = context; mOverlayManager = IOverlayManager.Stub.asInterface( ServiceManager.getService(Context.OVERLAY_SERVICE)); - mUiOffloadThread = uiOffloadThread; + mUiBgExecutor = uiBgExecutor; mDeviceProvisionedController = deviceProvisionedController; mDeviceProvisionedController.addCallback(mDeviceProvisionedCallback); @@ -242,7 +243,7 @@ public class NavigationModeController implements Dumpable { mCurrentUserContext = getCurrentUserContext(); int mode = getCurrentInteractionMode(mCurrentUserContext); mMode = mode; - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { Settings.Secure.putString(mCurrentUserContext.getContentResolver(), Secure.NAVIGATION_MODE, String.valueOf(mode)); }); @@ -379,7 +380,7 @@ public class NavigationModeController implements Dumpable { } public void setModeOverlay(String overlayPkg, int userId) { - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { try { mOverlayManager.setEnabledExclusiveInCategory(overlayPkg, userId); if (DEBUG) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 2f39c138bce1..5b34aa7781c1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -40,8 +40,8 @@ import android.util.Log; import com.android.internal.telephony.TelephonyIntents; import com.android.systemui.Dependency; import com.android.systemui.R; -import com.android.systemui.UiOffloadThread; import com.android.systemui.broadcast.BroadcastDispatcher; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.qs.tiles.RotationLockTile; import com.android.systemui.statusbar.CommandQueue; @@ -63,6 +63,7 @@ import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.ZenModeController; import java.util.Locale; +import java.util.concurrent.Executor; /** * This class contains all of the policy about which icons are installed in the status bar at boot @@ -114,7 +115,7 @@ public class PhoneStatusBarPolicy private final DeviceProvisionedController mProvisionedController; private final KeyguardStateController mKeyguardStateController; private final LocationController mLocationController; - private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); + private final Executor mUiBgExecutor; private final SensorPrivacyController mSensorPrivacyController; // Assume it's all good unless we hear otherwise. We don't always seem @@ -131,7 +132,8 @@ public class PhoneStatusBarPolicy private AlarmManager.AlarmClockInfo mNextAlarm; public PhoneStatusBarPolicy(Context context, StatusBarIconController iconController, - CommandQueue commandQueue, BroadcastDispatcher broadcastDispatcher) { + CommandQueue commandQueue, BroadcastDispatcher broadcastDispatcher, + @UiBackground Executor uiBgExecutor) { mContext = context; mIconController = iconController; mCast = Dependency.get(CastController.class); @@ -148,6 +150,7 @@ public class PhoneStatusBarPolicy mKeyguardStateController = Dependency.get(KeyguardStateController.class); mLocationController = Dependency.get(LocationController.class); mSensorPrivacyController = Dependency.get(SensorPrivacyController.class); + mUiBgExecutor = uiBgExecutor; mSlotCast = context.getString(com.android.internal.R.string.status_bar_cast); mSlotHotspot = context.getString(com.android.internal.R.string.status_bar_hotspot); @@ -452,7 +455,7 @@ public class PhoneStatusBarPolicy // getLastResumedActivityUserId needds to acquire the AM lock, which may be contended in // some cases. Since it doesn't really matter here whether it's updated in this frame // or in the next one, we call this method from our UI offload thread. - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { final int userId; try { userId = ActivityTaskManager.getService().getLastResumedActivityUserId(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 312f9c181121..aaed61041c6a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -136,13 +136,13 @@ import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.SystemUI; import com.android.systemui.SystemUIFactory; -import com.android.systemui.UiOffloadThread; import com.android.systemui.assist.AssistManager; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.bubbles.BubbleController; import com.android.systemui.charging.WirelessChargingAnimation; import com.android.systemui.classifier.FalsingLog; import com.android.systemui.colorextraction.SysuiColorExtractor; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.fragments.ExtensionFragmentListener; import com.android.systemui.fragments.FragmentHostManager; import com.android.systemui.keyguard.DismissCallbackRegistry; @@ -232,6 +232,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.util.Map; import java.util.Optional; +import java.util.concurrent.Executor; import javax.inject.Named; import javax.inject.Provider; @@ -471,7 +472,7 @@ public class StatusBar extends SystemUI implements DemoMode, private ViewMediatorCallback mKeyguardViewMediatorCallback; private final ScrimController mScrimController; protected DozeScrimController mDozeScrimController; - private final UiOffloadThread mUiOffloadThread; + private final Executor mUiBgExecutor; protected boolean mDozing; @@ -634,7 +635,7 @@ public class StatusBar extends SystemUI implements DemoMode, NotificationAlertingManager notificationAlertingManager, DisplayMetrics displayMetrics, MetricsLogger metricsLogger, - UiOffloadThread uiOffloadThread, + @UiBackground Executor uiBgExecutor, NotificationMediaManager notificationMediaManager, NotificationLockscreenUserManager lockScreenUserManager, NotificationRemoteInputManager remoteInputManager, @@ -708,7 +709,7 @@ public class StatusBar extends SystemUI implements DemoMode, mNotificationAlertingManager = notificationAlertingManager; mDisplayMetrics = displayMetrics; mMetricsLogger = metricsLogger; - mUiOffloadThread = uiOffloadThread; + mUiBgExecutor = uiBgExecutor; mMediaManager = notificationMediaManager; mLockscreenUserManager = lockScreenUserManager; mRemoteInputManager = remoteInputManager; @@ -885,7 +886,7 @@ public class StatusBar extends SystemUI implements DemoMode, // Lastly, call to the icon policy to install/update all the icons. mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController, mCommandQueue, - mBroadcastDispatcher); + mBroadcastDispatcher, mUiBgExecutor); mSignalPolicy = new StatusBarSignalPolicy(mContext, mIconController); mKeyguardStateController.addCallback(this); @@ -2840,7 +2841,7 @@ public class StatusBar extends SystemUI implements DemoMode, notificationLoad = 1; } final int finalNotificationLoad = notificationLoad; - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { try { mBarService.onPanelRevealed(clearNotificationEffects, finalNotificationLoad); @@ -2849,7 +2850,7 @@ public class StatusBar extends SystemUI implements DemoMode, } }); } else { - mUiOffloadThread.submit(() -> { + mUiBgExecutor.execute(() -> { try { mBarService.onPanelHidden(); } catch (RemoteException ex) { @@ -4019,7 +4020,7 @@ public class StatusBar extends SystemUI implements DemoMode, } void awakenDreams() { - Dependency.get(UiOffloadThread.class).submit(() -> { + mUiBgExecutor.execute(() -> { try { mDreamManager.awaken(); } catch (RemoteException e) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java index e31c53abe988..ce563813953f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java @@ -27,11 +27,11 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.ViewMediatorCallback; -import com.android.systemui.UiOffloadThread; import com.android.systemui.assist.AssistManager; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.bubbles.BubbleController; import com.android.systemui.colorextraction.SysuiColorExtractor; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.keyguard.DismissCallbackRegistry; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.keyguard.ScreenLifecycle; @@ -75,6 +75,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.volume.VolumeComponent; import java.util.Optional; +import java.util.concurrent.Executor; import javax.inject.Named; import javax.inject.Provider; @@ -122,7 +123,7 @@ public class StatusBarModule { NotificationAlertingManager notificationAlertingManager, DisplayMetrics displayMetrics, MetricsLogger metricsLogger, - UiOffloadThread uiOffloadThread, + @UiBackground Executor uiBgExecutor, NotificationMediaManager notificationMediaManager, NotificationLockscreenUserManager lockScreenUserManager, NotificationRemoteInputManager remoteInputManager, @@ -197,7 +198,7 @@ public class StatusBarModule { notificationAlertingManager, displayMetrics, metricsLogger, - uiOffloadThread, + uiBgExecutor, notificationMediaManager, lockScreenUserManager, remoteInputManager, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java index fa584d208eeb..661a7b1319a5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java @@ -47,13 +47,12 @@ import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; import com.android.internal.widget.LockPatternUtils; import com.android.systemui.ActivityIntentHelper; -import com.android.systemui.Dependency; import com.android.systemui.EventLogTags; -import com.android.systemui.UiOffloadThread; import com.android.systemui.assist.AssistManager; import com.android.systemui.bubbles.BubbleController; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; @@ -74,6 +73,8 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.policy.HeadsUpUtil; import com.android.systemui.statusbar.policy.KeyguardStateController; +import java.util.concurrent.Executor; + import javax.inject.Inject; import javax.inject.Singleton; @@ -115,6 +116,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit private final Handler mBackgroundHandler; private final ActivityIntentHelper mActivityIntentHelper; private final BubbleController mBubbleController; + private final Executor mUiBgExecutor; private boolean mIsCollapsingToShowActivityOverLockscreen; @@ -133,7 +135,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit KeyguardStateController keyguardStateController, NotificationInterruptionStateProvider notificationInterruptionStateProvider, MetricsLogger metricsLogger, LockPatternUtils lockPatternUtils, - Handler mainThreadHandler, Handler backgroundHandler, + Handler mainThreadHandler, Handler backgroundHandler, Executor uiBgExecutor, ActivityIntentHelper activityIntentHelper, BubbleController bubbleController) { mContext = context; mNotificationPanel = panel; @@ -160,6 +162,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit mGroupManager = groupManager; mLockPatternUtils = lockPatternUtils; mBackgroundHandler = backgroundHandler; + mUiBgExecutor = uiBgExecutor; mEntryManager.addNotificationEntryListener(new NotificationEntryListener() { @Override public void onPendingEntryAdded(NotificationEntry entry) { @@ -418,7 +421,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit } else { // Stop screensaver if the notification has a fullscreen intent. // (like an incoming phone call) - Dependency.get(UiOffloadThread.class).submit(() -> { + mUiBgExecutor.execute(() -> { try { mDreamManager.awaken(); } catch (RemoteException e) { @@ -521,6 +524,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit private final LockPatternUtils mLockPatternUtils; private final Handler mMainThreadHandler; private final Handler mBackgroundHandler; + private final Executor mUiBgExecutor; private final ActivityIntentHelper mActivityIntentHelper; private final BubbleController mBubbleController; private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; @@ -551,6 +555,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit LockPatternUtils lockPatternUtils, @Main Handler mainThreadHandler, @Background Handler backgroundHandler, + @UiBackground Executor uiBgExecutor, ActivityIntentHelper activityIntentHelper, BubbleController bubbleController, ShadeController shadeController, @@ -576,6 +581,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit mLockPatternUtils = lockPatternUtils; mMainThreadHandler = mainThreadHandler; mBackgroundHandler = backgroundHandler; + mUiBgExecutor = uiBgExecutor; mActivityIntentHelper = activityIntentHelper; mBubbleController = bubbleController; mShadeController = shadeController; @@ -624,6 +630,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit mLockPatternUtils, mMainThreadHandler, mBackgroundHandler, + mUiBgExecutor, mActivityIntentHelper, mBubbleController); } diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/ConcurrencyModule.java b/packages/SystemUI/src/com/android/systemui/util/concurrency/ConcurrencyModule.java index 1c5d979d467f..7cdba8607d86 100644 --- a/packages/SystemUI/src/com/android/systemui/util/concurrency/ConcurrencyModule.java +++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/ConcurrencyModule.java @@ -24,8 +24,10 @@ import android.os.Process; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.dagger.qualifiers.UiBackground; import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import javax.inject.Singleton; @@ -128,4 +130,16 @@ public abstract class ConcurrencyModule { public static DelayableExecutor provideMainDelayableExecutor(@Main Looper looper) { return new ExecutorImpl(new Handler(looper)); } + + /** + * Provide an Executor specifically for running UI operations on a separate thread. + * + * Keep submitted runnables short and to the point, just as with any other UI code. + */ + @Provides + @Singleton + @UiBackground + public static Executor provideUiBackgroundExecutor() { + return Executors.newSingleThreadExecutor(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java index 819a7f6fde1a..c85d600e8447 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java @@ -117,7 +117,7 @@ public abstract class SysuiTestCase { } protected void waitForUiOffloadThread() { - Future<?> future = Dependency.get(UiOffloadThread.class).submit(() -> {}); + Future<?> future = Dependency.get(UiOffloadThread.class).execute(() -> { }); try { future.get(); } catch (InterruptedException | ExecutionException e) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java index 3561e3465898..a19d1df8a713 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java @@ -34,7 +34,9 @@ import com.android.systemui.classifier.brightline.BrightLineFalsingManager; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxyFake; +import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.sensors.ProximitySensor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.After; import org.junit.Before; @@ -55,6 +57,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase { private FalsingManagerProxy mProxy; private DeviceConfigProxy mDeviceConfig; private TestableLooper mTestableLooper; + private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setup() { @@ -77,7 +80,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase { @Test public void test_brightLineFalsingManagerDisabled() { mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mHandler, mProximitySensor, - mDeviceConfig); + mDeviceConfig, mUiBgExecutor); assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class)); } @@ -87,14 +90,14 @@ public class FalsingManagerProxyTest extends SysuiTestCase { BRIGHTLINE_FALSING_MANAGER_ENABLED, "true", false); mTestableLooper.processAllMessages(); mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mHandler, mProximitySensor, - mDeviceConfig); + mDeviceConfig, mUiBgExecutor); assertThat(mProxy.getInternalFalsingManager(), instanceOf(BrightLineFalsingManager.class)); } @Test public void test_brightLineFalsingManagerToggled() throws InterruptedException { mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mHandler, mProximitySensor, - mDeviceConfig); + mDeviceConfig, mUiBgExecutor); assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class)); mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java index 7fa1dbeafced..a00cabc71a0c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ package com.android.systemui.keyguard; @@ -24,6 +24,8 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.policy.IKeyguardDismissCallback; import com.android.systemui.SysuiTestCase; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; @@ -41,10 +43,11 @@ public class DismissCallbackRegistryTest extends SysuiTestCase { private DismissCallbackRegistry mDismissCallbackRegistry; private @Mock IKeyguardDismissCallback mMockCallback; private @Mock IKeyguardDismissCallback mMockCallback2; + private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setUp() throws Exception { - mDismissCallbackRegistry = new DismissCallbackRegistry(); + mDismissCallbackRegistry = new DismissCallbackRegistry(mUiBgExecutor); MockitoAnnotations.initMocks(this); } @@ -52,7 +55,7 @@ public class DismissCallbackRegistryTest extends SysuiTestCase { public void testCancelled() throws Exception { mDismissCallbackRegistry.addCallback(mMockCallback); mDismissCallbackRegistry.notifyDismissCancelled(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mMockCallback).onDismissCancelled(); } @@ -61,7 +64,7 @@ public class DismissCallbackRegistryTest extends SysuiTestCase { mDismissCallbackRegistry.addCallback(mMockCallback); mDismissCallbackRegistry.addCallback(mMockCallback2); mDismissCallbackRegistry.notifyDismissCancelled(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mMockCallback).onDismissCancelled(); verify(mMockCallback2).onDismissCancelled(); } @@ -70,7 +73,7 @@ public class DismissCallbackRegistryTest extends SysuiTestCase { public void testSucceeded() throws Exception { mDismissCallbackRegistry.addCallback(mMockCallback); mDismissCallbackRegistry.notifyDismissSucceeded(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mMockCallback).onDismissSucceeded(); } @@ -79,7 +82,7 @@ public class DismissCallbackRegistryTest extends SysuiTestCase { mDismissCallbackRegistry.addCallback(mMockCallback); mDismissCallbackRegistry.addCallback(mMockCallback2); mDismissCallbackRegistry.notifyDismissSucceeded(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mMockCallback).onDismissSucceeded(); verify(mMockCallback2).onDismissSucceeded(); } @@ -89,7 +92,7 @@ public class DismissCallbackRegistryTest extends SysuiTestCase { mDismissCallbackRegistry.addCallback(mMockCallback); mDismissCallbackRegistry.notifyDismissSucceeded(); mDismissCallbackRegistry.notifyDismissSucceeded(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mMockCallback, times(1)).onDismissSucceeded(); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java index a8a2b33215e5..64fbc1bac658 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java @@ -38,6 +38,8 @@ import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarWindowController; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; @@ -58,6 +60,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { private @Mock StatusBarWindowController mStatusBarWindowController; private @Mock BroadcastDispatcher mBroadcastDispatcher; private @Mock DismissCallbackRegistry mDismissCallbackRegistry; + private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private FalsingManagerFake mFalsingManager; @@ -75,7 +78,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { mViewMediator = new KeyguardViewMediator( mContext, mFalsingManager, mLockPatternUtils, mBroadcastDispatcher, mStatusBarWindowController, () -> mStatusBarKeyguardViewManager, - mDismissCallbackRegistry); + mDismissCallbackRegistry, mUiBgExecutor); }); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java index 4f1ffbe50fc1..2662c80dce1d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java @@ -29,10 +29,10 @@ import androidx.test.filters.SmallTest; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; -import com.android.systemui.Dependency; import com.android.systemui.SysuiTestCase; -import com.android.systemui.UiOffloadThread; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; @@ -52,12 +52,12 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { private NotificationLogger.ExpansionStateLogger mLogger; @Mock private IStatusBarService mBarService; + private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setUp() { MockitoAnnotations.initMocks(this); - mLogger = new NotificationLogger.ExpansionStateLogger( - Dependency.get(UiOffloadThread.class)); + mLogger = new NotificationLogger.ExpansionStateLogger(mUiBgExecutor); mLogger.mBarService = mBarService; } @@ -66,7 +66,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { mLogger.onVisibilityChanged( Collections.singletonList(createNotificationVisibility(NOTIFICATION_KEY, true)), Collections.emptyList()); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, Mockito.never()).onNotificationExpansionChanged( eq(NOTIFICATION_KEY), anyBoolean(), anyBoolean(), anyInt()); @@ -76,7 +76,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { public void testExpanded() throws RemoteException { mLogger.onExpansionChanged(NOTIFICATION_KEY, false, true, NotificationVisibility.NotificationLocation.LOCATION_UNKNOWN); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, Mockito.never()).onNotificationExpansionChanged( eq(NOTIFICATION_KEY), anyBoolean(), anyBoolean(), anyInt()); @@ -89,7 +89,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { mLogger.onVisibilityChanged( Collections.singletonList(createNotificationVisibility(NOTIFICATION_KEY, true)), Collections.emptyList()); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, Mockito.never()).onNotificationExpansionChanged( eq(NOTIFICATION_KEY), anyBoolean(), anyBoolean(), anyInt()); @@ -102,7 +102,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { mLogger.onVisibilityChanged( Collections.singletonList(createNotificationVisibility(NOTIFICATION_KEY, true)), Collections.emptyList()); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService).onNotificationExpansionChanged( NOTIFICATION_KEY, true, true, @@ -117,7 +117,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { Collections.singletonList(createNotificationVisibility(NOTIFICATION_KEY, true, NotificationVisibility.NotificationLocation.LOCATION_MAIN_AREA)), Collections.emptyList()); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService).onNotificationExpansionChanged( NOTIFICATION_KEY, false, true, @@ -133,7 +133,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { Collections.emptyList()); mLogger.onExpansionChanged(NOTIFICATION_KEY, false, true, NotificationVisibility.NotificationLocation.LOCATION_FIRST_HEADS_UP); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService).onNotificationExpansionChanged( NOTIFICATION_KEY, false, true, @@ -150,7 +150,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { NotificationVisibility.NotificationLocation.LOCATION_UNKNOWN); mLogger.onExpansionChanged(NOTIFICATION_KEY, false, true, NotificationVisibility.NotificationLocation.LOCATION_UNKNOWN); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService).onNotificationExpansionChanged( NOTIFICATION_KEY, false, true, @@ -164,7 +164,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { mLogger.onVisibilityChanged( Collections.singletonList(createNotificationVisibility(NOTIFICATION_KEY, true)), Collections.emptyList()); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService).onNotificationExpansionChanged( NOTIFICATION_KEY, true, true, ExpandableViewState.LOCATION_UNKNOWN); @@ -172,7 +172,7 @@ public class ExpansionStateLoggerTest extends SysuiTestCase { mLogger.onVisibilityChanged( Collections.singletonList(createNotificationVisibility(NOTIFICATION_KEY, true)), Collections.emptyList()); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); // onNotificationExpansionChanged is called the second time. verify(mBarService, times(2)).onNotificationExpansionChanged( NOTIFICATION_KEY, true, true, ExpandableViewState.LOCATION_UNKNOWN); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java index e23d0ae89a09..d826ce1bbdd8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ package com.android.systemui.statusbar.notification.logging; @@ -36,9 +36,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; -import com.android.systemui.Dependency; import com.android.systemui.SysuiTestCase; -import com.android.systemui.UiOffloadThread; import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.StatusBarStateControllerImpl; import com.android.systemui.statusbar.notification.NotificationEntryListener; @@ -47,6 +45,8 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.stack.NotificationListContainer; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import com.google.android.collect.Lists; @@ -60,6 +60,7 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.Executor; @SmallTest @RunWith(AndroidTestingRunner.class) @@ -82,6 +83,7 @@ public class NotificationLoggerTest extends SysuiTestCase { private TestableNotificationLogger mLogger; private NotificationEntryListener mNotificationEntryListener; private ConcurrentLinkedQueue<AssertionError> mErrorQueue = new ConcurrentLinkedQueue<>(); + private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setUp() { @@ -98,7 +100,7 @@ public class NotificationLoggerTest extends SysuiTestCase { .build(); mEntry.setRow(mRow); - mLogger = new TestableNotificationLogger(mListener, Dependency.get(UiOffloadThread.class), + mLogger = new TestableNotificationLogger(mListener, mUiBgExecutor, mEntryManager, mock(StatusBarStateControllerImpl.class), mBarService, mExpansionStateLogger); mLogger.setUpWithContainer(mListContainer); @@ -130,7 +132,7 @@ public class NotificationLoggerTest extends SysuiTestCase { when(mEntryManager.getVisibleNotifications()).thenReturn(Lists.newArrayList(mEntry)); mLogger.getChildLocationsChangedListenerForTest().onChildLocationsChanged(); TestableLooper.get(this).processAllMessages(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); if(!mErrorQueue.isEmpty()) { throw mErrorQueue.poll(); @@ -140,7 +142,7 @@ public class NotificationLoggerTest extends SysuiTestCase { Mockito.reset(mBarService); mLogger.getChildLocationsChangedListenerForTest().onChildLocationsChanged(); TestableLooper.get(this).processAllMessages(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, never()).onNotificationVisibilityChanged(any(), any()); } @@ -152,11 +154,11 @@ public class NotificationLoggerTest extends SysuiTestCase { when(mEntryManager.getVisibleNotifications()).thenReturn(Lists.newArrayList(mEntry)); mLogger.getChildLocationsChangedListenerForTest().onChildLocationsChanged(); TestableLooper.get(this).processAllMessages(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); Mockito.reset(mBarService); mLogger.stopNotificationLogging(); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); // The visibility objects are recycled by NotificationLogger, so we can't use specific // matchers here. verify(mBarService, times(1)).onNotificationVisibilityChanged(any(), any()); @@ -165,12 +167,12 @@ public class NotificationLoggerTest extends SysuiTestCase { private class TestableNotificationLogger extends NotificationLogger { TestableNotificationLogger(NotificationListener notificationListener, - UiOffloadThread uiOffloadThread, + Executor uiBgExecutor, NotificationEntryManager entryManager, StatusBarStateControllerImpl statusBarStateController, IStatusBarService barService, ExpansionStateLogger expansionStateLogger) { - super(notificationListener, uiOffloadThread, entryManager, statusBarStateController, + super(notificationListener, uiBgExecutor, entryManager, statusBarStateController, expansionStateLogger); mBarService = barService; // Make this on the current thread so we can wait for it during tests. diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java index 532192ba97ae..86b2a44a1acb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java @@ -72,6 +72,8 @@ import com.android.systemui.statusbar.notification.NotificationInterruptionState import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; @@ -126,6 +128,7 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase { private SuperStatusBarViewFactory mSuperStatusBarViewFactory; @Mock private NotificationPanelView mNotificationPanelView; + private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private NotificationTestHelper mNotificationTestHelper; private ExpandableNotificationRow mNotificationRow; @@ -178,8 +181,9 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase { mock(NotificationLockscreenUserManager.class), mKeyguardStateController, mock(NotificationInterruptionStateProvider.class), mock(MetricsLogger.class), - mock(LockPatternUtils.class), mHandler, mHandler, mActivityIntentHelper, - mBubbleController, mShadeController, mSuperStatusBarViewFactory)) + mock(LockPatternUtils.class), mHandler, mHandler, mUiBgExecutor, + mActivityIntentHelper, mBubbleController, mShadeController, + mSuperStatusBarViewFactory)) .setStatusBar(mStatusBar) .setNotificationPresenter(mock(NotificationPresenter.class)) .setActivityLaunchAnimator(mock(ActivityLaunchAnimator.class)) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index d3ae7a783404..ca229c9a6a57 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -78,7 +78,6 @@ import com.android.systemui.Dependency; import com.android.systemui.InitController; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; -import com.android.systemui.UiOffloadThread; import com.android.systemui.assist.AssistManager; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.bubbles.BubbleController; @@ -133,6 +132,8 @@ import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RemoteInputUriController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.volume.VolumeComponent; import org.junit.Before; @@ -245,6 +246,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private StatusBarNotificationActivityStarter.Builder mStatusBarNotificationActivityStarterBuilder; private ShadeController mShadeController; + private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setup() throws Exception { @@ -266,7 +268,7 @@ public class StatusBarTest extends SysuiTestCase { mMetricsLogger = new FakeMetricsLogger(); NotificationLogger notificationLogger = new NotificationLogger(mNotificationListener, - Dependency.get(UiOffloadThread.class), mEntryManager, mStatusBarStateController, + mUiBgExecutor, mEntryManager, mStatusBarStateController, mExpansionStateLogger); notificationLogger.setVisibilityReporter(mock(Runnable.class)); @@ -349,7 +351,7 @@ public class StatusBarTest extends SysuiTestCase { mNotificationAlertingManager, new DisplayMetrics(), mMetricsLogger, - Dependency.get(UiOffloadThread.class), + mUiBgExecutor, mNotificationMediaManager, mLockscreenUserManager, mRemoteInputManager, @@ -641,7 +643,7 @@ public class StatusBarTest extends SysuiTestCase { public void testLogHidden() { try { mStatusBar.handleVisibleToUserChanged(false); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, times(1)).onPanelHidden(); verify(mBarService, never()).onPanelRevealed(anyBoolean(), anyInt()); } catch (RemoteException e) { @@ -659,7 +661,7 @@ public class StatusBarTest extends SysuiTestCase { try { mStatusBar.handleVisibleToUserChanged(true); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, never()).onPanelHidden(); verify(mBarService, times(1)).onPanelRevealed(false, 1); } catch (RemoteException e) { @@ -678,7 +680,7 @@ public class StatusBarTest extends SysuiTestCase { try { mStatusBar.handleVisibleToUserChanged(true); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, never()).onPanelHidden(); verify(mBarService, times(1)).onPanelRevealed(true, 5); } catch (RemoteException e) { @@ -696,7 +698,7 @@ public class StatusBarTest extends SysuiTestCase { try { mStatusBar.handleVisibleToUserChanged(true); - waitForUiOffloadThread(); + mUiBgExecutor.runAllReady(); verify(mBarService, never()).onPanelHidden(); verify(mBarService, times(1)).onPanelRevealed(false, 5); } catch (RemoteException e) { |