Tapping on Play media can have up to a 1 minute delay
-Set Output Switcher activity in PendingIntent -Broadcast is super lagged right after reboot -Not to send broadcast to itself in order to launch Output Switcher -Add test case Bug: 152909957 Test: make -j42 RunSettingsRoboTests Change-Id: I17280a3bb9e47aa6050cfaf1463c780cd9849ad7
This commit is contained in:
@@ -25,8 +25,8 @@ import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.media.session.MediaController;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
import androidx.slice.Slice;
|
||||
import androidx.slice.builders.ListBuilder;
|
||||
@@ -36,7 +36,6 @@ import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.slices.CustomSliceable;
|
||||
import com.android.settings.slices.SliceBackgroundWorker;
|
||||
import com.android.settings.slices.SliceBroadcastReceiver;
|
||||
import com.android.settingslib.media.MediaOutputSliceConstants;
|
||||
|
||||
public class MediaOutputIndicatorSlice implements CustomSliceable {
|
||||
@@ -60,8 +59,10 @@ public class MediaOutputIndicatorSlice implements CustomSliceable {
|
||||
final IconCompat icon = IconCompat.createWithResource(mContext,
|
||||
com.android.internal.R.drawable.ic_settings_bluetooth);
|
||||
final CharSequence title = mContext.getText(R.string.media_output_title);
|
||||
final PendingIntent primaryActionIntent = PendingIntent.getActivity(mContext,
|
||||
0 /* requestCode */, getMediaOutputSliceIntent(), 0 /* flags */);
|
||||
final SliceAction primarySliceAction = SliceAction.createDeeplink(
|
||||
getBroadcastIntent(), icon, ListBuilder.ICON_IMAGE, title);
|
||||
primaryActionIntent, icon, ListBuilder.ICON_IMAGE, title);
|
||||
@ColorInt final int color = Utils.getColorAccentDefaultColor(mContext);
|
||||
// To set an empty icon to indent the row
|
||||
final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY)
|
||||
@@ -74,18 +75,27 @@ public class MediaOutputIndicatorSlice implements CustomSliceable {
|
||||
return listBuilder.build();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
Intent getMediaOutputSliceIntent() {
|
||||
final MediaController mediaController = getWorker().getActiveLocalMediaController();
|
||||
final Intent intent = new Intent()
|
||||
.setPackage(Utils.SETTINGS_PACKAGE_NAME)
|
||||
.setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
if (mediaController != null) {
|
||||
intent.putExtra(MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN,
|
||||
mediaController.getSessionToken());
|
||||
intent.putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
|
||||
mediaController.getPackageName());
|
||||
}
|
||||
return intent;
|
||||
}
|
||||
|
||||
private IconCompat createEmptyIcon() {
|
||||
final Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
|
||||
return IconCompat.createWithBitmap(bitmap);
|
||||
}
|
||||
|
||||
private PendingIntent getBroadcastIntent() {
|
||||
final Intent intent = new Intent(getUri().toString());
|
||||
intent.setClass(mContext, SliceBroadcastReceiver.class);
|
||||
return PendingIntent.getBroadcast(mContext, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Uri getUri() {
|
||||
return MEDIA_OUTPUT_INDICATOR_SLICE_URI;
|
||||
@@ -103,26 +113,6 @@ public class MediaOutputIndicatorSlice implements CustomSliceable {
|
||||
return MediaOutputIndicatorWorker.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotifyChange(Intent i) {
|
||||
if (getWorker() == null) {
|
||||
Log.d(TAG, "onNotifyChange: Worker is null");
|
||||
return;
|
||||
}
|
||||
final MediaController mediaController = getWorker().getActiveLocalMediaController();
|
||||
final Intent intent = new Intent()
|
||||
.setPackage(Utils.SETTINGS_PACKAGE_NAME)
|
||||
.setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
if (mediaController != null) {
|
||||
intent.putExtra(MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN,
|
||||
mediaController.getSessionToken());
|
||||
intent.putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
|
||||
mediaController.getPackageName());
|
||||
}
|
||||
mContext.startActivity(intent);
|
||||
}
|
||||
|
||||
private MediaOutputIndicatorWorker getWorker() {
|
||||
if (mWorker == null) {
|
||||
mWorker = SliceBackgroundWorker.getInstance(getUri());
|
||||
|
Reference in New Issue
Block a user