diff options
15 files changed, 130 insertions, 74 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java index 9f585bdfaeb0..7cf63f678c1d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java @@ -19,7 +19,6 @@ import android.content.Context; import com.android.internal.logging.InstanceId; import com.android.internal.logging.UiEventLogger; import com.android.systemui.plugins.qs.QSTile; -import com.android.systemui.qs.external.TileServices; import java.util.Collection; @@ -35,7 +34,6 @@ public interface QSHost { Collection<QSTile> getTiles(); void addCallback(Callback callback); void removeCallback(Callback callback); - TileServices getTileServices(); void removeTile(String tileSpec); void removeTiles(Collection<String> specs); void unmarkTileAsAutoAdded(String tileSpec); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java index cca491343f76..c69307548b6e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java @@ -24,7 +24,6 @@ import android.os.Looper; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings.Secure; -import android.service.quicksettings.Tile; import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; @@ -50,7 +49,6 @@ import com.android.systemui.qs.external.CustomTileStatePersister; import com.android.systemui.qs.external.TileLifecycleManager; import com.android.systemui.qs.external.TileServiceKey; import com.android.systemui.qs.external.TileServiceRequestController; -import com.android.systemui.qs.external.TileServices; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.plugins.PluginManager; @@ -89,7 +87,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D private final Context mContext; private final LinkedHashMap<String, QSTile> mTiles = new LinkedHashMap<>(); protected final ArrayList<String> mTileSpecs = new ArrayList<>(); - private final TileServices mServices; private final TunerService mTunerService; private final PluginManager mPluginManager; private final DumpManager mDumpManager; @@ -111,6 +108,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D private SecureSettings mSecureSettings; private final TileServiceRequestController mTileServiceRequestController; + private TileLifecycleManager.Factory mTileLifeCycleManagerFactory; @Inject public QSTileHost(Context context, @@ -129,7 +127,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D UserTracker userTracker, SecureSettings secureSettings, CustomTileStatePersister customTileStatePersister, - TileServiceRequestController.Builder tileServiceRequestControllerBuilder + TileServiceRequestController.Builder tileServiceRequestControllerBuilder, + TileLifecycleManager.Factory tileLifecycleManagerFactory ) { mIconController = iconController; mContext = context; @@ -141,9 +140,9 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D mUiEventLogger = uiEventLogger; mBroadcastDispatcher = broadcastDispatcher; mTileServiceRequestController = tileServiceRequestControllerBuilder.create(this); + mTileLifeCycleManagerFactory = tileLifecycleManagerFactory; mInstanceIdSequence = new InstanceIdSequence(MAX_QS_INSTANCE_ID); - mServices = new TileServices(this, bgLooper, mBroadcastDispatcher, userTracker); mStatusBarOptional = statusBarOptional; mQsFactories.add(defaultFactory); @@ -177,7 +176,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D mTiles.values().forEach(tile -> tile.destroy()); mAutoTiles.destroy(); mTunerService.removeTunable(this); - mServices.destroy(); mPluginManager.removePluginListener(this); mDumpManager.unregisterDumpable(TAG); mTileServiceRequestController.destroy(); @@ -257,11 +255,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D return mCurrentUser; } - @Override - public TileServices getTileServices() { - return mServices; - } - public int indexOf(String spec) { return mTileSpecs.indexOf(spec); } @@ -460,10 +453,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D if (!newTiles.contains(tileSpec)) { ComponentName component = CustomTile.getComponentFromSpec(tileSpec); Intent intent = new Intent().setComponent(component); - TileLifecycleManager lifecycleManager = new TileLifecycleManager(new Handler(), - mContext, mServices, new Tile(), intent, - new UserHandle(mCurrentUser), - mBroadcastDispatcher); + TileLifecycleManager lifecycleManager = mTileLifeCycleManagerFactory.create( + intent, new UserHandle(mCurrentUser)); lifecycleManager.onStopListening(); lifecycleManager.onTileRemoved(); mCustomTileStatePersister.removeState(new TileServiceKey(component, mCurrentUser)); diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java index 6d1bbeed5372..5d4b3da58cf0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java +++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java @@ -28,6 +28,7 @@ import com.android.systemui.qs.AutoAddTracker; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.ReduceBrightColorsController; +import com.android.systemui.qs.external.QSExternalModule; import com.android.systemui.statusbar.phone.AutoTileManager; import com.android.systemui.statusbar.phone.ManagedProfileController; import com.android.systemui.statusbar.policy.CastController; @@ -47,7 +48,7 @@ import dagger.Provides; * Module for QS dependencies */ @Module(subcomponents = {QSFragmentComponent.class}, - includes = {MediaModule.class, QSFlagsModule.class}) + includes = {MediaModule.class, QSExternalModule.class, QSFlagsModule.class}) public interface QSModule { @Provides diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java index 4f15351322ee..c4386ab9a3df 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java @@ -51,7 +51,6 @@ import androidx.annotation.WorkerThread; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.Dependency; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; @@ -103,6 +102,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener private final TileServiceKey mKey; private final AtomicBoolean mInitialDefaultIconFetched = new AtomicBoolean(false); + private final TileServices mTileServices; private CustomTile( QSHost host, @@ -115,10 +115,12 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener QSLogger qsLogger, String action, Context userContext, - CustomTileStatePersister customTileStatePersister + CustomTileStatePersister customTileStatePersister, + TileServices tileServices ) { super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger, statusBarStateController, activityStarter, qsLogger); + mTileServices = tileServices; mWindowManager = WindowManagerGlobal.getWindowManagerService(); mComponent = ComponentName.unflattenFromString(action); mTile = new Tile(); @@ -126,7 +128,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener mUser = mUserContext.getUserId(); mKey = new TileServiceKey(mComponent, mUser); - mServiceManager = host.getTileServices().getTileWrapper(this); + mServiceManager = tileServices.getTileWrapper(this); mService = mServiceManager.getTileService(); mCustomTileStatePersister = customTileStatePersister; } @@ -349,7 +351,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener } catch (RemoteException e) { } } - mHost.getTileServices().freeService(this, mServiceManager); + mTileServices.freeService(this, mServiceManager); } @Override @@ -473,7 +475,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener } public void startUnlockAndRun() { - Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() -> { + mActivityStarter.postQSRunnableDismissingKeyguard(() -> { try { mService.onUnlockComplete(); } catch (RemoteException e) { @@ -529,6 +531,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener final ActivityStarter mActivityStarter; final QSLogger mQSLogger; final CustomTileStatePersister mCustomTileStatePersister; + private TileServices mTileServices; Context mUserContext; String mSpec = ""; @@ -543,7 +546,8 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener StatusBarStateController statusBarStateController, ActivityStarter activityStarter, QSLogger qsLogger, - CustomTileStatePersister customTileStatePersister + CustomTileStatePersister customTileStatePersister, + TileServices tileServices ) { mQSHostLazy = hostLazy; mBackgroundLooper = backgroundLooper; @@ -554,6 +558,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener mActivityStarter = activityStarter; mQSLogger = qsLogger; mCustomTileStatePersister = customTileStatePersister; + mTileServices = tileServices; } Builder setSpec(@NonNull String spec) { @@ -583,7 +588,8 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener mQSLogger, action, mUserContext, - mCustomTileStatePersister + mCustomTileStatePersister, + mTileServices ); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/PackageManagerAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/external/PackageManagerAdapter.java index ffe66f4c9aae..6cf4441cfc55 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/PackageManagerAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/PackageManagerAdapter.java @@ -26,6 +26,8 @@ import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.os.RemoteException; +import javax.inject.Inject; + // Adapter that wraps calls to PackageManager or IPackageManager for {@link TileLifecycleManager}. // TODO: This is very much an intermediate step to allow for PackageManager mocking and should be // abstracted into something more useful for other tests in systemui. @@ -37,6 +39,7 @@ public class PackageManagerAdapter { // Uses the PackageManager for the provided context. // When necessary, uses the IPackagemanger in AppGlobals. + @Inject public PackageManagerAdapter(Context context) { mPackageManager = context.getPackageManager(); mIPackageManager = AppGlobals.getPackageManager(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/QSExternalModule.kt b/packages/SystemUI/src/com/android/systemui/qs/external/QSExternalModule.kt new file mode 100644 index 000000000000..f7db80bddd3b --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/external/QSExternalModule.kt @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2022 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.qs.external + +import android.service.quicksettings.IQSService +import dagger.Binds +import dagger.Module + +@Module +interface QSExternalModule { + @Binds + fun bindsIQSService(impl: TileServices): IQSService +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java index 17ae7ffa9980..32e0805b91ba 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java @@ -31,21 +31,24 @@ import android.os.RemoteException; import android.os.UserHandle; import android.service.quicksettings.IQSService; import android.service.quicksettings.IQSTileService; -import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; import com.android.systemui.broadcast.BroadcastDispatcher; +import com.android.systemui.dagger.qualifiers.Main; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; +import dagger.assisted.Assisted; +import dagger.assisted.AssistedFactory; +import dagger.assisted.AssistedInject; + /** * Manages the lifecycle of a TileService. * <p> @@ -102,16 +105,10 @@ public class TileLifecycleManager extends BroadcastReceiver implements // Return value from bindServiceAsUser, determines whether safe to call unbind. private boolean mIsBound; - public TileLifecycleManager(Handler handler, Context context, IQSService service, Tile tile, - Intent intent, UserHandle user, BroadcastDispatcher broadcastDispatcher) { - this(handler, context, service, tile, intent, user, new PackageManagerAdapter(context), - broadcastDispatcher); - } - - @VisibleForTesting - TileLifecycleManager(Handler handler, Context context, IQSService service, Tile tile, - Intent intent, UserHandle user, PackageManagerAdapter packageManagerAdapter, - BroadcastDispatcher broadcastDispatcher) { + @AssistedInject + TileLifecycleManager(@Main Handler handler, Context context, IQSService service, + PackageManagerAdapter packageManagerAdapter, BroadcastDispatcher broadcastDispatcher, + @Assisted Intent intent, @Assisted UserHandle user) { mContext = context; mHandler = handler; mIntent = intent; @@ -123,6 +120,13 @@ public class TileLifecycleManager extends BroadcastReceiver implements if (DEBUG) Log.d(TAG, "Creating " + mIntent + " " + mUser); } + /** Injectable factory for TileLifecycleManager. */ + @AssistedFactory + public interface Factory { + /** */ + TileLifecycleManager create(Intent intent, UserHandle userHandle); + } + public ComponentName getComponent() { return mIntent.getComponent(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java index fda755bd5c33..bf565a8c52e0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java @@ -26,7 +26,6 @@ import android.net.Uri; import android.os.Handler; import android.os.IBinder; import android.service.quicksettings.IQSTileService; -import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import android.util.Log; @@ -73,10 +72,11 @@ public class TileServiceManager { private boolean mStarted = false; TileServiceManager(TileServices tileServices, Handler handler, ComponentName component, - Tile tile, BroadcastDispatcher broadcastDispatcher, UserTracker userTracker) { + BroadcastDispatcher broadcastDispatcher, UserTracker userTracker) { this(tileServices, handler, userTracker, new TileLifecycleManager(handler, - tileServices.getContext(), tileServices, tile, new Intent().setComponent(component), - userTracker.getUserHandle(), broadcastDispatcher)); + tileServices.getContext(), tileServices, + new PackageManagerAdapter(tileServices.getContext()), broadcastDispatcher, + new Intent().setComponent(component), userTracker.getUserHandle())); } @VisibleForTesting 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 0a3c17c9045a..32515a258b46 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java @@ -38,8 +38,8 @@ import android.util.Log; import androidx.annotation.Nullable; import com.android.internal.statusbar.StatusBarIcon; -import com.android.systemui.Dependency; import com.android.systemui.broadcast.BroadcastDispatcher; +import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.qs.QSTileHost; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.StatusBarIconController; @@ -50,6 +50,8 @@ import java.util.Collections; import java.util.Comparator; import java.util.Objects; +import javax.inject.Inject; + /** * Runs the day-to-day operations of which tiles should be bound and when. */ @@ -65,14 +67,21 @@ public class TileServices extends IQSService.Stub { private final Handler mHandler; private final Handler mMainHandler; private final QSTileHost mHost; + private final KeyguardStateController mKeyguardStateController; private final BroadcastDispatcher mBroadcastDispatcher; private final UserTracker mUserTracker; private int mMaxBound = DEFAULT_MAX_BOUND; - public TileServices(QSTileHost host, Looper looper, BroadcastDispatcher broadcastDispatcher, - UserTracker userTracker) { + @Inject + public TileServices( + QSTileHost host, + @Main Looper looper, + BroadcastDispatcher broadcastDispatcher, + UserTracker userTracker, + KeyguardStateController keyguardStateController) { mHost = host; + mKeyguardStateController = keyguardStateController; mContext = mHost.getContext(); mBroadcastDispatcher = broadcastDispatcher; mHandler = new Handler(looper); @@ -96,8 +105,7 @@ public class TileServices extends IQSService.Stub { public TileServiceManager getTileWrapper(CustomTile tile) { ComponentName component = tile.getComponent(); - TileServiceManager service = onCreateTileService(component, tile.getQsTile(), - mBroadcastDispatcher); + TileServiceManager service = onCreateTileService(component, mBroadcastDispatcher); synchronized (mServices) { mServices.put(tile, service); mTiles.put(component, tile); @@ -108,9 +116,9 @@ public class TileServices extends IQSService.Stub { return service; } - protected TileServiceManager onCreateTileService(ComponentName component, Tile tile, + protected TileServiceManager onCreateTileService(ComponentName component, BroadcastDispatcher broadcastDispatcher) { - return new TileServiceManager(this, mHandler, component, tile, + return new TileServiceManager(this, mHandler, component, broadcastDispatcher, mUserTracker); } @@ -321,16 +329,12 @@ public class TileServices extends IQSService.Stub { @Override public boolean isLocked() { - KeyguardStateController keyguardStateController = - Dependency.get(KeyguardStateController.class); - return keyguardStateController.isShowing(); + return mKeyguardStateController.isShowing(); } @Override public boolean isSecure() { - KeyguardStateController keyguardStateController = - Dependency.get(KeyguardStateController.class); - return keyguardStateController.isMethodSecure() && keyguardStateController.isShowing(); + return mKeyguardStateController.isMethodSecure() && mKeyguardStateController.isShowing(); } @Nullable diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/DumpTruck.java b/packages/SystemUI/src/com/android/systemui/util/leak/DumpTruck.java index 089650c0fc54..82153600e473 100644 --- a/packages/SystemUI/src/com/android/systemui/util/leak/DumpTruck.java +++ b/packages/SystemUI/src/com/android/systemui/util/leak/DumpTruck.java @@ -50,7 +50,7 @@ public class DumpTruck { private static final int BUFSIZ = 1024 * 1024; // 1MB private final Context context; - private GarbageMonitor mGarbageMonitor; + private final GarbageMonitor mGarbageMonitor; private Uri hprofUri; private long rss; final StringBuilder body = new StringBuilder(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index 8b353d94e25d..3266d6ac84a6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -47,6 +47,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.dagger.QSFragmentComponent; import com.android.systemui.qs.external.CustomTileStatePersister; +import com.android.systemui.qs.external.TileLifecycleManager; import com.android.systemui.qs.external.TileServiceRequestController; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSFactoryImpl; @@ -136,6 +137,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest { QSFragment qs = (QSFragment) mFragment; mFragments.dispatchResume(); processAllMessages(); + QSTileHost host = new QSTileHost(mContext, mock(StatusBarIconController.class), mock(QSFactoryImpl.class), new Handler(), Looper.myLooper(), mock(PluginManager.class), mock(TunerService.class), @@ -143,7 +145,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest { mock(BroadcastDispatcher.class), Optional.of(mock(StatusBar.class)), mock(QSLogger.class), mock(UiEventLogger.class), mock(UserTracker.class), mock(SecureSettings.class), mock(CustomTileStatePersister.class), - mTileServiceRequestControllerBuilder); + mTileServiceRequestControllerBuilder, mock(TileLifecycleManager.Factory.class)); qs.setHost(host); qs.setListening(true); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java index 1e651bef318b..8872e28647a7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java @@ -34,6 +34,7 @@ import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Looper; +import android.os.UserHandle; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; @@ -50,13 +51,13 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.dump.DumpManager; -import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.QSFactory; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.external.CustomTileStatePersister; +import com.android.systemui.qs.external.TileLifecycleManager; import com.android.systemui.qs.external.TileServiceKey; import com.android.systemui.qs.external.TileServiceRequestController; import com.android.systemui.qs.logging.QSLogger; @@ -127,6 +128,10 @@ public class QSTileHostTest extends SysuiTestCase { private TileServiceRequestController.Builder mTileServiceRequestControllerBuilder; @Mock private TileServiceRequestController mTileServiceRequestController; + @Mock + private TileLifecycleManager.Factory mTileLifecycleManagerFactory; + @Mock + private TileLifecycleManager mTileLifecycleManager; private Handler mHandler; private TestableLooper mLooper; @@ -139,6 +144,8 @@ public class QSTileHostTest extends SysuiTestCase { mHandler = new Handler(mLooper.getLooper()); when(mTileServiceRequestControllerBuilder.create(any())) .thenReturn(mTileServiceRequestController); + when(mTileLifecycleManagerFactory.create(any(Intent.class), any(UserHandle.class))) + .thenReturn(mTileLifecycleManager); mSecureSettings = new FakeSettings(); mSecureSettings.putStringForUser( @@ -146,7 +153,8 @@ public class QSTileHostTest extends SysuiTestCase { mQSTileHost = new TestQSTileHost(mContext, mIconController, mDefaultFactory, mHandler, mLooper.getLooper(), mPluginManager, mTunerService, mAutoTiles, mDumpManager, mBroadcastDispatcher, mStatusBar, mQSLogger, mUiEventLogger, mUserTracker, - mSecureSettings, mCustomTileStatePersister, mTileServiceRequestControllerBuilder); + mSecureSettings, mCustomTileStatePersister, mTileServiceRequestControllerBuilder, + mTileLifecycleManagerFactory); setUpTileFactory(); } @@ -432,11 +440,13 @@ public class QSTileHostTest extends SysuiTestCase { BroadcastDispatcher broadcastDispatcher, StatusBar statusBar, QSLogger qsLogger, UiEventLogger uiEventLogger, UserTracker userTracker, SecureSettings secureSettings, CustomTileStatePersister customTileStatePersister, - TileServiceRequestController.Builder tileServiceRequestControllerBuilder) { + TileServiceRequestController.Builder tileServiceRequestControllerBuilder, + TileLifecycleManager.Factory tileLifecycleManagerFactory) { super(context, iconController, defaultFactory, mainHandler, bgLooper, pluginManager, tunerService, autoTiles, dumpManager, broadcastDispatcher, Optional.of(statusBar), qsLogger, uiEventLogger, userTracker, secureSettings, - customTileStatePersister, tileServiceRequestControllerBuilder); + customTileStatePersister, tileServiceRequestControllerBuilder, + tileLifecycleManagerFactory); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt index 97ad8bc6fab4..f3fcdbf329b9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt @@ -92,7 +92,6 @@ class CustomTileTest : SysuiTestCase() { mContext.addMockSystemService("window", windowService) mContext.setMockPackageManager(packageManager) - `when`(tileHost.tileServices).thenReturn(tileServices) `when`(tileHost.context).thenReturn(mContext) `when`(tileServices.getTileWrapper(any(CustomTile::class.java))) .thenReturn(tileServiceManager) @@ -113,7 +112,8 @@ class CustomTileTest : SysuiTestCase() { statusBarStateController, activityStarter, qsLogger, - customTileStatePersister + customTileStatePersister, + tileServices ) customTile = CustomTile.create(customTileBuilder, TILE_SPEC, mContext) diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java index f2303c26b6db..b559d18d9520 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java @@ -43,7 +43,6 @@ import android.os.HandlerThread; import android.os.UserHandle; import android.service.quicksettings.IQSService; import android.service.quicksettings.IQSTileService; -import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import android.test.suitebuilder.annotation.SmallTest; @@ -96,11 +95,11 @@ public class TileLifecycleManagerTest extends SysuiTestCase { mThread.start(); mHandler = Handler.createAsync(mThread.getLooper()); mStateManager = new TileLifecycleManager(mHandler, mWrappedContext, - Mockito.mock(IQSService.class), new Tile(), - mTileServiceIntent, - mUser, + Mockito.mock(IQSService.class), mMockPackageManagerAdapter, - mMockBroadcastDispatcher); + mMockBroadcastDispatcher, + mTileServiceIntent, + mUser); } @After 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 d604b2cdbad8..e39d6a1bfc01 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 @@ -34,7 +34,6 @@ import android.content.IntentFilter; import android.os.Handler; import android.os.Looper; import android.os.UserHandle; -import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; @@ -54,6 +53,7 @@ import com.android.systemui.statusbar.phone.AutoTileManager; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.policy.BluetoothController; +import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.settings.SecureSettings; @@ -104,6 +104,12 @@ public class TileServicesTest extends SysuiTestCase { private TileServiceRequestController.Builder mTileServiceRequestControllerBuilder; @Mock private TileServiceRequestController mTileServiceRequestController; + @Mock + private KeyguardStateController mKeyguardStateController; + @Mock + private TileLifecycleManager.Factory mTileLifecycleManagerFactory; + @Mock + private TileLifecycleManager mTileLifecycleManager; @Before public void setUp() throws Exception { @@ -113,6 +119,8 @@ public class TileServicesTest extends SysuiTestCase { when(mTileServiceRequestControllerBuilder.create(any())) .thenReturn(mTileServiceRequestController); + when(mTileLifecycleManagerFactory.create(any(Intent.class), any(UserHandle.class))) + .thenReturn(mTileLifecycleManager); QSTileHost host = new QSTileHost(mContext, mStatusBarIconController, @@ -130,14 +138,16 @@ public class TileServicesTest extends SysuiTestCase { mUserTracker, mSecureSettings, mock(CustomTileStatePersister.class), - mTileServiceRequestControllerBuilder); + mTileServiceRequestControllerBuilder, + mTileLifecycleManagerFactory); mTileService = new TestTileServices(host, Looper.getMainLooper(), mBroadcastDispatcher, - mUserTracker); + mUserTracker, mKeyguardStateController); } @After public void tearDown() throws Exception { mTileService.getHost().destroy(); + mTileService.destroy(); TestableLooper.get(this).processAllMessages(); } @@ -217,13 +227,14 @@ public class TileServicesTest extends SysuiTestCase { private class TestTileServices extends TileServices { TestTileServices(QSTileHost host, Looper looper, - BroadcastDispatcher broadcastDispatcher, UserTracker userTracker) { - super(host, looper, broadcastDispatcher, userTracker); + BroadcastDispatcher broadcastDispatcher, UserTracker userTracker, + KeyguardStateController keyguardStateController) { + super(host, looper, broadcastDispatcher, userTracker, keyguardStateController); } @Override - protected TileServiceManager onCreateTileService(ComponentName component, Tile qsTile, - BroadcastDispatcher broadcastDispatcher) { + protected TileServiceManager onCreateTileService( + ComponentName component, BroadcastDispatcher broadcastDispatcher) { TileServiceManager manager = mock(TileServiceManager.class); mManagers.add(manager); when(manager.isLifecycleStarted()).thenReturn(true); |