diff options
5 files changed, 65 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index b48b40986f73..875e505db1c6 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -94,6 +94,7 @@ import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; import com.android.systemui.statusbar.phone.SystemUIDialog; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractor; import dagger.assisted.Assisted; import dagger.assisted.AssistedFactory; @@ -173,6 +174,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, private float mActiveRadius; private FeatureFlags mFeatureFlags; private UserTracker mUserTracker; + private VolumePanelGlobalStateInteractor mVolumePanelGlobalStateInteractor; public enum BroadcastNotifyDialog { ACTION_FIRST_LAUNCH, @@ -195,6 +197,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, PowerExemptionManager powerExemptionManager, KeyguardManager keyGuardManager, FeatureFlags featureFlags, + VolumePanelGlobalStateInteractor volumePanelGlobalStateInteractor, UserTracker userTracker) { mContext = context; mPackageName = packageName; @@ -209,6 +212,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, mFeatureFlags = featureFlags; mUserTracker = userTracker; mToken = token; + mVolumePanelGlobalStateInteractor = volumePanelGlobalStateInteractor; InfoMediaManager imm = InfoMediaManager.createInstance(mContext, packageName, userHandle, lbm, token); mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName); @@ -436,7 +440,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, launchIntent.putExtra(EXTRA_ROUTE_ID, routeId); launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mCallback.dismissDialog(); - mActivityStarter.startActivity(launchIntent, true, controller); + startActivity(launchIntent, controller); } } @@ -447,7 +451,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, if (launchIntent != null) { launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mCallback.dismissDialog(); - mActivityStarter.startActivity(launchIntent, true, controller); + startActivity(launchIntent, controller); } } @@ -951,10 +955,10 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, deepLinkIntent.putExtra( Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY, PAGE_CONNECTED_DEVICES_KEY); - mActivityStarter.startActivity(deepLinkIntent, true, controller); + startActivity(deepLinkIntent, controller); return; } - mActivityStarter.startActivity(launchIntent, true, controller); + startActivity(launchIntent, controller); } void launchLeBroadcastNotifyDialog(View mediaOutputDialog, BroadcastSender broadcastSender, @@ -998,6 +1002,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, mPowerExemptionManager, mKeyGuardManager, mFeatureFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); MediaOutputBroadcastDialog dialog = new MediaOutputBroadcastDialog(mContext, true, broadcastSender, controller); @@ -1244,6 +1249,13 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, return !device.isVolumeFixed(); } + private void startActivity(Intent intent, ActivityTransitionAnimator.Controller controller) { + // Media Output dialog can be shown from the volume panel. This makes sure the panel is + // closed when navigating to another activity, so it doesn't stays on top of it + mVolumePanelGlobalStateInteractor.setVisible(false); + mActivityStarter.startActivity(intent, true, controller); + } + @Override public void onDevicesUpdated(List<NearbyDevice> nearbyDevices) throws RemoteException { mNearbyDeviceInfoMap.clear(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java index d5cd86ec0b76..c8cc6b5fdf93 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java @@ -50,14 +50,18 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.settingslib.media.LocalMediaManager; import com.android.systemui.SysuiTestCase; +import com.android.systemui.SysuiTestCaseExtKt; import com.android.systemui.animation.DialogTransitionAnimator; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.kosmos.Kosmos; import com.android.systemui.media.nearby.NearbyMediaDevicesManager; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractor; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractorKosmosKt; import org.junit.Before; import org.junit.Test; @@ -73,6 +77,8 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { private static final String TEST_PACKAGE = "test_package"; + private final Kosmos mKosmos = SysuiTestCaseExtKt.testKosmos(this); + // Mock private MediaOutputBaseAdapter mMediaOutputBaseAdapter = mock(MediaOutputBaseAdapter.class); private MediaController mMediaController = mock(MediaController.class); @@ -122,6 +128,9 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE); mMediaControllers.add(mMediaController); when(mMediaSessionManager.getActiveSessions(any())).thenReturn(mMediaControllers); + VolumePanelGlobalStateInteractor volumePanelGlobalStateInteractor = + VolumePanelGlobalStateInteractorKosmosKt.getVolumePanelGlobalStateInteractor( + mKosmos); mMediaOutputController = new MediaOutputController( @@ -139,6 +148,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + volumePanelGlobalStateInteractor, mUserTracker); // Using a fake package will cause routing operations to fail, so we intercept diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java index 87d224579e95..189a56145d27 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java @@ -51,14 +51,18 @@ import com.android.settingslib.media.BluetoothMediaDevice; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.systemui.SysuiTestCase; +import com.android.systemui.SysuiTestCaseExtKt; import com.android.systemui.animation.DialogTransitionAnimator; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.kosmos.Kosmos; import com.android.systemui.media.nearby.NearbyMediaDevicesManager; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractor; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractorKosmosKt; import com.google.common.base.Strings; @@ -81,6 +85,8 @@ public class MediaOutputBroadcastDialogTest extends SysuiTestCase { private static final String BROADCAST_CODE_TEST = "112233"; private static final String BROADCAST_CODE_UPDATE_TEST = "11223344"; + private final Kosmos mKosmos = SysuiTestCaseExtKt.testKosmos(this); + // Mock private final MediaSessionManager mMediaSessionManager = mock(MediaSessionManager.class); private final LocalBluetoothManager mLocalBluetoothManager = mock(LocalBluetoothManager.class); @@ -123,6 +129,9 @@ public class MediaOutputBroadcastDialogTest extends SysuiTestCase { when(mLocalBluetoothLeBroadcast.getProgramInfo()).thenReturn(BROADCAST_NAME_TEST); when(mLocalBluetoothLeBroadcast.getBroadcastCode()).thenReturn( BROADCAST_CODE_TEST.getBytes(StandardCharsets.UTF_8)); + VolumePanelGlobalStateInteractor volumePanelGlobalStateInteractor = + VolumePanelGlobalStateInteractorKosmosKt.getVolumePanelGlobalStateInteractor( + mKosmos); mMediaOutputController = new MediaOutputController( @@ -140,6 +149,7 @@ public class MediaOutputBroadcastDialogTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + volumePanelGlobalStateInteractor, mUserTracker); mMediaOutputController.mLocalMediaManager = mLocalMediaManager; mMediaOutputBroadcastDialog = new MediaOutputBroadcastDialog(mContext, false, diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java index 856bc0b78215..714fad9d7478 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java @@ -72,15 +72,19 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.systemui.SysuiTestCase; +import com.android.systemui.SysuiTestCaseExtKt; import com.android.systemui.animation.ActivityTransitionAnimator; import com.android.systemui.animation.DialogTransitionAnimator; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.kosmos.Kosmos; import com.android.systemui.media.nearby.NearbyMediaDevicesManager; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractor; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractorKosmosKt; import com.google.common.collect.ImmutableList; @@ -158,11 +162,16 @@ public class MediaOutputControllerTest extends SysuiTestCase { @Mock private UserTracker mUserTracker; + private final Kosmos mKosmos = SysuiTestCaseExtKt.testKosmos(this); + private FeatureFlags mFlags = mock(FeatureFlags.class); private View mDialogLaunchView = mock(View.class); private MediaOutputController.Callback mCallback = mock(MediaOutputController.Callback.class); final Notification mNotification = mock(Notification.class); + private final VolumePanelGlobalStateInteractor mVolumePanelGlobalStateInteractor = + VolumePanelGlobalStateInteractorKosmosKt.getVolumePanelGlobalStateInteractor( + mKosmos); private Context mSpyContext; private String mPackageName = null; @@ -194,6 +203,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn( mCachedBluetoothDeviceManager); + mMediaOutputController = new MediaOutputController( mSpyContext, @@ -210,6 +220,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); mLocalMediaManager = spy(mMediaOutputController.mLocalMediaManager); when(mLocalMediaManager.isPreferenceRouteListingExist()).thenReturn(false); @@ -304,6 +315,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); mMediaOutputController.start(mCb); @@ -346,6 +358,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); mMediaOutputController.start(mCb); @@ -602,6 +615,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); testMediaOutputController.start(mCb); reset(mCb); @@ -636,6 +650,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); testMediaOutputController.start(mCb); reset(mCb); @@ -683,6 +698,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); LocalMediaManager mockLocalMediaManager = mock(LocalMediaManager.class); @@ -710,6 +726,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); LocalMediaManager mockLocalMediaManager = mock(LocalMediaManager.class); @@ -990,6 +1007,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); assertThat(mMediaOutputController.getNotificationIcon()).isNull(); @@ -1193,6 +1211,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + mVolumePanelGlobalStateInteractor, mUserTracker); testMediaOutputController.setTemporaryAllowListExceptionIfNeeded(mMediaDevice2); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java index f20b04ae0e5c..90c2930f8e49 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java @@ -54,14 +54,18 @@ import com.android.settingslib.flags.Flags; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.systemui.SysuiTestCase; +import com.android.systemui.SysuiTestCaseExtKt; import com.android.systemui.animation.DialogTransitionAnimator; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.kosmos.Kosmos; import com.android.systemui.media.nearby.NearbyMediaDevicesManager; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractor; +import com.android.systemui.volume.panel.domain.interactor.VolumePanelGlobalStateInteractorKosmosKt; import org.junit.After; import org.junit.Before; @@ -84,6 +88,8 @@ public class MediaOutputDialogTest extends SysuiTestCase { @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); + private final Kosmos mKosmos = SysuiTestCaseExtKt.testKosmos(this); + // Mock private final MediaSessionManager mMediaSessionManager = mock(MediaSessionManager.class); private MediaController mMediaController = mock(MediaController.class); @@ -136,6 +142,9 @@ public class MediaOutputDialogTest extends SysuiTestCase { when(mMediaSessionManager.getActiveSessionsForUser(any(), Mockito.eq(userHandle))).thenReturn( mMediaControllers); + VolumePanelGlobalStateInteractor volumePanelGlobalStateInteractor = + VolumePanelGlobalStateInteractorKosmosKt.getVolumePanelGlobalStateInteractor( + mKosmos); mMediaOutputController = new MediaOutputController( @@ -153,6 +162,7 @@ public class MediaOutputDialogTest extends SysuiTestCase { mPowerExemptionManager, mKeyguardManager, mFlags, + volumePanelGlobalStateInteractor, mUserTracker); mMediaOutputController.mLocalMediaManager = mLocalMediaManager; mMediaOutputDialog = makeTestDialog(mMediaOutputController); |