diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java index 32515a258b460..5bcf9f8a0534f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java @@ -26,7 +26,6 @@ import android.graphics.drawable.Icon; import android.os.Binder; import android.os.Handler; import android.os.IBinder; -import android.os.Looper; import android.os.RemoteException; import android.os.UserHandle; import android.service.quicksettings.IQSService; @@ -51,6 +50,7 @@ import java.util.Comparator; import java.util.Objects; import javax.inject.Inject; +import javax.inject.Provider; /** * Runs the day-to-day operations of which tiles should be bound and when. @@ -64,8 +64,8 @@ public class TileServices extends IQSService.Stub { private final ArrayMap mTiles = new ArrayMap<>(); private final ArrayMap mTokenMap = new ArrayMap<>(); private final Context mContext; - private final Handler mHandler; private final Handler mMainHandler; + private final Provider mHandlerProvider; private final QSTileHost mHost; private final KeyguardStateController mKeyguardStateController; private final BroadcastDispatcher mBroadcastDispatcher; @@ -76,7 +76,7 @@ public class TileServices extends IQSService.Stub { @Inject public TileServices( QSTileHost host, - @Main Looper looper, + @Main Provider handlerProvider, BroadcastDispatcher broadcastDispatcher, UserTracker userTracker, KeyguardStateController keyguardStateController) { @@ -84,8 +84,8 @@ public class TileServices extends IQSService.Stub { mKeyguardStateController = keyguardStateController; mContext = mHost.getContext(); mBroadcastDispatcher = broadcastDispatcher; - mHandler = new Handler(looper); - mMainHandler = new Handler(Looper.getMainLooper()); + mHandlerProvider = handlerProvider; + mMainHandler = mHandlerProvider.get(); mUserTracker = userTracker; mBroadcastDispatcher.registerReceiver( mRequestListeningReceiver, @@ -118,7 +118,7 @@ public class TileServices extends IQSService.Stub { protected TileServiceManager onCreateTileService(ComponentName component, BroadcastDispatcher broadcastDispatcher) { - return new TileServiceManager(this, mHandler, component, + return new TileServiceManager(this, mHandlerProvider.get(), component, broadcastDispatcher, mUserTracker); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java index 19a9863f6f5e6..e75780166f055 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java @@ -32,7 +32,6 @@ import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; import android.os.Handler; -import android.os.Looper; import android.os.UserHandle; import android.service.quicksettings.TileService; import android.test.suitebuilder.annotation.SmallTest; @@ -68,6 +67,8 @@ import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.Optional; +import javax.inject.Provider; + @SmallTest @RunWith(AndroidTestingRunner.class) @RunWithLooper @@ -75,6 +76,7 @@ public class TileServicesTest extends SysuiTestCase { private static int NUM_FAKES = TileServices.DEFAULT_MAX_BOUND * 2; private TileServices mTileService; + private TestableLooper mTestableLooper; private ArrayList mManagers; @Mock private BroadcastDispatcher mBroadcastDispatcher; @@ -116,17 +118,20 @@ public class TileServicesTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mDependency.injectMockDependency(BluetoothController.class); mManagers = new ArrayList<>(); + mTestableLooper = TestableLooper.get(this); when(mTileServiceRequestControllerBuilder.create(any())) .thenReturn(mTileServiceRequestController); when(mTileLifecycleManagerFactory.create(any(Intent.class), any(UserHandle.class))) .thenReturn(mTileLifecycleManager); + Provider provider = () -> new Handler(mTestableLooper.getLooper()); + QSTileHost host = new QSTileHost(mContext, mStatusBarIconController, mQSFactory, - new Handler(), - Looper.myLooper(), + provider.get(), + mTestableLooper.getLooper(), mPluginManager, mTunerService, () -> mAutoTileManager, @@ -140,7 +145,7 @@ public class TileServicesTest extends SysuiTestCase { mock(CustomTileStatePersister.class), mTileServiceRequestControllerBuilder, mTileLifecycleManagerFactory); - mTileService = new TestTileServices(host, Looper.getMainLooper(), mBroadcastDispatcher, + mTileService = new TestTileServices(host, provider, mBroadcastDispatcher, mUserTracker, mKeyguardStateController); } @@ -226,10 +231,10 @@ public class TileServicesTest extends SysuiTestCase { } private class TestTileServices extends TileServices { - TestTileServices(QSTileHost host, Looper looper, + TestTileServices(QSTileHost host, Provider handlerProvider, BroadcastDispatcher broadcastDispatcher, UserTracker userTracker, KeyguardStateController keyguardStateController) { - super(host, looper, broadcastDispatcher, userTracker, keyguardStateController); + super(host, handlerProvider, broadcastDispatcher, userTracker, keyguardStateController); } @Override