Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java +34 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -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; Loading @@ -67,6 +72,7 @@ public class AutoTileManager { mDataSaverController = dataSaverController; mManagedProfileController = managedProfileController; mNightDisplayListener = nightDisplayListener; mCastController = castController; if (!mAutoTracker.isAdded(HOTSPOT)) { hotspotController.addCallback(mHotspotCallback); } Loading Loading @@ -95,6 +101,9 @@ public class AutoTileManager { && ColorDisplayManager.isNightDisplayAvailable(mContext)) { nightDisplayListener.setCallback(mNightDisplayCallback); } if (!mAutoTracker.isAdded(CAST)) { castController.addCallback(mCastCallback); } } public void destroy() { Loading @@ -108,6 +117,7 @@ public class AutoTileManager { if (ColorDisplayManager.isNightDisplayAvailable(mContext)) { mNightDisplayListener.setCallback(null); } mCastController.removeCallback(mCastCallback); } public void unmarkTileAsAutoAdded(String tabSpec) { Loading Loading @@ -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)); } } }; } packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java +29 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading @@ -47,6 +53,7 @@ public class AutoTileManagerTest extends SysuiTestCase { @Mock private QSTileHost mQsTileHost; @Mock private AutoAddTracker mAutoAddTracker; @Mock private CastController mCastController; private AutoTileManager mAutoTileManager; Loading @@ -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 Loading Loading @@ -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"); } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java +34 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -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; Loading @@ -67,6 +72,7 @@ public class AutoTileManager { mDataSaverController = dataSaverController; mManagedProfileController = managedProfileController; mNightDisplayListener = nightDisplayListener; mCastController = castController; if (!mAutoTracker.isAdded(HOTSPOT)) { hotspotController.addCallback(mHotspotCallback); } Loading Loading @@ -95,6 +101,9 @@ public class AutoTileManager { && ColorDisplayManager.isNightDisplayAvailable(mContext)) { nightDisplayListener.setCallback(mNightDisplayCallback); } if (!mAutoTracker.isAdded(CAST)) { castController.addCallback(mCastCallback); } } public void destroy() { Loading @@ -108,6 +117,7 @@ public class AutoTileManager { if (ColorDisplayManager.isNightDisplayAvailable(mContext)) { mNightDisplayListener.setCallback(null); } mCastController.removeCallback(mCastCallback); } public void unmarkTileAsAutoAdded(String tabSpec) { Loading Loading @@ -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)); } } }; }
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java +29 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading @@ -47,6 +53,7 @@ public class AutoTileManagerTest extends SysuiTestCase { @Mock private QSTileHost mQsTileHost; @Mock private AutoAddTracker mAutoAddTracker; @Mock private CastController mCastController; private AutoTileManager mAutoTileManager; Loading @@ -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 Loading Loading @@ -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"); } }