diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java index 4012736b8beb0..8e01b6dfae07c 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java @@ -90,6 +90,7 @@ import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent; +import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.LargeScreenUtils; @@ -135,6 +136,7 @@ public class QuickSettingsController { private final LockscreenGestureLogger mLockscreenGestureLogger; private final ShadeLogger mShadeLog; private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor; + private final CastController mCastController; private final FeatureFlags mFeatureFlags; private final InteractionJankMonitor mInteractionJankMonitor; private final ShadeRepository mShadeRepository; @@ -324,7 +326,8 @@ public class QuickSettingsController { InteractionJankMonitor interactionJankMonitor, ShadeLogger shadeLog, KeyguardFaceAuthInteractor keyguardFaceAuthInteractor, - ShadeRepository shadeRepository + ShadeRepository shadeRepository, + CastController castController ) { mPanelViewControllerLazy = panelViewControllerLazy; mPanelView = panelView; @@ -364,6 +367,7 @@ public class QuickSettingsController { mMetricsLogger = metricsLogger; mShadeLog = shadeLog; mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor; + mCastController = castController; mFeatureFlags = featureFlags; mInteractionJankMonitor = interactionJankMonitor; mShadeRepository = shadeRepository; @@ -1188,7 +1192,9 @@ public class QuickSettingsController { mLastClipBounds.set(left, top, right, bottom); if (mIsFullWidth) { clipStatusView = qsVisible; - float screenCornerRadius = mRecordingController.isRecording() ? 0 : mScreenCornerRadius; + float screenCornerRadius = + mRecordingController.isRecording() || mCastController.hasConnectedCastDevice() + ? 0 : mScreenCornerRadius; radius = (int) MathUtils.lerp(screenCornerRadius, mScrimCornerRadius, Math.min(top / (float) mScrimCornerRadius, 1f)); mScrimController.setNotificationBottomRadius(radius); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastController.java index 98cde2a049daf..abedd3220c934 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastController.java @@ -28,6 +28,11 @@ public interface CastController extends CallbackController, Dumpable { void startCasting(CastDevice device); void stopCasting(CastDevice device); + /** + * @return whether we have a connected device. + */ + boolean hasConnectedCastDevice(); + public interface Callback { void onCastDevicesChanged(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java index 7290a1a820708..f7b601b9d2840 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java @@ -217,6 +217,12 @@ public class CastControllerImpl implements CastController { } } + @Override + public boolean hasConnectedCastDevice() { + return getCastDevices().stream().anyMatch( + castDevice -> castDevice.state == CastDevice.STATE_CONNECTED); + } + private void setProjection(MediaProjectionInfo projection, boolean started) { boolean changed = false; final MediaProjectionInfo oldProjection = mProjection; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java index 1edc63c4417e2..46f29de36a28f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java @@ -158,6 +158,7 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; import com.android.systemui.statusbar.phone.TapAgainViewController; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; +import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardQsUserSwitchController; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -306,6 +307,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { @Mock protected ActivityStarter mActivityStarter; @Mock protected KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor; @Mock protected ShadeRepository mShadeRepository; + @Mock private CastController mCastController; protected final int mMaxUdfpsBurnInOffsetY = 5; protected KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor; @@ -675,7 +677,8 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mInteractionJankMonitor, mShadeLog, mKeyguardFaceAuthInteractor, - mShadeRepository + mShadeRepository, + mCastController ); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java index 8a9161e6d46db..f514b109c3839 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java @@ -87,6 +87,7 @@ import com.android.systemui.statusbar.phone.LockscreenGestureLogger; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; +import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.KeyguardStateController; import dagger.Lazy; @@ -155,6 +156,7 @@ public class QuickSettingsControllerTest extends SysuiTestCase { @Mock private ShadeLogger mShadeLogger; @Mock private DumpManager mDumpManager; @Mock private UiEventLogger mUiEventLogger; + @Mock private CastController mCastController; private SysuiStatusBarStateController mStatusBarStateController; @@ -243,7 +245,8 @@ public class QuickSettingsControllerTest extends SysuiTestCase { mInteractionJankMonitor, mShadeLogger, mock(KeyguardFaceAuthInteractor.class), - mock(ShadeRepository.class) + mock(ShadeRepository.class), + mCastController ); mFragmentListener = mQsController.getQsFragmentListener(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java index db50163ce6a73..b8e4306a319dc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java @@ -1,6 +1,7 @@ package com.android.systemui.statusbar.policy; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -125,4 +126,20 @@ public class CastControllerImplTest extends SysuiTestCase { fail("Concurrent modification exception"); } } + + @Test + public void hasConnectedCastDevice_connected() { + CastController.CastDevice castDevice = new CastController.CastDevice(); + castDevice.state = CastController.CastDevice.STATE_CONNECTED; + mController.startCasting(castDevice); + assertTrue(mController.hasConnectedCastDevice()); + } + + @Test + public void hasConnectedCastDevice_notConnected() { + CastController.CastDevice castDevice = new CastController.CastDevice(); + castDevice.state = CastController.CastDevice.STATE_CONNECTING; + mController.startCasting(castDevice); + assertTrue(mController.hasConnectedCastDevice()); + } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeCastController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeCastController.java index f6b24da9b821b..84ace7cc9540c 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeCastController.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeCastController.java @@ -51,4 +51,9 @@ public class FakeCastController extends BaseLeakChecker implements Cas public void stopCasting(CastDevice device) { } + + @Override + public boolean hasConnectedCastDevice() { + return false; + } }