diff options
| author | 2020-03-04 21:35:43 +0800 | |
|---|---|---|
| committer | 2020-03-17 08:12:51 +0000 | |
| commit | 4e3dddce350d61fc14ee2cbcddbdf095cbc4ced8 (patch) | |
| tree | 43fa3c81b5ab2c433cf699e5fef342feabbdc7c2 | |
| parent | 8888ec9144a5a79e8e877fb19cbbe6cc3cc4dc76 (diff) | |
Provide QSFactory
Bug: 145892579
Test: atest SystemUITests:CustomTileTest SystemUITests:QSTileHostTest
Change-Id: I3b676e6fc2ec3f3b779c13b7dc8214569cc427e5
Merged-In: I3b676e6fc2ec3f3b779c13b7dc8214569cc427e5
(cherry picked from commit 6fa10209d75388c8b635224b08adae6486f5f539)
10 files changed, 44 insertions, 20 deletions
diff --git a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java index 8292d304af2d..14d5bd53a9ab 100644 --- a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java +++ b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java @@ -27,9 +27,11 @@ import com.android.systemui.car.CarDeviceProvisionedControllerImpl; import com.android.systemui.dagger.SystemUIRootComponent; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManagerImpl; +import com.android.systemui.plugins.qs.QSFactory; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.power.EnhancedEstimates; import com.android.systemui.power.EnhancedEstimatesImpl; +import com.android.systemui.qs.tileimpl.QSFactoryImpl; import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsImplementation; import com.android.systemui.stackdivider.DividerModule; @@ -107,6 +109,10 @@ abstract class CarSystemUIModule { BatteryControllerImpl controllerImpl); @Binds + @Singleton + public abstract QSFactory provideQSFactory(QSFactoryImpl qsFactoryImpl); + + @Binds abstract DockManager bindDockManager(DockManagerImpl dockManager); @Binds diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 82224dff88dd..06e027d7cae7 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -117,7 +117,7 @@ <!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" --> <string name="quick_settings_tiles_stock" translatable="false"> - wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,dark,work,cast,night,screenrecord + wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,dark,work,cast,night,screenrecord,reverse </string> <!-- The tiles to display in QuickSettings --> diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java index 956b4aa177ea..8c572fe8f842 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java @@ -26,9 +26,11 @@ import androidx.annotation.Nullable; import com.android.keyguard.KeyguardViewController; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManagerImpl; +import com.android.systemui.plugins.qs.QSFactory; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.power.EnhancedEstimates; import com.android.systemui.power.EnhancedEstimatesImpl; +import com.android.systemui.qs.tileimpl.QSFactoryImpl; import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsImplementation; import com.android.systemui.stackdivider.DividerModule; @@ -85,6 +87,10 @@ public abstract class SystemUIDefaultModule { BatteryControllerImpl controllerImpl); @Binds + @Singleton + public abstract QSFactory provideQSFactory(QSFactoryImpl qsFactoryImpl); + + @Binds abstract DockManager bindDockManager(DockManagerImpl dockManager); @Binds diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java index 3cf0718aa067..ece1ce8bb4d0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java @@ -28,6 +28,7 @@ public interface QSHost { void forceCollapsePanels(); void openPanels(); Context getContext(); + Context getUserContext(); QSLogger getQSLogger(); Collection<QSTile> getTiles(); void addCallback(Callback callback); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java index fab71918a3d1..9e8eb3a28781 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java @@ -45,7 +45,6 @@ import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.external.TileLifecycleManager; import com.android.systemui.qs.external.TileServices; import com.android.systemui.qs.logging.QSLogger; -import com.android.systemui.qs.tileimpl.QSFactoryImpl; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.statusbar.phone.AutoTileManager; import com.android.systemui.statusbar.phone.StatusBar; @@ -98,7 +97,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D @Inject public QSTileHost(Context context, StatusBarIconController iconController, - QSFactoryImpl defaultFactory, + QSFactory defaultFactory, @Main Handler mainHandler, @Background Looper bgLooper, PluginManager pluginManager, @@ -120,7 +119,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D mServices = new TileServices(this, bgLooper, mBroadcastDispatcher); mStatusBarOptional = statusBarOptional; - defaultFactory.setHost(this); mQsFactories.add(defaultFactory); pluginManager.addPluginListener(this, QSFactory.class, true); mDumpManager.registerDumpable(TAG, this); @@ -211,10 +209,12 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D return mContext; } + @Override public Context getUserContext() { return mUserContext; } + @Override public TileServices getTileServices() { return mServices; } 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 3b27fb76bcc6..08c8f86c1125 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java @@ -46,7 +46,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.QSTile.State; -import com.android.systemui.qs.QSTileHost; +import com.android.systemui.qs.QSHost; import com.android.systemui.qs.external.TileLifecycleManager.TileChangeListener; import com.android.systemui.qs.tileimpl.QSTileImpl; @@ -79,7 +79,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener private boolean mIsTokenGranted; private boolean mIsShowingDialog; - private CustomTile(QSTileHost host, String action, Context userContext) { + private CustomTile(QSHost host, String action, Context userContext) { super(host); mWindowManager = WindowManagerGlobal.getWindowManagerService(); mComponent = ComponentName.unflattenFromString(action); @@ -392,7 +392,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener return ComponentName.unflattenFromString(action); } - public static CustomTile create(QSTileHost host, String spec, Context userContext) { + public static CustomTile create(QSHost host, String spec, Context userContext) { if (spec == null || !spec.startsWith(PREFIX) || !spec.endsWith(")")) { throw new IllegalArgumentException("Bad custom tile spec: " + spec); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java index 1b8717b5049c..c182a58a28c4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java @@ -24,7 +24,7 @@ import com.android.systemui.plugins.qs.QSFactory; import com.android.systemui.plugins.qs.QSIconView; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTileView; -import com.android.systemui.qs.QSTileHost; +import com.android.systemui.qs.QSHost; import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.tiles.AirplaneModeTile; import com.android.systemui.qs.tiles.BatterySaverTile; @@ -51,6 +51,8 @@ import javax.inject.Inject; import javax.inject.Provider; import javax.inject.Singleton; +import dagger.Lazy; + @Singleton public class QSFactoryImpl implements QSFactory { @@ -77,10 +79,11 @@ public class QSFactoryImpl implements QSFactory { private final Provider<UiModeNightTile> mUiModeNightTileProvider; private final Provider<ScreenRecordTile> mScreenRecordTileProvider; - private QSTileHost mHost; + private final Lazy<QSHost> mQsHostLazy; @Inject - public QSFactoryImpl(Provider<WifiTile> wifiTileProvider, + public QSFactoryImpl(Lazy<QSHost> qsHostLazy, + Provider<WifiTile> wifiTileProvider, Provider<BluetoothTile> bluetoothTileProvider, Provider<CellularTile> cellularTileProvider, Provider<DndTile> dndTileProvider, @@ -100,6 +103,7 @@ public class QSFactoryImpl implements QSFactory { Provider<GarbageMonitor.MemoryTile> memoryTileProvider, Provider<UiModeNightTile> uiModeNightTileProvider, Provider<ScreenRecordTile> screenRecordTileProvider) { + mQsHostLazy = qsHostLazy; mWifiTileProvider = wifiTileProvider; mBluetoothTileProvider = bluetoothTileProvider; mCellularTileProvider = cellularTileProvider; @@ -122,10 +126,6 @@ public class QSFactoryImpl implements QSFactory { mScreenRecordTileProvider = screenRecordTileProvider; } - public void setHost(QSTileHost host) { - mHost = host; - } - public QSTile createTile(String tileSpec) { QSTileImpl tile = createTileInternal(tileSpec); if (tile != null) { @@ -179,7 +179,8 @@ public class QSFactoryImpl implements QSFactory { // Custom tiles if (tileSpec.startsWith(CustomTile.PREFIX)) { - return CustomTile.create(mHost, tileSpec, mHost.getUserContext()); + return CustomTile.create(mQsHostLazy.get(), tileSpec, + mQsHostLazy.get().getUserContext()); } // Debug tiles. @@ -196,7 +197,7 @@ public class QSFactoryImpl implements QSFactory { @Override public QSTileView createTileView(QSTile tile, boolean collapsedView) { - Context context = new ContextThemeWrapper(mHost.getContext(), R.style.qs_theme); + Context context = new ContextThemeWrapper(mQsHostLazy.get().getContext(), R.style.qs_theme); QSIconView icon = tile.createTileView(context); if (collapsedView) { return new QSTileBaseView(context, icon, collapsedView); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java index 24b96855377f..a81189eaeaf8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java @@ -53,6 +53,16 @@ public interface BatteryController extends DemoMode, Dumpable, boolean isAodPowerSave(); /** + * Returns {@code true} if reverse is supported. + */ + default boolean isReverseSupported() { return false; } + + /** + * Returns {@code true} if reverse is on. + */ + default boolean isReverseOn() { return false; } + + /** * Set reverse state. * @param isReverse true if turn on reverse, false otherwise */ 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 73f3ddd29bcf..95c3e5aee870 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java @@ -86,7 +86,7 @@ public class QSTileHostTest extends SysuiTestCase { @Mock private StatusBarIconController mIconController; @Mock - private QSFactoryImpl mDefaultFactory; + private QSFactory mDefaultFactory; @Mock private PluginManager mPluginManager; @Mock @@ -295,7 +295,7 @@ public class QSTileHostTest extends SysuiTestCase { private static class TestQSTileHost extends QSTileHost { TestQSTileHost(Context context, StatusBarIconController iconController, - QSFactoryImpl defaultFactory, Handler mainHandler, Looper bgLooper, + QSFactory defaultFactory, Handler mainHandler, Looper bgLooper, PluginManager pluginManager, TunerService tunerService, Provider<AutoTileManager> autoTiles, DumpManager dumpManager, BroadcastDispatcher broadcastDispatcher, StatusBar statusBar, QSLogger qsLogger) { 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 58be50e1e66d..953198c42d66 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 @@ -30,7 +30,7 @@ import android.view.IWindowManager import androidx.test.runner.AndroidJUnit4 import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.qs.QSTile -import com.android.systemui.qs.QSTileHost +import com.android.systemui.qs.QSHost import junit.framework.Assert.assertFalse import junit.framework.Assert.assertTrue import org.junit.Assert.assertEquals @@ -56,7 +56,7 @@ class CustomTileTest : SysuiTestCase() { val TILE_SPEC = CustomTile.toSpec(componentName) } - @Mock private lateinit var mTileHost: QSTileHost + @Mock private lateinit var mTileHost: QSHost @Mock private lateinit var mTileService: IQSTileService @Mock private lateinit var mTileServices: TileServices @Mock private lateinit var mTileServiceManager: TileServiceManager |