From 40d4e47b05e7179eb44fa830a5458d133962a392 Mon Sep 17 00:00:00 2001 From: Hugh Chen Date: Tue, 3 Nov 2020 12:08:45 +0800 Subject: [PATCH] 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 --- .../settings/bluetooth/BluetoothPairingService.java | 6 ++++-- .../bluetooth/BluetoothPermissionRequest.java | 5 +++-- .../android/settings/media/MediaOutputGroupSlice.java | 2 +- src/com/android/settings/media/MediaOutputSlice.java | 11 +++++++---- src/com/android/settings/media/RemoteMediaSlice.java | 9 ++++++--- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothPairingService.java b/src/com/android/settings/bluetooth/BluetoothPairingService.java index 10d5ca808d5..c411b0cd0b4 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingService.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingService.java @@ -127,10 +127,12 @@ public final class BluetoothPairingService extends Service { PendingIntent pairIntent = PendingIntent.getActivity(this, 0, getPairingDialogIntent(this, intent, 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, - 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); diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java index c5f62b8b4d6..ae3b08a510a 100644 --- a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java +++ b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java @@ -177,8 +177,9 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver { .setOnlyAlertOnce(false) .setDefaults(Notification.DEFAULT_ALL) .setContentIntent(PendingIntent.getActivity(context, 0, - connectionAccessIntent, 0)) - .setDeleteIntent(PendingIntent.getBroadcast(context, 0, deleteIntent, 0)) + connectionAccessIntent, PendingIntent.FLAG_IMMUTABLE)) + .setDeleteIntent(PendingIntent.getBroadcast(context, 0, deleteIntent, + PendingIntent.FLAG_IMMUTABLE)) .setColor(context.getColor( com.android.internal.R.color.system_notification_accent_color)) .setLocalOnly(true) diff --git a/src/com/android/settings/media/MediaOutputGroupSlice.java b/src/com/android/settings/media/MediaOutputGroupSlice.java index d33ca45a812..0359ca9b71b 100644 --- a/src/com/android/settings/media/MediaOutputGroupSlice.java +++ b/src/com/android/settings/media/MediaOutputGroupSlice.java @@ -194,7 +194,7 @@ public class MediaOutputGroupSlice implements CustomSliceable { intent.putExtra(CUSTOMIZED_ACTION, action); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); return PendingIntent.getBroadcast(mContext, requestCode, intent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } private MediaDeviceUpdateWorker getWorker() { diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java index 6611e8d1cc8..8b3c1ec7eda 100644 --- a/src/com/android/settings/media/MediaOutputSlice.java +++ b/src/com/android/settings/media/MediaOutputSlice.java @@ -147,7 +147,8 @@ public class MediaOutputSlice implements CustomSliceable { .setSourceMetricsCategory(SettingsEnums.PANEL_MEDIA_OUTPUT) .toIntent(); 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*/), ListBuilder.ICON_IMAGE, mContext.getText(R.string.bluetooth_pairing_pref_title)); @@ -248,7 +249,8 @@ public class MediaOutputSlice implements CustomSliceable { .putExtra(MEDIA_DEVICE_ID, id) .setClass(mContext, SliceBroadcastReceiver.class); - return PendingIntent.getBroadcast(mContext, requestCode, intent, 0); + return PendingIntent.getBroadcast(mContext, requestCode, intent, + PendingIntent.FLAG_IMMUTABLE); } private SliceAction getEndItemSliceAction() { @@ -261,7 +263,8 @@ public class MediaOutputSlice implements CustomSliceable { ? 0 : getWorker().getPackageName().hashCode(); 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), ListBuilder.ICON_IMAGE, mContext.getText(R.string.add)); @@ -350,7 +353,7 @@ public class MediaOutputSlice implements CustomSliceable { intent.putExtra(MEDIA_DEVICE_ID, id); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); return PendingIntent.getBroadcast(context, requestCode, intent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } @Override diff --git a/src/com/android/settings/media/RemoteMediaSlice.java b/src/com/android/settings/media/RemoteMediaSlice.java index debc0ecc164..839dc4f1bfd 100644 --- a/src/com/android/settings/media/RemoteMediaSlice.java +++ b/src/com/android/settings/media/RemoteMediaSlice.java @@ -165,7 +165,8 @@ public class RemoteMediaSlice implements CustomSliceable { .setData(getUri()) .putExtra(MEDIA_ID, id) .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, @@ -177,7 +178,8 @@ public class RemoteMediaSlice implements CustomSliceable { mContext.getText(R.string.sound_settings).toString(), 0); intent.setClassName(mContext.getPackageName(), SubSettings.class.getName()); 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, ListBuilder.ICON_IMAGE, actionTitle); return primarySliceAction; @@ -192,7 +194,8 @@ public class RemoteMediaSlice implements CustomSliceable { .putExtra(SESSION_INFO, info) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 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( primaryBroadcastIntent, IconCompat.createWithResource(mContext, R.drawable.ic_volume_remote),