[Output switcher] dismiss dialog when launch bt page in lock screen
if user click "connect with new device" in lock screen, dismiss dialog since unlick screen will pop up. Test: atest MediaOutputControllerTest, verified on device Bug: 231717780 Change-Id: I442432cf90d1051ea63a7ad3ffa727e461368ecb
This commit is contained in:
committed by
Shaowei Shen
parent
620e37edb9
commit
09e25a594c
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.media.dialog
|
||||
|
||||
import android.app.KeyguardManager
|
||||
import android.content.Context
|
||||
import android.media.AudioManager
|
||||
import android.media.session.MediaSessionManager
|
||||
@@ -45,7 +46,8 @@ class MediaOutputBroadcastDialogFactory @Inject constructor(
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||
private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>,
|
||||
private val audioManager: AudioManager,
|
||||
private val powerExemptionManager: PowerExemptionManager
|
||||
private val powerExemptionManager: PowerExemptionManager,
|
||||
private val keyGuardManager: KeyguardManager
|
||||
) {
|
||||
var mediaOutputBroadcastDialog: MediaOutputBroadcastDialog? = null
|
||||
|
||||
@@ -57,7 +59,7 @@ class MediaOutputBroadcastDialogFactory @Inject constructor(
|
||||
val controller = MediaOutputController(context, packageName,
|
||||
mediaSessionManager, lbm, starter, notifCollection,
|
||||
dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager,
|
||||
powerExemptionManager)
|
||||
powerExemptionManager, keyGuardManager)
|
||||
val dialog =
|
||||
MediaOutputBroadcastDialog(context, aboveStatusBar, broadcastSender, controller)
|
||||
mediaOutputBroadcastDialog = dialog
|
||||
|
||||
@@ -20,6 +20,7 @@ import static android.provider.Settings.ACTION_BLUETOOTH_SETTINGS;
|
||||
|
||||
import android.annotation.CallbackExecutor;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.KeyguardManager;
|
||||
import android.app.Notification;
|
||||
import android.app.WallpaperColors;
|
||||
import android.bluetooth.BluetoothLeBroadcast;
|
||||
@@ -120,6 +121,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
||||
final List<MediaDevice> mCachedMediaDevices = new CopyOnWriteArrayList<>();
|
||||
private final AudioManager mAudioManager;
|
||||
private final PowerExemptionManager mPowerExemptionManager;
|
||||
private final KeyguardManager mKeyGuardManager;
|
||||
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager;
|
||||
private final Map<String, Integer> mNearbyDeviceInfoMap = new ConcurrentHashMap<>();
|
||||
|
||||
@@ -154,7 +156,8 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
||||
DialogLaunchAnimator dialogLaunchAnimator,
|
||||
Optional<NearbyMediaDevicesManager> nearbyMediaDevicesManagerOptional,
|
||||
AudioManager audioManager,
|
||||
PowerExemptionManager powerExemptionManager) {
|
||||
PowerExemptionManager powerExemptionManager,
|
||||
KeyguardManager keyGuardManager) {
|
||||
mContext = context;
|
||||
mPackageName = packageName;
|
||||
mMediaSessionManager = mediaSessionManager;
|
||||
@@ -163,6 +166,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
||||
mNotifCollection = notifCollection;
|
||||
mAudioManager = audioManager;
|
||||
mPowerExemptionManager = powerExemptionManager;
|
||||
mKeyGuardManager = keyGuardManager;
|
||||
InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm);
|
||||
mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName);
|
||||
mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
|
||||
@@ -719,7 +723,8 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
||||
ActivityLaunchAnimator.Controller controller =
|
||||
mDialogLaunchAnimator.createActivityLaunchController(view);
|
||||
|
||||
if (controller == null) {
|
||||
if (controller == null || (mKeyGuardManager != null
|
||||
&& mKeyGuardManager.isKeyguardLocked())) {
|
||||
mCallback.dismissDialog();
|
||||
}
|
||||
|
||||
@@ -771,7 +776,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
||||
MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mActivityStarter,
|
||||
mNotifCollection, mDialogLaunchAnimator, Optional.of(mNearbyMediaDevicesManager),
|
||||
mAudioManager, mPowerExemptionManager);
|
||||
mAudioManager, mPowerExemptionManager, mKeyGuardManager);
|
||||
MediaOutputBroadcastDialog dialog = new MediaOutputBroadcastDialog(mContext, true,
|
||||
broadcastSender, controller);
|
||||
mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.media.dialog
|
||||
|
||||
import android.app.KeyguardManager
|
||||
import android.content.Context
|
||||
import android.media.AudioManager
|
||||
import android.media.session.MediaSessionManager
|
||||
@@ -47,7 +48,8 @@ class MediaOutputDialogFactory @Inject constructor(
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||
private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>,
|
||||
private val audioManager: AudioManager,
|
||||
private val powerExemptionManager: PowerExemptionManager
|
||||
private val powerExemptionManager: PowerExemptionManager,
|
||||
private val keyGuardManager: KeyguardManager
|
||||
) {
|
||||
companion object {
|
||||
private const val INTERACTION_JANK_TAG = "media_output"
|
||||
@@ -63,7 +65,7 @@ class MediaOutputDialogFactory @Inject constructor(
|
||||
context, packageName,
|
||||
mediaSessionManager, lbm, starter, notifCollection,
|
||||
dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager,
|
||||
powerExemptionManager)
|
||||
powerExemptionManager, keyGuardManager)
|
||||
val dialog =
|
||||
MediaOutputDialog(context, aboveStatusBar, broadcastSender, controller, uiEventLogger)
|
||||
mediaOutputDialog = dialog
|
||||
|
||||
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.KeyguardManager;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
@@ -88,6 +89,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||
private final AudioManager mAudioManager = mock(AudioManager.class);
|
||||
private PowerExemptionManager mPowerExemptionManager = mock(PowerExemptionManager.class);
|
||||
private KeyguardManager mKeyguardManager = mock(KeyguardManager.class);
|
||||
|
||||
private List<MediaController> mMediaControllers = new ArrayList<>();
|
||||
private MediaOutputBaseDialogImpl mMediaOutputBaseDialogImpl;
|
||||
@@ -119,7 +121,8 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||
mNotifCollection, mDialogLaunchAnimator,
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager);
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
|
||||
mKeyguardManager);
|
||||
mMediaOutputBaseDialogImpl = new MediaOutputBaseDialogImpl(mContext, mBroadcastSender,
|
||||
mMediaOutputController);
|
||||
mMediaOutputBaseDialogImpl.onCreate(new Bundle());
|
||||
|
||||
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.KeyguardManager;
|
||||
import android.app.Notification;
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Icon;
|
||||
@@ -47,6 +48,7 @@ import android.os.RemoteException;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
import androidx.test.filters.SmallTest;
|
||||
@@ -57,6 +59,7 @@ import com.android.settingslib.media.LocalMediaManager;
|
||||
import com.android.settingslib.media.MediaDevice;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.animation.ActivityLaunchAnimator;
|
||||
import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
@@ -102,11 +105,16 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
private RoutingSessionInfo mRemoteSessionInfo = mock(RoutingSessionInfo.class);
|
||||
private ActivityStarter mStarter = mock(ActivityStarter.class);
|
||||
private AudioManager mAudioManager = mock(AudioManager.class);
|
||||
private KeyguardManager mKeyguardManager = mock(KeyguardManager.class);
|
||||
private PowerExemptionManager mPowerExemptionManager = mock(PowerExemptionManager.class);
|
||||
private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class);
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||
private final ActivityLaunchAnimator.Controller mActivityLaunchAnimatorController = mock(
|
||||
ActivityLaunchAnimator.Controller.class);
|
||||
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
||||
NearbyMediaDevicesManager.class);
|
||||
private View mDialogLaunchView = mock(View.class);
|
||||
private MediaOutputController.Callback mCallback = mock(MediaOutputController.Callback.class);
|
||||
|
||||
private Context mSpyContext;
|
||||
private MediaOutputController mMediaOutputController;
|
||||
@@ -131,7 +139,8 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, TEST_PACKAGE_NAME,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||
mNotifCollection, mDialogLaunchAnimator,
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager);
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
|
||||
mKeyguardManager);
|
||||
mLocalMediaManager = spy(mMediaOutputController.mLocalMediaManager);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
MediaDescription.Builder builder = new MediaDescription.Builder();
|
||||
@@ -183,7 +192,8 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||
mNotifCollection, mDialogLaunchAnimator,
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager);
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
|
||||
mKeyguardManager);
|
||||
|
||||
mMediaOutputController.start(mCb);
|
||||
|
||||
@@ -212,7 +222,8 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||
mNotifCollection, mDialogLaunchAnimator,
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager);
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
|
||||
mKeyguardManager);
|
||||
|
||||
mMediaOutputController.start(mCb);
|
||||
|
||||
@@ -461,7 +472,8 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||
mNotifCollection, mDialogLaunchAnimator,
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager);
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
|
||||
mKeyguardManager);
|
||||
|
||||
assertThat(mMediaOutputController.getNotificationIcon()).isNull();
|
||||
}
|
||||
@@ -557,4 +569,16 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
verify(mPowerExemptionManager).addToTemporaryAllowList(anyString(), anyInt(), anyString(),
|
||||
anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launchBluetoothPairing_isKeyguardLocked_dismissDialog() {
|
||||
when(mDialogLaunchAnimator.createActivityLaunchController(mDialogLaunchView)).thenReturn(
|
||||
mActivityLaunchAnimatorController);
|
||||
when(mKeyguardManager.isKeyguardLocked()).thenReturn(true);
|
||||
mMediaOutputController.mCallback = this.mCallback;
|
||||
|
||||
mMediaOutputController.launchBluetoothPairing(mDialogLaunchView);
|
||||
|
||||
verify(mCallback).dismissDialog();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.KeyguardManager;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaRoute2Info;
|
||||
import android.media.session.MediaController;
|
||||
@@ -85,6 +86,7 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
||||
NearbyMediaDevicesManager.class);
|
||||
private final AudioManager mAudioManager = mock(AudioManager.class);
|
||||
private PowerExemptionManager mPowerExemptionManager = mock(PowerExemptionManager.class);
|
||||
private KeyguardManager mKeyguardManager = mock(KeyguardManager.class);
|
||||
|
||||
private List<MediaController> mMediaControllers = new ArrayList<>();
|
||||
private MediaOutputDialog mMediaOutputDialog;
|
||||
@@ -104,7 +106,8 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||
mNotifCollection, mDialogLaunchAnimator,
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager);
|
||||
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
|
||||
mKeyguardManager);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
mMediaOutputDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
|
||||
mMediaOutputController, mUiEventLogger);
|
||||
|
||||
Reference in New Issue
Block a user