Update OutputSwitcher from SettingsPanel to MediaOutputDialog in SystemUI

-Put MediaOutputDialogFactory in Dependency provider
-Inject MediaOutputDialogFactory in MediaControlPanel
-Use Dependency.get() to get MediaOutputDialogFactory in MediaTransferManager
-Use MediaOutputDialogFactory.create() to launch dialog in MediaControlPanel and MediaTransferManager

Bug: 155822415
Test: atest MediaControlPanelTest DependencyTest
Change-Id: I1b393d43bf4c7c869a3066404c9755ebef5f9c76
This commit is contained in:
timhypeng
2020-09-22 11:41:43 +08:00
parent 703427e52c
commit 4ceacb30ce
4 changed files with 18 additions and 22 deletions

View File

@@ -47,6 +47,7 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.fragments.FragmentService; import com.android.systemui.fragments.FragmentService;
import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.model.SysUiState; import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.NavigationBarController; import com.android.systemui.navigationbar.NavigationBarController;
import com.android.systemui.navigationbar.NavigationModeController; import com.android.systemui.navigationbar.NavigationModeController;
@@ -344,6 +345,7 @@ public class Dependency {
@Inject Lazy<DisplayImeController> mDisplayImeController; @Inject Lazy<DisplayImeController> mDisplayImeController;
@Inject Lazy<RecordingController> mRecordingController; @Inject Lazy<RecordingController> mRecordingController;
@Inject Lazy<ProtoTracer> mProtoTracer; @Inject Lazy<ProtoTracer> mProtoTracer;
@Inject Lazy<MediaOutputDialogFactory> mMediaOutputDialogFactory;
@Inject @Inject
public Dependency() { public Dependency() {
@@ -541,6 +543,8 @@ public class Dependency {
mProviders.put(RecordingController.class, mRecordingController::get); mProviders.put(RecordingController.class, mRecordingController::get);
mProviders.put(MediaOutputDialogFactory.class, mMediaOutputDialogFactory::get);
Dependency.setInstance(this); Dependency.setInstance(this);
} }

View File

@@ -42,10 +42,10 @@ import androidx.annotation.UiThread;
import androidx.constraintlayout.widget.ConstraintSet; import androidx.constraintlayout.widget.ConstraintSet;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.media.MediaOutputSliceConstants;
import com.android.settingslib.widget.AdaptiveIcon; import com.android.settingslib.widget.AdaptiveIcon;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.phone.KeyguardDismissUtil; import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
import com.android.systemui.util.animation.TransitionLayout; import com.android.systemui.util.animation.TransitionLayout;
@@ -93,7 +93,7 @@ public class MediaControlPanel {
private int mAlbumArtRadius; private int mAlbumArtRadius;
// This will provide the corners for the album art. // This will provide the corners for the album art.
private final ViewOutlineProvider mViewOutlineProvider; private final ViewOutlineProvider mViewOutlineProvider;
private final MediaOutputDialogFactory mMediaOutputDialogFactory;
/** /**
* Initialize a new control panel * Initialize a new control panel
* @param context * @param context
@@ -104,7 +104,8 @@ public class MediaControlPanel {
public MediaControlPanel(Context context, @Background Executor backgroundExecutor, public MediaControlPanel(Context context, @Background Executor backgroundExecutor,
ActivityStarter activityStarter, MediaViewController mediaViewController, ActivityStarter activityStarter, MediaViewController mediaViewController,
SeekBarViewModel seekBarViewModel, Lazy<MediaDataManager> lazyMediaDataManager, SeekBarViewModel seekBarViewModel, Lazy<MediaDataManager> lazyMediaDataManager,
KeyguardDismissUtil keyguardDismissUtil) { KeyguardDismissUtil keyguardDismissUtil, MediaOutputDialogFactory
mediaOutputDialogFactory) {
mContext = context; mContext = context;
mBackgroundExecutor = backgroundExecutor; mBackgroundExecutor = backgroundExecutor;
mActivityStarter = activityStarter; mActivityStarter = activityStarter;
@@ -112,6 +113,7 @@ public class MediaControlPanel {
mMediaViewController = mediaViewController; mMediaViewController = mediaViewController;
mMediaDataManagerLazy = lazyMediaDataManager; mMediaDataManagerLazy = lazyMediaDataManager;
mKeyguardDismissUtil = keyguardDismissUtil; mKeyguardDismissUtil = keyguardDismissUtil;
mMediaOutputDialogFactory = mediaOutputDialogFactory;
loadDimens(); loadDimens();
mViewOutlineProvider = new ViewOutlineProvider() { mViewOutlineProvider = new ViewOutlineProvider() {
@@ -273,13 +275,7 @@ public class MediaControlPanel {
setVisibleAndAlpha(collapsedSet, R.id.media_seamless, true /*visible */); setVisibleAndAlpha(collapsedSet, R.id.media_seamless, true /*visible */);
setVisibleAndAlpha(expandedSet, R.id.media_seamless, true /*visible */); setVisibleAndAlpha(expandedSet, R.id.media_seamless, true /*visible */);
mViewHolder.getSeamless().setOnClickListener(v -> { mViewHolder.getSeamless().setOnClickListener(v -> {
final Intent intent = new Intent() mMediaOutputDialogFactory.create(data.getPackageName(), true);
.setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
.putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
data.getPackageName())
.putExtra(MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN, mToken);
mActivityStarter.startActivity(intent, false, true /* dismissShade */,
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
}); });
ImageView iconView = mViewHolder.getSeamlessIcon(); ImageView iconView = mViewHolder.getSeamlessIcon();

View File

@@ -17,7 +17,6 @@
package com.android.systemui.statusbar; package com.android.systemui.statusbar;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable;
@@ -36,10 +35,9 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.media.InfoMediaManager; import com.android.settingslib.media.InfoMediaManager;
import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice; import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.media.MediaOutputSliceConstants;
import com.android.settingslib.widget.AdaptiveIcon; import com.android.settingslib.widget.AdaptiveIcon;
import com.android.systemui.Dependency; import com.android.systemui.Dependency;
import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -51,7 +49,7 @@ import java.util.List;
*/ */
public class MediaTransferManager { public class MediaTransferManager {
private final Context mContext; private final Context mContext;
private final ActivityStarter mActivityStarter; private final MediaOutputDialogFactory mMediaOutputDialogFactory;
private MediaDevice mDevice; private MediaDevice mDevice;
private List<View> mViews = new ArrayList<>(); private List<View> mViews = new ArrayList<>();
private LocalMediaManager mLocalMediaManager; private LocalMediaManager mLocalMediaManager;
@@ -74,12 +72,7 @@ public class MediaTransferManager {
ViewParent parent = view.getParent(); ViewParent parent = view.getParent();
StatusBarNotification statusBarNotification = StatusBarNotification statusBarNotification =
getRowForParent(parent).getEntry().getSbn(); getRowForParent(parent).getEntry().getSbn();
final Intent intent = new Intent() mMediaOutputDialogFactory.create(statusBarNotification.getPackageName(), true);
.setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
.putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
statusBarNotification.getPackageName());
mActivityStarter.startActivity(intent, false, true /* dismissShade */,
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
return true; return true;
} }
}; };
@@ -107,7 +100,7 @@ public class MediaTransferManager {
public MediaTransferManager(Context context) { public MediaTransferManager(Context context) {
mContext = context; mContext = context;
mActivityStarter = Dependency.get(ActivityStarter.class); mMediaOutputDialogFactory = Dependency.get(MediaOutputDialogFactory.class);
LocalBluetoothManager lbm = Dependency.get(LocalBluetoothManager.class); LocalBluetoothManager lbm = Dependency.get(LocalBluetoothManager.class);
InfoMediaManager imm = new InfoMediaManager(mContext, null, null, lbm); InfoMediaManager imm = new InfoMediaManager(mContext, null, null, lbm);
mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, null); mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, null);

View File

@@ -38,6 +38,7 @@ import androidx.constraintlayout.widget.ConstraintSet
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.media.dialog.MediaOutputDialogFactory
import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.statusbar.phone.KeyguardDismissUtil import com.android.systemui.statusbar.phone.KeyguardDismissUtil
import com.android.systemui.util.animation.TransitionLayout import com.android.systemui.util.animation.TransitionLayout
@@ -92,6 +93,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
@Mock private lateinit var mediaDataManager: MediaDataManager @Mock private lateinit var mediaDataManager: MediaDataManager
@Mock private lateinit var expandedSet: ConstraintSet @Mock private lateinit var expandedSet: ConstraintSet
@Mock private lateinit var collapsedSet: ConstraintSet @Mock private lateinit var collapsedSet: ConstraintSet
@Mock private lateinit var mediaOutputDialogFactory: MediaOutputDialogFactory
private lateinit var appIcon: ImageView private lateinit var appIcon: ImageView
private lateinit var appName: TextView private lateinit var appName: TextView
private lateinit var albumView: ImageView private lateinit var albumView: ImageView
@@ -126,7 +128,8 @@ public class MediaControlPanelTest : SysuiTestCase() {
whenever(mediaViewController.collapsedLayout).thenReturn(collapsedSet) whenever(mediaViewController.collapsedLayout).thenReturn(collapsedSet)
player = MediaControlPanel(context, bgExecutor, activityStarter, mediaViewController, player = MediaControlPanel(context, bgExecutor, activityStarter, mediaViewController,
seekBarViewModel, Lazy { mediaDataManager }, keyguardDismissUtil) seekBarViewModel, Lazy { mediaDataManager }, keyguardDismissUtil,
mediaOutputDialogFactory)
whenever(seekBarViewModel.progress).thenReturn(seekBarData) whenever(seekBarViewModel.progress).thenReturn(seekBarData)
// Mock out a view holder for the player to attach to. // Mock out a view holder for the player to attach to.