Merge "Prompt to unlock if player is tapped on lockscreen" into rvc-dev am: 7042dff5f6

Change-Id: I29e125d6e5daeb1d4c082ed15d4603f28ed3a623
This commit is contained in:
Beth Thibodeau
2020-04-23 23:50:28 +00:00
committed by Automerger Merge Worker
6 changed files with 31 additions and 21 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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();

View File

@@ -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);
} }
/** /**

View File

@@ -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);

View File

@@ -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);