Loading packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +29 −3 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; Loading @@ -72,6 +73,7 @@ public class CastTile extends QSTileImpl<BooleanState> { private final Callback mCallback = new Callback(); private Dialog mDialog; private boolean mWifiConnected; private boolean mHotspotConnected; @Inject public CastTile( Loading @@ -84,7 +86,8 @@ public class CastTile extends QSTileImpl<BooleanState> { QSLogger qsLogger, CastController castController, KeyguardStateController keyguardStateController, NetworkController networkController NetworkController networkController, HotspotController hotspotController ) { super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController, activityStarter, qsLogger); Loading @@ -95,6 +98,7 @@ public class CastTile extends QSTileImpl<BooleanState> { mController.observe(this, mCallback); mKeyguard.observe(this, mCallback); mNetworkController.observe(this, mSignalCallback); hotspotController.observe(this, mHotspotCallback); } @Override Loading Loading @@ -222,7 +226,7 @@ public class CastTile extends QSTileImpl<BooleanState> { } state.icon = ResourceIcon.get(state.value ? R.drawable.ic_cast_connected : R.drawable.ic_cast); if (mWifiConnected || state.value) { if (canCastToWifi() || state.value) { state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; if (!state.value) { state.secondaryLabel = ""; Loading Loading @@ -258,6 +262,10 @@ public class CastTile extends QSTileImpl<BooleanState> { : mContext.getString(R.string.quick_settings_cast_device_default_name); } private boolean canCastToWifi() { return mWifiConnected || mHotspotConnected; } private final NetworkController.SignalCallback mSignalCallback = new NetworkController.SignalCallback() { @Override Loading @@ -269,9 +277,27 @@ public class CastTile extends QSTileImpl<BooleanState> { boolean enabledAndConnected = enabled && qsIcon.visible; if (enabledAndConnected != mWifiConnected) { mWifiConnected = enabledAndConnected; // Hotspot is not connected, so changes here should update if (!mHotspotConnected) { refreshState(); } } } }; private final HotspotController.Callback mHotspotCallback = new HotspotController.Callback() { @Override public void onHotspotChanged(boolean enabled, int numDevices) { boolean enabledAndConnected = enabled && numDevices > 0; if (enabledAndConnected != mHotspotConnected) { mHotspotConnected = enabledAndConnected; // Wifi is not connected, so changes here should update if (!mWifiConnected) { refreshState(); } } } }; private final class Callback implements CastController.Callback, Loading packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java +60 −6 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; Loading Loading @@ -73,12 +74,16 @@ public class CastTileTest extends SysuiTestCase { @Mock private QSTileHost mHost; @Mock NetworkController.SignalCallback mCallback; NetworkController.SignalCallback mSignalCallback; @Mock private MetricsLogger mMetricsLogger; @Mock private StatusBarStateController mStatusBarStateController; @Mock private HotspotController mHotspotController; @Mock private HotspotController.Callback mHotspotCallback; @Mock private QSLogger mQSLogger; private TestableLooper mTestableLooper; Loading @@ -101,7 +106,8 @@ public class CastTileTest extends SysuiTestCase { mQSLogger, mController, mKeyguard, mNetworkController mNetworkController, mHotspotController ); // We are not setting the mocks to listening, so we trigger a first refresh state to Loading @@ -113,14 +119,22 @@ public class CastTileTest extends SysuiTestCase { ArgumentCaptor.forClass(NetworkController.SignalCallback.class); verify(mNetworkController).observe(any(LifecycleOwner.class), signalCallbackArgumentCaptor.capture()); mCallback = signalCallbackArgumentCaptor.getValue(); mSignalCallback = signalCallbackArgumentCaptor.getValue(); ArgumentCaptor<HotspotController.Callback> hotspotCallbackArgumentCaptor = ArgumentCaptor.forClass(HotspotController.Callback.class); verify(mHotspotController).observe(any(LifecycleOwner.class), hotspotCallbackArgumentCaptor.capture()); mHotspotCallback = hotspotCallbackArgumentCaptor.getValue(); } // ------------------------------------------------- // All these tests for enabled/disabled wifi have hotspot not enabled @Test public void testStateUnavailable_wifiDisabled() { NetworkController.IconState qsIcon = new NetworkController.IconState(false, 0, ""); mCallback.setWifiIndicators(false, mock(NetworkController.IconState.class), mSignalCallback.setWifiIndicators(false, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); mTestableLooper.processAllMessages(); Loading @@ -132,7 +146,7 @@ public class CastTileTest extends SysuiTestCase { public void testStateUnavailable_wifiNotConnected() { NetworkController.IconState qsIcon = new NetworkController.IconState(false, 0, ""); mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), mSignalCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); mTestableLooper.processAllMessages(); Loading @@ -143,7 +157,7 @@ public class CastTileTest extends SysuiTestCase { private void enableWifiAndProcessMessages() { NetworkController.IconState qsIcon = new NetworkController.IconState(true, 0, ""); mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), mSignalCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); mTestableLooper.processAllMessages(); Loading @@ -166,6 +180,46 @@ public class CastTileTest extends SysuiTestCase { enableWifiAndProcessMessages(); assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state); } // ------------------------------------------------- // ------------------------------------------------- // All these tests for enabled/disabled hotspot have wifi not enabled @Test public void testStateUnavailable_hotspotDisabled() { mHotspotCallback.onHotspotChanged(false, 0); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); } @Test public void testStateUnavailable_hotspotEnabledNotConnected() { mHotspotCallback.onHotspotChanged(true, 0); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); } @Test public void testStateActive_hotspotEnabledAndConnectedAndCasting() { CastController.CastDevice device = new CastController.CastDevice(); device.state = CastController.CastDevice.STATE_CONNECTED; List<CastDevice> devices = new ArrayList<>(); devices.add(device); when(mController.getCastDevices()).thenReturn(devices); mHotspotCallback.onHotspotChanged(true, 1); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state); } @Test public void testStateInactive_hotspotEnabledAndConnectedAndNotCasting() { mHotspotCallback.onHotspotChanged(true, 1); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state); } // ------------------------------------------------- @Test public void testHandleClick_castDevicePresent() { Loading Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +29 −3 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; Loading @@ -72,6 +73,7 @@ public class CastTile extends QSTileImpl<BooleanState> { private final Callback mCallback = new Callback(); private Dialog mDialog; private boolean mWifiConnected; private boolean mHotspotConnected; @Inject public CastTile( Loading @@ -84,7 +86,8 @@ public class CastTile extends QSTileImpl<BooleanState> { QSLogger qsLogger, CastController castController, KeyguardStateController keyguardStateController, NetworkController networkController NetworkController networkController, HotspotController hotspotController ) { super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController, activityStarter, qsLogger); Loading @@ -95,6 +98,7 @@ public class CastTile extends QSTileImpl<BooleanState> { mController.observe(this, mCallback); mKeyguard.observe(this, mCallback); mNetworkController.observe(this, mSignalCallback); hotspotController.observe(this, mHotspotCallback); } @Override Loading Loading @@ -222,7 +226,7 @@ public class CastTile extends QSTileImpl<BooleanState> { } state.icon = ResourceIcon.get(state.value ? R.drawable.ic_cast_connected : R.drawable.ic_cast); if (mWifiConnected || state.value) { if (canCastToWifi() || state.value) { state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; if (!state.value) { state.secondaryLabel = ""; Loading Loading @@ -258,6 +262,10 @@ public class CastTile extends QSTileImpl<BooleanState> { : mContext.getString(R.string.quick_settings_cast_device_default_name); } private boolean canCastToWifi() { return mWifiConnected || mHotspotConnected; } private final NetworkController.SignalCallback mSignalCallback = new NetworkController.SignalCallback() { @Override Loading @@ -269,9 +277,27 @@ public class CastTile extends QSTileImpl<BooleanState> { boolean enabledAndConnected = enabled && qsIcon.visible; if (enabledAndConnected != mWifiConnected) { mWifiConnected = enabledAndConnected; // Hotspot is not connected, so changes here should update if (!mHotspotConnected) { refreshState(); } } } }; private final HotspotController.Callback mHotspotCallback = new HotspotController.Callback() { @Override public void onHotspotChanged(boolean enabled, int numDevices) { boolean enabledAndConnected = enabled && numDevices > 0; if (enabledAndConnected != mHotspotConnected) { mHotspotConnected = enabledAndConnected; // Wifi is not connected, so changes here should update if (!mWifiConnected) { refreshState(); } } } }; private final class Callback implements CastController.Callback, Loading
packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java +60 −6 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; Loading Loading @@ -73,12 +74,16 @@ public class CastTileTest extends SysuiTestCase { @Mock private QSTileHost mHost; @Mock NetworkController.SignalCallback mCallback; NetworkController.SignalCallback mSignalCallback; @Mock private MetricsLogger mMetricsLogger; @Mock private StatusBarStateController mStatusBarStateController; @Mock private HotspotController mHotspotController; @Mock private HotspotController.Callback mHotspotCallback; @Mock private QSLogger mQSLogger; private TestableLooper mTestableLooper; Loading @@ -101,7 +106,8 @@ public class CastTileTest extends SysuiTestCase { mQSLogger, mController, mKeyguard, mNetworkController mNetworkController, mHotspotController ); // We are not setting the mocks to listening, so we trigger a first refresh state to Loading @@ -113,14 +119,22 @@ public class CastTileTest extends SysuiTestCase { ArgumentCaptor.forClass(NetworkController.SignalCallback.class); verify(mNetworkController).observe(any(LifecycleOwner.class), signalCallbackArgumentCaptor.capture()); mCallback = signalCallbackArgumentCaptor.getValue(); mSignalCallback = signalCallbackArgumentCaptor.getValue(); ArgumentCaptor<HotspotController.Callback> hotspotCallbackArgumentCaptor = ArgumentCaptor.forClass(HotspotController.Callback.class); verify(mHotspotController).observe(any(LifecycleOwner.class), hotspotCallbackArgumentCaptor.capture()); mHotspotCallback = hotspotCallbackArgumentCaptor.getValue(); } // ------------------------------------------------- // All these tests for enabled/disabled wifi have hotspot not enabled @Test public void testStateUnavailable_wifiDisabled() { NetworkController.IconState qsIcon = new NetworkController.IconState(false, 0, ""); mCallback.setWifiIndicators(false, mock(NetworkController.IconState.class), mSignalCallback.setWifiIndicators(false, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); mTestableLooper.processAllMessages(); Loading @@ -132,7 +146,7 @@ public class CastTileTest extends SysuiTestCase { public void testStateUnavailable_wifiNotConnected() { NetworkController.IconState qsIcon = new NetworkController.IconState(false, 0, ""); mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), mSignalCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); mTestableLooper.processAllMessages(); Loading @@ -143,7 +157,7 @@ public class CastTileTest extends SysuiTestCase { private void enableWifiAndProcessMessages() { NetworkController.IconState qsIcon = new NetworkController.IconState(true, 0, ""); mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), mSignalCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); mTestableLooper.processAllMessages(); Loading @@ -166,6 +180,46 @@ public class CastTileTest extends SysuiTestCase { enableWifiAndProcessMessages(); assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state); } // ------------------------------------------------- // ------------------------------------------------- // All these tests for enabled/disabled hotspot have wifi not enabled @Test public void testStateUnavailable_hotspotDisabled() { mHotspotCallback.onHotspotChanged(false, 0); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); } @Test public void testStateUnavailable_hotspotEnabledNotConnected() { mHotspotCallback.onHotspotChanged(true, 0); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); } @Test public void testStateActive_hotspotEnabledAndConnectedAndCasting() { CastController.CastDevice device = new CastController.CastDevice(); device.state = CastController.CastDevice.STATE_CONNECTED; List<CastDevice> devices = new ArrayList<>(); devices.add(device); when(mController.getCastDevices()).thenReturn(devices); mHotspotCallback.onHotspotChanged(true, 1); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state); } @Test public void testStateInactive_hotspotEnabledAndConnectedAndNotCasting() { mHotspotCallback.onHotspotChanged(true, 1); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state); } // ------------------------------------------------- @Test public void testHandleClick_castDevicePresent() { Loading