Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bbfda47b authored by Anton Potapov's avatar Anton Potapov Committed by Android (Google) Code Review
Browse files

Merge "Add collapsing VolumePanel when opening settings from the Media Output Switcher" into main

parents 1e54da3f bc6e74b2
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -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();
+10 −0
Original line number Diff line number Diff line
@@ -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
+10 −0
Original line number Diff line number Diff line
@@ -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,
+19 −0
Original line number Diff line number Diff line
@@ -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);
+10 −0
Original line number Diff line number Diff line
@@ -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);