diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java | 35 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java | 30 |
2 files changed, 63 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java index c9be2c8f6703..007c50c8765d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java @@ -25,6 +25,8 @@ import com.android.systemui.Dependency; import com.android.systemui.qs.AutoAddTracker; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.SecureSetting; +import com.android.systemui.statusbar.policy.CastController; +import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.DataSaverController.Listener; import com.android.systemui.statusbar.policy.HotspotController; @@ -42,6 +44,7 @@ public class AutoTileManager { public static final String INVERSION = "inversion"; public static final String WORK = "work"; public static final String NIGHT = "night"; + public static final String CAST = "cast"; private final Context mContext; private final QSTileHost mHost; @@ -51,6 +54,7 @@ public class AutoTileManager { private final DataSaverController mDataSaverController; private final ManagedProfileController mManagedProfileController; private final NightDisplayListener mNightDisplayListener; + private final CastController mCastController; @Inject public AutoTileManager(Context context, AutoAddTracker autoAddTracker, QSTileHost host, @@ -58,7 +62,8 @@ public class AutoTileManager { HotspotController hotspotController, DataSaverController dataSaverController, ManagedProfileController managedProfileController, - NightDisplayListener nightDisplayListener) { + NightDisplayListener nightDisplayListener, + CastController castController) { mAutoTracker = autoAddTracker; mContext = context; mHost = host; @@ -67,6 +72,7 @@ public class AutoTileManager { mDataSaverController = dataSaverController; mManagedProfileController = managedProfileController; mNightDisplayListener = nightDisplayListener; + mCastController = castController; if (!mAutoTracker.isAdded(HOTSPOT)) { hotspotController.addCallback(mHotspotCallback); } @@ -95,6 +101,9 @@ public class AutoTileManager { && ColorDisplayManager.isNightDisplayAvailable(mContext)) { nightDisplayListener.setCallback(mNightDisplayCallback); } + if (!mAutoTracker.isAdded(CAST)) { + castController.addCallback(mCastCallback); + } } public void destroy() { @@ -108,6 +117,7 @@ public class AutoTileManager { if (ColorDisplayManager.isNightDisplayAvailable(mContext)) { mNightDisplayListener.setCallback(null); } + mCastController.removeCallback(mCastCallback); } public void unmarkTileAsAutoAdded(String tabSpec) { @@ -181,4 +191,27 @@ public class AutoTileManager { mHandler.post(() -> mNightDisplayListener.setCallback(null)); } }; + + @VisibleForTesting + final CastController.Callback mCastCallback = new CastController.Callback() { + @Override + public void onCastDevicesChanged() { + if (mAutoTracker.isAdded(CAST)) return; + + boolean isCasting = false; + for (CastDevice device : mCastController.getCastDevices()) { + if (device.state == CastDevice.STATE_CONNECTED + || device.state == CastDevice.STATE_CONNECTING) { + isCasting = true; + break; + } + } + + if (isCasting) { + mHost.addTile(CAST); + mAutoTracker.setTileAdded(CAST); + mHandler.post(() -> mCastController.removeCallback(mCastCallback)); + } + } + }; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java index f3740c4d51d0..87699b816c07 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.phone; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -31,6 +32,8 @@ import android.testing.TestableLooper.RunWithLooper; import com.android.systemui.SysuiTestCase; import com.android.systemui.qs.AutoAddTracker; import com.android.systemui.qs.QSTileHost; +import com.android.systemui.statusbar.policy.CastController; +import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.HotspotController; @@ -40,6 +43,9 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.Collections; +import java.util.Set; + @RunWith(AndroidTestingRunner.class) @RunWithLooper @SmallTest @@ -47,6 +53,7 @@ public class AutoTileManagerTest extends SysuiTestCase { @Mock private QSTileHost mQsTileHost; @Mock private AutoAddTracker mAutoAddTracker; + @Mock private CastController mCastController; private AutoTileManager mAutoTileManager; @@ -58,7 +65,8 @@ public class AutoTileManagerTest extends SysuiTestCase { mock(HotspotController.class), mock(DataSaverController.class), mock(ManagedProfileController.class), - mock(NightDisplayListener.class)); + mock(NightDisplayListener.class), + mCastController); } @Test @@ -108,4 +116,24 @@ public class AutoTileManagerTest extends SysuiTestCase { ColorDisplayManager.AUTO_MODE_DISABLED); verify(mQsTileHost, never()).addTile("night"); } + + private static Set<CastDevice> buildFakeCastDevice(boolean isCasting) { + CastDevice cd = new CastDevice(); + cd.state = isCasting ? CastDevice.STATE_CONNECTED : CastDevice.STATE_DISCONNECTED; + return Collections.singleton(cd); + } + + @Test + public void castTileAdded_whenDeviceIsCasting() { + doReturn(buildFakeCastDevice(true)).when(mCastController).getCastDevices(); + mAutoTileManager.mCastCallback.onCastDevicesChanged(); + verify(mQsTileHost).addTile("cast"); + } + + @Test + public void castTileNotAdded_whenDeviceIsNotCasting() { + doReturn(buildFakeCastDevice(false)).when(mCastController).getCastDevices(); + mAutoTileManager.mCastCallback.onCastDevicesChanged(); + verify(mQsTileHost, never()).addTile("cast"); + } } |