Add the explicitly mutable flag for creating a PendingIntent
- Android S+ to specify explicitly either FLAG_MUTABLE or FLAG_IMMUTABLE when creating a PendingIntent. - Suggest to use the FLAG_IMMUTABLE as default. Change it to FLAG_MUTABLE while errors occur. Fixes: 172207262 Fixes: 172207195 Fixes: 172205385 Fixes: 172204525 Fixes: 172205897 Test: build pass, manual test to paring blutooth device and doing seamless transfer Change-Id: Ic37b37bdbe6de6bdbad741985d3a920334240d80
This commit is contained in:
@@ -127,10 +127,12 @@ public final class BluetoothPairingService extends Service {
|
|||||||
PendingIntent pairIntent = PendingIntent.getActivity(this, 0,
|
PendingIntent pairIntent = PendingIntent.getActivity(this, 0,
|
||||||
getPairingDialogIntent(this, intent,
|
getPairingDialogIntent(this, intent,
|
||||||
BluetoothDevice.EXTRA_PAIRING_INITIATOR_BACKGROUND),
|
BluetoothDevice.EXTRA_PAIRING_INITIATOR_BACKGROUND),
|
||||||
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
|
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT
|
||||||
|
| PendingIntent.FLAG_IMMUTABLE);
|
||||||
|
|
||||||
PendingIntent dismissIntent = PendingIntent.getBroadcast(this, 0,
|
PendingIntent dismissIntent = PendingIntent.getBroadcast(this, 0,
|
||||||
new Intent(ACTION_DISMISS_PAIRING), PendingIntent.FLAG_ONE_SHOT);
|
new Intent(ACTION_DISMISS_PAIRING), PendingIntent.FLAG_ONE_SHOT
|
||||||
|
| PendingIntent.FLAG_IMMUTABLE);
|
||||||
|
|
||||||
mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
||||||
|
|
||||||
|
@@ -177,8 +177,9 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
|
|||||||
.setOnlyAlertOnce(false)
|
.setOnlyAlertOnce(false)
|
||||||
.setDefaults(Notification.DEFAULT_ALL)
|
.setDefaults(Notification.DEFAULT_ALL)
|
||||||
.setContentIntent(PendingIntent.getActivity(context, 0,
|
.setContentIntent(PendingIntent.getActivity(context, 0,
|
||||||
connectionAccessIntent, 0))
|
connectionAccessIntent, PendingIntent.FLAG_IMMUTABLE))
|
||||||
.setDeleteIntent(PendingIntent.getBroadcast(context, 0, deleteIntent, 0))
|
.setDeleteIntent(PendingIntent.getBroadcast(context, 0, deleteIntent,
|
||||||
|
PendingIntent.FLAG_IMMUTABLE))
|
||||||
.setColor(context.getColor(
|
.setColor(context.getColor(
|
||||||
com.android.internal.R.color.system_notification_accent_color))
|
com.android.internal.R.color.system_notification_accent_color))
|
||||||
.setLocalOnly(true)
|
.setLocalOnly(true)
|
||||||
|
@@ -194,7 +194,7 @@ public class MediaOutputGroupSlice implements CustomSliceable {
|
|||||||
intent.putExtra(CUSTOMIZED_ACTION, action);
|
intent.putExtra(CUSTOMIZED_ACTION, action);
|
||||||
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
||||||
return PendingIntent.getBroadcast(mContext, requestCode, intent,
|
return PendingIntent.getBroadcast(mContext, requestCode, intent,
|
||||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MediaDeviceUpdateWorker getWorker() {
|
private MediaDeviceUpdateWorker getWorker() {
|
||||||
|
@@ -147,7 +147,8 @@ public class MediaOutputSlice implements CustomSliceable {
|
|||||||
.setSourceMetricsCategory(SettingsEnums.PANEL_MEDIA_OUTPUT)
|
.setSourceMetricsCategory(SettingsEnums.PANEL_MEDIA_OUTPUT)
|
||||||
.toIntent();
|
.toIntent();
|
||||||
final SliceAction primarySliceAction = SliceAction.createDeeplink(
|
final SliceAction primarySliceAction = SliceAction.createDeeplink(
|
||||||
PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, 0 /* flags */),
|
PendingIntent.getActivity(mContext, 0 /* requestCode */, intent,
|
||||||
|
PendingIntent.FLAG_IMMUTABLE),
|
||||||
IconCompat.createWithResource(mContext, R.drawable.ic_add_24dp/*ic_add_blue_24dp*/),
|
IconCompat.createWithResource(mContext, R.drawable.ic_add_24dp/*ic_add_blue_24dp*/),
|
||||||
ListBuilder.ICON_IMAGE,
|
ListBuilder.ICON_IMAGE,
|
||||||
mContext.getText(R.string.bluetooth_pairing_pref_title));
|
mContext.getText(R.string.bluetooth_pairing_pref_title));
|
||||||
@@ -248,7 +249,8 @@ public class MediaOutputSlice implements CustomSliceable {
|
|||||||
.putExtra(MEDIA_DEVICE_ID, id)
|
.putExtra(MEDIA_DEVICE_ID, id)
|
||||||
.setClass(mContext, SliceBroadcastReceiver.class);
|
.setClass(mContext, SliceBroadcastReceiver.class);
|
||||||
|
|
||||||
return PendingIntent.getBroadcast(mContext, requestCode, intent, 0);
|
return PendingIntent.getBroadcast(mContext, requestCode, intent,
|
||||||
|
PendingIntent.FLAG_IMMUTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SliceAction getEndItemSliceAction() {
|
private SliceAction getEndItemSliceAction() {
|
||||||
@@ -261,7 +263,8 @@ public class MediaOutputSlice implements CustomSliceable {
|
|||||||
? 0
|
? 0
|
||||||
: getWorker().getPackageName().hashCode();
|
: getWorker().getPackageName().hashCode();
|
||||||
return SliceAction.createDeeplink(
|
return SliceAction.createDeeplink(
|
||||||
PendingIntent.getActivity(mContext, requestCode, intent, 0 /* flags */),
|
PendingIntent.getActivity(mContext, requestCode, intent,
|
||||||
|
PendingIntent.FLAG_IMMUTABLE),
|
||||||
IconCompat.createWithResource(mContext, R.drawable.ic_add_blue_24dp),
|
IconCompat.createWithResource(mContext, R.drawable.ic_add_blue_24dp),
|
||||||
ListBuilder.ICON_IMAGE,
|
ListBuilder.ICON_IMAGE,
|
||||||
mContext.getText(R.string.add));
|
mContext.getText(R.string.add));
|
||||||
@@ -350,7 +353,7 @@ public class MediaOutputSlice implements CustomSliceable {
|
|||||||
intent.putExtra(MEDIA_DEVICE_ID, id);
|
intent.putExtra(MEDIA_DEVICE_ID, id);
|
||||||
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
||||||
return PendingIntent.getBroadcast(context, requestCode, intent,
|
return PendingIntent.getBroadcast(context, requestCode, intent,
|
||||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -165,7 +165,8 @@ public class RemoteMediaSlice implements CustomSliceable {
|
|||||||
.setData(getUri())
|
.setData(getUri())
|
||||||
.putExtra(MEDIA_ID, id)
|
.putExtra(MEDIA_ID, id)
|
||||||
.setClass(mContext, SliceBroadcastReceiver.class);
|
.setClass(mContext, SliceBroadcastReceiver.class);
|
||||||
return PendingIntent.getBroadcast(mContext, requestCode, intent, 0);
|
return PendingIntent.getBroadcast(mContext, requestCode, intent,
|
||||||
|
PendingIntent.FLAG_MUTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SliceAction getSoundSettingAction(CharSequence actionTitle, IconCompat icon,
|
private SliceAction getSoundSettingAction(CharSequence actionTitle, IconCompat icon,
|
||||||
@@ -177,7 +178,8 @@ public class RemoteMediaSlice implements CustomSliceable {
|
|||||||
mContext.getText(R.string.sound_settings).toString(), 0);
|
mContext.getText(R.string.sound_settings).toString(), 0);
|
||||||
intent.setClassName(mContext.getPackageName(), SubSettings.class.getName());
|
intent.setClassName(mContext.getPackageName(), SubSettings.class.getName());
|
||||||
intent.setData(contentUri);
|
intent.setData(contentUri);
|
||||||
final PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
|
final PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent,
|
||||||
|
PendingIntent.FLAG_IMMUTABLE);
|
||||||
final SliceAction primarySliceAction = SliceAction.createDeeplink(pendingIntent, icon,
|
final SliceAction primarySliceAction = SliceAction.createDeeplink(pendingIntent, icon,
|
||||||
ListBuilder.ICON_IMAGE, actionTitle);
|
ListBuilder.ICON_IMAGE, actionTitle);
|
||||||
return primarySliceAction;
|
return primarySliceAction;
|
||||||
@@ -192,7 +194,8 @@ public class RemoteMediaSlice implements CustomSliceable {
|
|||||||
.putExtra(SESSION_INFO, info)
|
.putExtra(SESSION_INFO, info)
|
||||||
.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
||||||
final PendingIntent primaryBroadcastIntent = PendingIntent.getBroadcast(mContext,
|
final PendingIntent primaryBroadcastIntent = PendingIntent.getBroadcast(mContext,
|
||||||
info.hashCode(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
info.hashCode(), intent,
|
||||||
|
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||||
final SliceAction primarySliceAction = SliceAction.createDeeplink(
|
final SliceAction primarySliceAction = SliceAction.createDeeplink(
|
||||||
primaryBroadcastIntent,
|
primaryBroadcastIntent,
|
||||||
IconCompat.createWithResource(mContext, R.drawable.ic_volume_remote),
|
IconCompat.createWithResource(mContext, R.drawable.ic_volume_remote),
|
||||||
|
Reference in New Issue
Block a user