Merge "Prompt to unlock if player is tapped on lockscreen" into rvc-dev am: 7042dff5f6
Change-Id: I29e125d6e5daeb1d4c082ed15d4603f28ed3a623
This commit is contained in:
@@ -57,7 +57,6 @@ 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.media.MediaOutputSliceConstants;
|
||||||
import com.android.settingslib.widget.AdaptiveIcon;
|
import com.android.settingslib.widget.AdaptiveIcon;
|
||||||
import com.android.systemui.Dependency;
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.qs.QSMediaBrowser;
|
import com.android.systemui.qs.QSMediaBrowser;
|
||||||
@@ -75,6 +74,7 @@ public class MediaControlPanel {
|
|||||||
@Nullable private final LocalMediaManager mLocalMediaManager;
|
@Nullable private final LocalMediaManager mLocalMediaManager;
|
||||||
private final Executor mForegroundExecutor;
|
private final Executor mForegroundExecutor;
|
||||||
protected final Executor mBackgroundExecutor;
|
protected final Executor mBackgroundExecutor;
|
||||||
|
private final ActivityStarter mActivityStarter;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
protected LinearLayout mMediaNotifView;
|
protected LinearLayout mMediaNotifView;
|
||||||
@@ -178,10 +178,12 @@ public class MediaControlPanel {
|
|||||||
* @param actionIds resource IDs for action buttons in the layout
|
* @param actionIds resource IDs for action buttons in the layout
|
||||||
* @param foregroundExecutor foreground executor
|
* @param foregroundExecutor foreground executor
|
||||||
* @param backgroundExecutor background executor, used for processing artwork
|
* @param backgroundExecutor background executor, used for processing artwork
|
||||||
|
* @param activityStarter activity starter
|
||||||
*/
|
*/
|
||||||
public MediaControlPanel(Context context, ViewGroup parent,
|
public MediaControlPanel(Context context, ViewGroup parent,
|
||||||
@Nullable LocalMediaManager routeManager, @LayoutRes int layoutId, int[] actionIds,
|
@Nullable LocalMediaManager routeManager, @LayoutRes int layoutId, int[] actionIds,
|
||||||
Executor foregroundExecutor, Executor backgroundExecutor) {
|
Executor foregroundExecutor, Executor backgroundExecutor,
|
||||||
|
ActivityStarter activityStarter) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
LayoutInflater inflater = LayoutInflater.from(mContext);
|
LayoutInflater inflater = LayoutInflater.from(mContext);
|
||||||
mMediaNotifView = (LinearLayout) inflater.inflate(layoutId, parent, false);
|
mMediaNotifView = (LinearLayout) inflater.inflate(layoutId, parent, false);
|
||||||
@@ -195,6 +197,7 @@ public class MediaControlPanel {
|
|||||||
mActionIds = actionIds;
|
mActionIds = actionIds;
|
||||||
mForegroundExecutor = foregroundExecutor;
|
mForegroundExecutor = foregroundExecutor;
|
||||||
mBackgroundExecutor = backgroundExecutor;
|
mBackgroundExecutor = backgroundExecutor;
|
||||||
|
mActivityStarter = activityStarter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -267,13 +270,7 @@ public class MediaControlPanel {
|
|||||||
// Click action
|
// Click action
|
||||||
if (contentIntent != null) {
|
if (contentIntent != null) {
|
||||||
mMediaNotifView.setOnClickListener(v -> {
|
mMediaNotifView.setOnClickListener(v -> {
|
||||||
try {
|
mActivityStarter.postStartActivityDismissingKeyguard(contentIntent);
|
||||||
contentIntent.send();
|
|
||||||
// Also close shade
|
|
||||||
mContext.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
|
|
||||||
} catch (PendingIntent.CanceledException e) {
|
|
||||||
Log.e(TAG, "Pending intent was canceled", e);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,7 +284,6 @@ public class MediaControlPanel {
|
|||||||
if (mSeamless != null && mLocalMediaManager != null) {
|
if (mSeamless != null && mLocalMediaManager != null) {
|
||||||
mSeamless.setVisibility(View.VISIBLE);
|
mSeamless.setVisibility(View.VISIBLE);
|
||||||
updateDevice(mLocalMediaManager.getCurrentConnectedDevice());
|
updateDevice(mLocalMediaManager.getCurrentConnectedDevice());
|
||||||
ActivityStarter mActivityStarter = Dependency.get(ActivityStarter.class);
|
|
||||||
mSeamless.setOnClickListener(v -> {
|
mSeamless.setOnClickListener(v -> {
|
||||||
final Intent intent = new Intent()
|
final Intent intent = new Intent()
|
||||||
.setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
|
.setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import com.android.systemui.R;
|
|||||||
import com.android.systemui.media.MediaControlPanel;
|
import com.android.systemui.media.MediaControlPanel;
|
||||||
import com.android.systemui.media.SeekBarObserver;
|
import com.android.systemui.media.SeekBarObserver;
|
||||||
import com.android.systemui.media.SeekBarViewModel;
|
import com.android.systemui.media.SeekBarViewModel;
|
||||||
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.util.concurrency.DelayableExecutor;
|
import com.android.systemui.util.concurrency.DelayableExecutor;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
@@ -75,11 +76,13 @@ public class QSMediaPlayer extends MediaControlPanel {
|
|||||||
* @param routeManager Provides information about device
|
* @param routeManager Provides information about device
|
||||||
* @param foregroundExecutor
|
* @param foregroundExecutor
|
||||||
* @param backgroundExecutor
|
* @param backgroundExecutor
|
||||||
|
* @param activityStarter
|
||||||
*/
|
*/
|
||||||
public QSMediaPlayer(Context context, ViewGroup parent, LocalMediaManager routeManager,
|
public QSMediaPlayer(Context context, ViewGroup parent, LocalMediaManager routeManager,
|
||||||
Executor foregroundExecutor, DelayableExecutor backgroundExecutor) {
|
Executor foregroundExecutor, DelayableExecutor backgroundExecutor,
|
||||||
|
ActivityStarter activityStarter) {
|
||||||
super(context, parent, routeManager, R.layout.qs_media_panel, QS_ACTION_IDS,
|
super(context, parent, routeManager, R.layout.qs_media_panel, QS_ACTION_IDS,
|
||||||
foregroundExecutor, backgroundExecutor);
|
foregroundExecutor, backgroundExecutor, activityStarter);
|
||||||
mParent = (QSPanel) parent;
|
mParent = (QSPanel) parent;
|
||||||
mForegroundExecutor = foregroundExecutor;
|
mForegroundExecutor = foregroundExecutor;
|
||||||
mBackgroundExecutor = backgroundExecutor;
|
mBackgroundExecutor = backgroundExecutor;
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ import com.android.systemui.dagger.qualifiers.Background;
|
|||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.media.MediaControlPanel;
|
import com.android.systemui.media.MediaControlPanel;
|
||||||
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.plugins.qs.DetailAdapter;
|
import com.android.systemui.plugins.qs.DetailAdapter;
|
||||||
import com.android.systemui.plugins.qs.QSTile;
|
import com.android.systemui.plugins.qs.QSTile;
|
||||||
import com.android.systemui.plugins.qs.QSTileView;
|
import com.android.systemui.plugins.qs.QSTileView;
|
||||||
@@ -114,6 +115,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
|||||||
private final Executor mForegroundExecutor;
|
private final Executor mForegroundExecutor;
|
||||||
private final DelayableExecutor mBackgroundExecutor;
|
private final DelayableExecutor mBackgroundExecutor;
|
||||||
private boolean mUpdateCarousel = false;
|
private boolean mUpdateCarousel = false;
|
||||||
|
private ActivityStarter mActivityStarter;
|
||||||
|
|
||||||
protected boolean mExpanded;
|
protected boolean mExpanded;
|
||||||
protected boolean mListening;
|
protected boolean mListening;
|
||||||
@@ -158,7 +160,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
|||||||
QSLogger qsLogger,
|
QSLogger qsLogger,
|
||||||
@Main Executor foregroundExecutor,
|
@Main Executor foregroundExecutor,
|
||||||
@Background DelayableExecutor backgroundExecutor,
|
@Background DelayableExecutor backgroundExecutor,
|
||||||
@Nullable LocalBluetoothManager localBluetoothManager
|
@Nullable LocalBluetoothManager localBluetoothManager,
|
||||||
|
ActivityStarter activityStarter
|
||||||
) {
|
) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@@ -168,6 +171,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
|||||||
mBackgroundExecutor = backgroundExecutor;
|
mBackgroundExecutor = backgroundExecutor;
|
||||||
mLocalBluetoothManager = localBluetoothManager;
|
mLocalBluetoothManager = localBluetoothManager;
|
||||||
mBroadcastDispatcher = broadcastDispatcher;
|
mBroadcastDispatcher = broadcastDispatcher;
|
||||||
|
mActivityStarter = activityStarter;
|
||||||
|
|
||||||
setOrientation(VERTICAL);
|
setOrientation(VERTICAL);
|
||||||
|
|
||||||
@@ -284,7 +288,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
|||||||
imm, notif.getPackageName());
|
imm, notif.getPackageName());
|
||||||
|
|
||||||
player = new QSMediaPlayer(mContext, this, routeManager, mForegroundExecutor,
|
player = new QSMediaPlayer(mContext, this, routeManager, mForegroundExecutor,
|
||||||
mBackgroundExecutor);
|
mBackgroundExecutor, mActivityStarter);
|
||||||
player.setListening(mListening);
|
player.setListening(mListening);
|
||||||
if (player.isPlaying()) {
|
if (player.isPlaying()) {
|
||||||
mMediaCarousel.addView(player.getView(), 0, lp); // add in front
|
mMediaCarousel.addView(player.getView(), 0, lp); // add in front
|
||||||
@@ -341,7 +345,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
|||||||
|
|
||||||
Log.d(TAG, "adding track from browser: " + desc + ", " + component);
|
Log.d(TAG, "adding track from browser: " + desc + ", " + component);
|
||||||
QSMediaPlayer player = new QSMediaPlayer(mContext, QSPanel.this,
|
QSMediaPlayer player = new QSMediaPlayer(mContext, QSPanel.this,
|
||||||
null, mForegroundExecutor, mBackgroundExecutor);
|
null, mForegroundExecutor, mBackgroundExecutor, mActivityStarter);
|
||||||
|
|
||||||
String pkgName = component.getPackageName();
|
String pkgName = component.getPackageName();
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import android.widget.LinearLayout;
|
|||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.media.MediaControlPanel;
|
import com.android.systemui.media.MediaControlPanel;
|
||||||
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@@ -48,11 +49,12 @@ public class QuickQSMediaPlayer extends MediaControlPanel {
|
|||||||
* @param parent
|
* @param parent
|
||||||
* @param foregroundExecutor
|
* @param foregroundExecutor
|
||||||
* @param backgroundExecutor
|
* @param backgroundExecutor
|
||||||
|
* @param activityStarter
|
||||||
*/
|
*/
|
||||||
public QuickQSMediaPlayer(Context context, ViewGroup parent, Executor foregroundExecutor,
|
public QuickQSMediaPlayer(Context context, ViewGroup parent, Executor foregroundExecutor,
|
||||||
Executor backgroundExecutor) {
|
Executor backgroundExecutor, ActivityStarter activityStarter) {
|
||||||
super(context, parent, null, R.layout.qqs_media_panel, QQS_ACTION_IDS,
|
super(context, parent, null, R.layout.qqs_media_panel, QQS_ACTION_IDS,
|
||||||
foregroundExecutor, backgroundExecutor);
|
foregroundExecutor, backgroundExecutor, activityStarter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
|
|||||||
import com.android.systemui.dagger.qualifiers.Background;
|
import com.android.systemui.dagger.qualifiers.Background;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.plugins.qs.QSTile;
|
import com.android.systemui.plugins.qs.QSTile;
|
||||||
import com.android.systemui.plugins.qs.QSTile.SignalState;
|
import com.android.systemui.plugins.qs.QSTile.SignalState;
|
||||||
import com.android.systemui.plugins.qs.QSTile.State;
|
import com.android.systemui.plugins.qs.QSTile.State;
|
||||||
@@ -84,10 +85,11 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
QSLogger qsLogger,
|
QSLogger qsLogger,
|
||||||
@Main Executor foregroundExecutor,
|
@Main Executor foregroundExecutor,
|
||||||
@Background DelayableExecutor backgroundExecutor,
|
@Background DelayableExecutor backgroundExecutor,
|
||||||
@Nullable LocalBluetoothManager localBluetoothManager
|
@Nullable LocalBluetoothManager localBluetoothManager,
|
||||||
|
ActivityStarter activityStarter
|
||||||
) {
|
) {
|
||||||
super(context, attrs, dumpManager, broadcastDispatcher, qsLogger,
|
super(context, attrs, dumpManager, broadcastDispatcher, qsLogger,
|
||||||
foregroundExecutor, backgroundExecutor, localBluetoothManager);
|
foregroundExecutor, backgroundExecutor, localBluetoothManager, activityStarter);
|
||||||
if (mFooter != null) {
|
if (mFooter != null) {
|
||||||
removeView(mFooter.getView());
|
removeView(mFooter.getView());
|
||||||
}
|
}
|
||||||
@@ -107,7 +109,7 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
|
|
||||||
int marginSize = (int) mContext.getResources().getDimension(R.dimen.qqs_media_spacing);
|
int marginSize = (int) mContext.getResources().getDimension(R.dimen.qqs_media_spacing);
|
||||||
mMediaPlayer = new QuickQSMediaPlayer(mContext, mHorizontalLinearLayout,
|
mMediaPlayer = new QuickQSMediaPlayer(mContext, mHorizontalLinearLayout,
|
||||||
foregroundExecutor, backgroundExecutor);
|
foregroundExecutor, backgroundExecutor, activityStarter);
|
||||||
LayoutParams lp2 = new LayoutParams(0, LayoutParams.MATCH_PARENT, 1);
|
LayoutParams lp2 = new LayoutParams(0, LayoutParams.MATCH_PARENT, 1);
|
||||||
lp2.setMarginEnd(marginSize);
|
lp2.setMarginEnd(marginSize);
|
||||||
lp2.setMarginStart(0);
|
lp2.setMarginStart(0);
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
|||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.plugins.qs.QSTileView;
|
import com.android.systemui.plugins.qs.QSTileView;
|
||||||
import com.android.systemui.qs.customize.QSCustomizer;
|
import com.android.systemui.qs.customize.QSCustomizer;
|
||||||
import com.android.systemui.qs.logging.QSLogger;
|
import com.android.systemui.qs.logging.QSLogger;
|
||||||
@@ -88,6 +89,8 @@ public class QSPanelTest extends SysuiTestCase {
|
|||||||
private DelayableExecutor mBackgroundExecutor;
|
private DelayableExecutor mBackgroundExecutor;
|
||||||
@Mock
|
@Mock
|
||||||
private LocalBluetoothManager mLocalBluetoothManager;
|
private LocalBluetoothManager mLocalBluetoothManager;
|
||||||
|
@Mock
|
||||||
|
private ActivityStarter mActivityStarter;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
@@ -98,7 +101,7 @@ public class QSPanelTest extends SysuiTestCase {
|
|||||||
mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
|
mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
|
||||||
mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher,
|
mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher,
|
||||||
mQSLogger, mForegroundExecutor, mBackgroundExecutor,
|
mQSLogger, mForegroundExecutor, mBackgroundExecutor,
|
||||||
mLocalBluetoothManager);
|
mLocalBluetoothManager, mActivityStarter);
|
||||||
// Provides a parent with non-zero size for QSPanel
|
// Provides a parent with non-zero size for QSPanel
|
||||||
mParentView = new FrameLayout(mContext);
|
mParentView = new FrameLayout(mContext);
|
||||||
mParentView.addView(mQsPanel);
|
mParentView.addView(mQsPanel);
|
||||||
|
|||||||
Reference in New Issue
Block a user