Merge "Remove Dependency#get from qs.external."

This commit is contained in:
Dave Mankoff
2022-02-07 17:05:27 +00:00
committed by Android (Google) Code Review
15 changed files with 130 additions and 74 deletions

View File

@@ -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);

View File

@@ -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));

View File

@@ -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

View File

@@ -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
);
}
}

View File

@@ -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();

View File

@@ -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
}

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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

View File

@@ -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();

View File

@@ -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);

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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);