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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user