diff options
author | 2018-12-26 17:26:10 -0500 | |
---|---|---|
committer | 2018-12-27 07:46:57 -0500 | |
commit | fa452ef8ffba74adcfdb29677fc93e6c847f9c2e (patch) | |
tree | 2e4bdce5bf0b5a1819bb9c80710c1ea1b07eb522 | |
parent | c0e0e2b8a9f0142b56143a6b7fb6ead9d452e4b7 (diff) |
Make QSTileImpl a LifecycleOwner and make use of it
Test: existing tests pass
Change-Id: I6ac1fd46b74d8eb48c83af3883c7fdcd2cb0f628
15 files changed, 42 insertions, 69 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java index cc27135ce1e1..e1a43785b5c4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java @@ -14,6 +14,9 @@ package com.android.systemui.qs.tileimpl; +import static androidx.lifecycle.Lifecycle.State.DESTROYED; +import static androidx.lifecycle.Lifecycle.State.RESUMED; + import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_CLICK; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_LONG_PRESS; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_SECONDARY_CLICK; @@ -38,6 +41,11 @@ import android.util.ArraySet; import android.util.Log; import android.util.SparseArray; +import androidx.annotation.NonNull; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LifecycleRegistry; + import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.settingslib.RestrictedLockUtils; @@ -66,7 +74,7 @@ import java.util.ArrayList; * * @param <TState> see above */ -public abstract class QSTileImpl<TState extends State> implements QSTile { +public abstract class QSTileImpl<TState extends State> implements QSTile, LifecycleOwner { protected final String TAG = "Tile." + getClass().getSimpleName(); protected static final boolean DEBUG = Log.isLoggable("Tile", Log.DEBUG); @@ -94,6 +102,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile { private boolean mShowingDetail; private int mIsFullQs; + private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); + public abstract TState newTileState(); abstract protected void handleClick(); @@ -113,6 +123,12 @@ public abstract class QSTileImpl<TState extends State> implements QSTile { mContext = host.getContext(); } + @NonNull + @Override + public Lifecycle getLifecycle() { + return mLifecycle; + } + /** * Adds or removes a listening client for the tile. If the tile has one or more * listening client it will go into the listening state. @@ -341,12 +357,14 @@ public abstract class QSTileImpl<TState extends State> implements QSTile { if (listening) { if (mListeners.add(listener) && mListeners.size() == 1) { if (DEBUG) Log.d(TAG, "handleSetListening true"); + mLifecycle.markState(RESUMED); handleSetListening(listening); refreshState(); // Ensure we get at least one refresh after listening. } } else { if (mListeners.remove(listener) && mListeners.size() == 0) { if (DEBUG) Log.d(TAG, "handleSetListening false"); + mLifecycle.markState(DESTROYED); handleSetListening(listening); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java index 219565ee9fdf..7f76900bba21 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java @@ -45,6 +45,7 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements public BatterySaverTile(QSHost host, BatteryController batteryController) { super(host); mBatteryController = batteryController; + mBatteryController.observe(getLifecycle(), this); } @Override @@ -59,11 +60,6 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements @Override public void handleSetListening(boolean listening) { - if (listening) { - mBatteryController.addCallback(this); - } else { - mBatteryController.removeCallback(this); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 49fd75bcccba..5b85498574a7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -68,6 +68,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { mController = bluetoothController; mActivityStarter = activityStarter; mDetailAdapter = (BluetoothDetailAdapter) createDetailAdapter(); + mController.observe(getLifecycle(), mCallback); } @Override @@ -82,11 +83,6 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { @Override public void handleSetListening(boolean listening) { - if (listening) { - mController.addCallback(mCallback); - } else { - mController.removeCallback(mCallback); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index fa4c210b2f32..f05ac4c107eb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -75,6 +75,9 @@ public class CastTile extends QSTileImpl<BooleanState> { mKeyguard = keyguardMonitor; mNetworkController = networkController; mActivityStarter = activityStarter; + mController.observe(this, mCallback); + mKeyguard.observe(this, mCallback); + mNetworkController.observe(this, mSignalCallback); } @Override @@ -90,15 +93,8 @@ public class CastTile extends QSTileImpl<BooleanState> { @Override public void handleSetListening(boolean listening) { if (DEBUG) Log.d(TAG, "handleSetListening " + listening); - if (listening) { - mController.addCallback(mCallback); - mKeyguard.addCallback(mCallback); - mNetworkController.addCallback(mSignalCallback); - } else { + if (!listening) { mController.setDiscovering(false); - mController.removeCallback(mCallback); - mKeyguard.removeCallback(mCallback); - mNetworkController.removeCallback(mSignalCallback); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index bed2e8baeed7..1155a414b870 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -73,6 +73,7 @@ public class CellularTile extends QSTileImpl<SignalState> { mKeyguardMonitor = keyguardMonitor; mDataController = mController.getMobileDataController(); mDetailAdapter = new CellularDetailAdapter(); + mController.observe(getLifecycle(), mSignalCallback); } @Override @@ -87,11 +88,6 @@ public class CellularTile extends QSTileImpl<SignalState> { @Override public void handleSetListening(boolean listening) { - if (listening) { - mController.addCallback(mSignalCallback); - } else { - mController.removeCallback(mSignalCallback); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java index a078a3ede792..c6c6f877ac9b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java @@ -40,6 +40,7 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements public DataSaverTile(QSHost host, NetworkController networkController) { super(host); mDataSaverController = networkController.getDataSaverController(); + mDataSaverController.observe(getLifecycle(), this); } @Override @@ -49,11 +50,6 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements @Override public void handleSetListening(boolean listening) { - if (listening) { - mDataSaverController.addCallback(this); - } else { - mDataSaverController.removeCallback(this); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 7ab23c6e7a06..5f04e56f28a4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -92,6 +92,7 @@ public class DndTile extends QSTileImpl<BooleanState> { mDetailAdapter = new DndDetailAdapter(); mContext.registerReceiver(mReceiver, new IntentFilter(ACTION_SET_VISIBLE)); mReceiverRegistered = true; + mController.observe(getLifecycle(), mZenCallback); } @Override @@ -286,10 +287,8 @@ public class DndTile extends QSTileImpl<BooleanState> { if (mListening == listening) return; mListening = listening; if (mListening) { - mController.addCallback(mZenCallback); Prefs.registerListener(mContext, mPrefListener); } else { - mController.removeCallback(mZenCallback); Prefs.unregisterListener(mContext, mPrefListener); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java index bad09d3a3406..dfa3fb9dafc9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java @@ -42,6 +42,7 @@ public class FlashlightTile extends QSTileImpl<BooleanState> implements public FlashlightTile(QSHost host, FlashlightController flashlightController) { super(host); mFlashlightController = flashlightController; + mFlashlightController.observe(getLifecycle(), this); } @Override @@ -58,11 +59,6 @@ public class FlashlightTile extends QSTileImpl<BooleanState> implements @Override public void handleSetListening(boolean listening) { - if (listening) { - mFlashlightController.addCallback(this); - } else { - mFlashlightController.removeCallback(this); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java index 72916ed49815..b7e07f828321 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java @@ -61,6 +61,8 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { refreshState(); } }; + mHotspotController.observe(this, mCallbacks); + mDataSaverController.observe(this, mCallbacks); } @Override @@ -83,12 +85,7 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { if (mListening == listening) return; mListening = listening; if (listening) { - mHotspotController.addCallback(mCallbacks); - mDataSaverController.addCallback(mCallbacks); refreshState(); - } else { - mHotspotController.removeCallback(mCallbacks); - mDataSaverController.removeCallback(mCallbacks); } mAirplaneMode.setListening(listening); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java index b57bf4bf36a6..d740033c9f48 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java @@ -52,6 +52,8 @@ public class LocationTile extends QSTileImpl<BooleanState> { mController = locationController; mKeyguard = keyguardMonitor; mActivityStarter = activityStarter; + mController.observe(this, mCallback); + mKeyguard.observe(this, mCallback); } @Override @@ -61,13 +63,6 @@ public class LocationTile extends QSTileImpl<BooleanState> { @Override public void handleSetListening(boolean listening) { - if (listening) { - mController.addCallback(mCallback); - mKeyguard.addCallback(mCallback); - } else { - mController.removeCallback(mCallback); - mKeyguard.removeCallback(mCallback); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java index e3c6d368eaaa..21f3d6e77f7b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java @@ -43,6 +43,7 @@ public class RotationLockTile extends QSTileImpl<BooleanState> { public RotationLockTile(QSHost host, RotationLockController rotationLockController) { super(host); mController = rotationLockController; + mController.observe(this, mCallback); } @Override @@ -51,11 +52,6 @@ public class RotationLockTile extends QSTileImpl<BooleanState> { } public void handleSetListening(boolean listening) { - if (listening) { - mController.addCallback(mCallback); - } else { - mController.removeCallback(mCallback); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java index bbf7efc5ede6..7c1ffde8f00a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java @@ -44,6 +44,7 @@ public class UserTile extends QSTileImpl<State> implements UserInfoController.On super(host); mUserSwitcherController = userSwitcherController; mUserInfoController = userInfoController; + mUserInfoController.observe(getLifecycle(), this); } @Override @@ -73,11 +74,6 @@ public class UserTile extends QSTileImpl<State> implements UserInfoController.On @Override public void handleSetListening(boolean listening) { - if (listening) { - mUserInfoController.addCallback(this); - } else { - mUserInfoController.removeCallback(this); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index c5a4fdafb4a4..52a88145c7ed 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -73,6 +73,7 @@ public class WifiTile extends QSTileImpl<SignalState> { mWifiController = mController.getAccessPointController(); mDetailAdapter = (WifiDetailAdapter) createDetailAdapter(); mActivityStarter = activityStarter; + mController.observe(getLifecycle(), mSignalCallback); } @Override @@ -82,11 +83,6 @@ public class WifiTile extends QSTileImpl<SignalState> { @Override public void handleSetListening(boolean listening) { - if (listening) { - mController.addCallback(mSignalCallback); - } else { - mController.removeCallback(mSignalCallback); - } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java index 972fc9e48561..f921eb9a49a6 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java @@ -41,6 +41,7 @@ public class WorkModeTile extends QSTileImpl<BooleanState> implements public WorkModeTile(QSHost host, ManagedProfileController managedProfileController) { super(host); mProfileController = managedProfileController; + mProfileController.observe(getLifecycle(), this); } @Override @@ -50,11 +51,6 @@ public class WorkModeTile extends QSTileImpl<BooleanState> implements @Override public void handleSetListening(boolean listening) { - if (listening) { - mProfileController.addCallback(this); - } else { - mProfileController.removeCallback(this); - } } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java index 40fcbefeb2a3..efcbb769cbf0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles; import static junit.framework.TestCase.assertEquals; +import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -25,6 +26,8 @@ import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; +import androidx.lifecycle.LifecycleOwner; + import com.android.systemui.Dependency; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.ActivityStarter; @@ -88,7 +91,8 @@ public class CastTileTest extends SysuiTestCase { mCastTile.handleSetListening(true); ArgumentCaptor<NetworkController.SignalCallback> signalCallbackArgumentCaptor = ArgumentCaptor.forClass(NetworkController.SignalCallback.class); - verify(mNetworkController).addCallback(signalCallbackArgumentCaptor.capture()); + verify(mNetworkController).observe(any(LifecycleOwner.class), + signalCallbackArgumentCaptor.capture()); mCallback = signalCallbackArgumentCaptor.getValue(); } |