From 634f04b7aa8ec1e2f2feafc01de1ed93eaa2e635 Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Mon, 12 Dec 2022 18:25:46 -0500 Subject: [PATCH] Explicitly define mutability for PendingIntents --- .../mms/transaction/DownloadManager.java | 2 +- .../mms/transaction/RetryScheduler.java | 2 +- .../android/send_message/Transaction.kt | 2 +- .../moez/QKSMS/manager/AlarmManagerImpl.kt | 2 +- .../QKSMS/repository/MessageRepositoryImpl.kt | 6 +++--- .../com/moez/QKSMS/util/NightModeManager.kt | 4 ++-- .../common/util/NotificationManagerImpl.kt | 20 +++++++++---------- .../QKSMS/feature/widget/WidgetProvider.kt | 6 +++--- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/android-smsmms/src/main/java/com/android/mms/transaction/DownloadManager.java b/android-smsmms/src/main/java/com/android/mms/transaction/DownloadManager.java index 698817ca..a8f6de5f 100755 --- a/android-smsmms/src/main/java/com/android/mms/transaction/DownloadManager.java +++ b/android-smsmms/src/main/java/com/android/mms/transaction/DownloadManager.java @@ -73,7 +73,7 @@ public class DownloadManager { download.putExtra(MmsReceivedReceiver.EXTRA_TRIGGER_PUSH, byPush); download.putExtra(MmsReceivedReceiver.EXTRA_URI, uri); final PendingIntent pendingIntent = PendingIntent.getBroadcast( - context, 0, download, PendingIntent.FLAG_CANCEL_CURRENT); + context, 0, download, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE); final SmsManager smsManager = SmsManagerFactory.INSTANCE.createSmsManager(subscriptionId); Bundle configOverrides = new Bundle(); diff --git a/android-smsmms/src/main/java/com/android/mms/transaction/RetryScheduler.java b/android-smsmms/src/main/java/com/android/mms/transaction/RetryScheduler.java index 45558181..414f14e7 100755 --- a/android-smsmms/src/main/java/com/android/mms/transaction/RetryScheduler.java +++ b/android-smsmms/src/main/java/com/android/mms/transaction/RetryScheduler.java @@ -309,7 +309,7 @@ public class RetryScheduler implements Observer { Intent service = new Intent(TransactionService.ACTION_ONALARM, null, context, TransactionService.class); PendingIntent operation = PendingIntent.getService( - context, 0, service, PendingIntent.FLAG_ONE_SHOT); + context, 0, service, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE); AlarmManager am = (AlarmManager) context.getSystemService( Context.ALARM_SERVICE); am.set(AlarmManager.RTC, retryAt, operation); diff --git a/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt b/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt index e7169cbe..2650c67d 100755 --- a/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt +++ b/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt @@ -101,7 +101,7 @@ class Transaction @JvmOverloads constructor(private val context: Context, settin sentIntent.putExtra(EXTRA_CONTENT_URI, messageUri.toString()) sentIntent.putExtra(EXTRA_FILE_PATH, sendFile.path) - val sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, PendingIntent.FLAG_CANCEL_CURRENT) + val sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE) val updatedIntent = Intent(MMS_UPDATED).putExtra("uri", messageUri.toString()) BroadcastUtils.addClassName(context, updatedIntent, MMS_UPDATED) diff --git a/data/src/main/java/com/moez/QKSMS/manager/AlarmManagerImpl.kt b/data/src/main/java/com/moez/QKSMS/manager/AlarmManagerImpl.kt index 526d5d0a..a41f6119 100644 --- a/data/src/main/java/com/moez/QKSMS/manager/AlarmManagerImpl.kt +++ b/data/src/main/java/com/moez/QKSMS/manager/AlarmManagerImpl.kt @@ -29,7 +29,7 @@ class AlarmManagerImpl @Inject constructor(private val context: Context) : Alarm override fun getScheduledMessageIntent(id: Long): PendingIntent { val intent = Intent(context, SendScheduledMessageReceiver::class.java).putExtra("id", id) - return PendingIntent.getBroadcast(context, id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) + return PendingIntent.getBroadcast(context, id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } override fun setAlarm(date: Long, intent: PendingIntent) { diff --git a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt index a5438d34..00659892 100644 --- a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt +++ b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt @@ -445,13 +445,13 @@ class MessageRepositoryImpl @Inject constructor( val sentIntents = parts.map { val intent = Intent(context, SmsSentReceiver::class.java).putExtra("id", message.id) - PendingIntent.getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } val deliveredIntents = parts.map { val intent = Intent(context, SmsDeliveredReceiver::class.java).putExtra("id", message.id) val pendingIntent = PendingIntent - .getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) + .getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) if (prefs.delivery.get()) pendingIntent else null } @@ -495,7 +495,7 @@ class MessageRepositoryImpl @Inject constructor( private fun getIntentForDelayedSms(id: Long): PendingIntent { val intent = Intent(context, SendSmsReceiver::class.java).putExtra("id", id) - return PendingIntent.getBroadcast(context, id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) + return PendingIntent.getBroadcast(context, id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } override fun insertSentSms(subId: Int, threadId: Long, address: String, body: String, date: Long): Message { diff --git a/data/src/main/java/com/moez/QKSMS/util/NightModeManager.kt b/data/src/main/java/com/moez/QKSMS/util/NightModeManager.kt index 243bfb53..6cb00076 100644 --- a/data/src/main/java/com/moez/QKSMS/util/NightModeManager.kt +++ b/data/src/main/java/com/moez/QKSMS/util/NightModeManager.kt @@ -99,11 +99,11 @@ class NightModeManager @Inject constructor( private fun updateAlarms() { val dayCalendar = createCalendar(prefs.nightEnd.get()) val day = Intent(context, NightModeReceiver::class.java) - val dayIntent = PendingIntent.getBroadcast(context, 0, day, 0) + val dayIntent = PendingIntent.getBroadcast(context, 0, day, PendingIntent.FLAG_IMMUTABLE) val nightCalendar = createCalendar(prefs.nightStart.get()) val night = Intent(context, NightModeReceiver::class.java) - val nightIntent = PendingIntent.getBroadcast(context, 1, night, 0) + val nightIntent = PendingIntent.getBroadcast(context, 1, night, PendingIntent.FLAG_IMMUTABLE) context.sendBroadcast(day) context.sendBroadcast(night) diff --git a/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt b/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt index f94eb3d3..4e767f1f 100644 --- a/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt +++ b/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt @@ -114,11 +114,11 @@ class NotificationManagerImpl @Inject constructor( val taskStackBuilder = TaskStackBuilder.create(context) .addParentStack(ComposeActivity::class.java) .addNextIntent(contentIntent) - val contentPI = taskStackBuilder.getPendingIntent(threadId.toInt(), PendingIntent.FLAG_UPDATE_CURRENT) + val contentPI = taskStackBuilder.getPendingIntent(threadId.toInt(), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) val seenIntent = Intent(context, MarkSeenReceiver::class.java).putExtra("threadId", threadId) val seenPI = PendingIntent.getBroadcast(context, threadId.toInt(), seenIntent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) // We can't store a null preference, so map it to a null Uri if the pref string is empty val ringtone = prefs.ringtone(threadId).get() @@ -233,7 +233,7 @@ class NotificationManagerImpl @Inject constructor( Preferences.NOTIFICATION_ACTION_ARCHIVE -> { val intent = Intent(context, MarkArchivedReceiver::class.java).putExtra("threadId", threadId) val pi = PendingIntent.getBroadcast(context, threadId.toInt(), intent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) NotificationCompat.Action.Builder(R.drawable.ic_archive_white_24dp, actionLabels[action], pi) .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE).build() } @@ -244,7 +244,7 @@ class NotificationManagerImpl @Inject constructor( .putExtra("threadId", threadId) .putExtra("messageIds", messageIds) val pi = PendingIntent.getBroadcast(context, threadId.toInt(), intent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) NotificationCompat.Action.Builder(R.drawable.ic_delete_white_24dp, actionLabels[action], pi) .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_DELETE).build() } @@ -252,7 +252,7 @@ class NotificationManagerImpl @Inject constructor( Preferences.NOTIFICATION_ACTION_BLOCK -> { val intent = Intent(context, BlockThreadReceiver::class.java).putExtra("threadId", threadId) val pi = PendingIntent.getBroadcast(context, threadId.toInt(), intent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) NotificationCompat.Action.Builder(R.drawable.ic_block_white_24dp, actionLabels[action], pi) .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_MUTE).build() } @@ -260,7 +260,7 @@ class NotificationManagerImpl @Inject constructor( Preferences.NOTIFICATION_ACTION_READ -> { val intent = Intent(context, MarkReadReceiver::class.java).putExtra("threadId", threadId) val pi = PendingIntent.getBroadcast(context, threadId.toInt(), intent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) NotificationCompat.Action.Builder(R.drawable.ic_check_white_24dp, actionLabels[action], pi) .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ).build() } @@ -271,7 +271,7 @@ class NotificationManagerImpl @Inject constructor( } else { val intent = Intent(context, QkReplyActivity::class.java).putExtra("threadId", threadId) val pi = PendingIntent.getActivity(context, threadId.toInt(), intent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) NotificationCompat.Action .Builder(R.drawable.ic_reply_white_24dp, actionLabels[action], pi) .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_REPLY).build() @@ -283,7 +283,7 @@ class NotificationManagerImpl @Inject constructor( val intentAction = if (permissions.hasCalling()) Intent.ACTION_CALL else Intent.ACTION_DIAL val intent = Intent(intentAction, Uri.parse("tel:$address")) val pi = PendingIntent.getActivity(context, threadId.toInt(), intent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) NotificationCompat.Action.Builder(R.drawable.ic_call_white_24dp, actionLabels[action], pi) .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_CALL).build() } @@ -337,7 +337,7 @@ class NotificationManagerImpl @Inject constructor( val taskStackBuilder = TaskStackBuilder.create(context) .addParentStack(ComposeActivity::class.java) .addNextIntent(contentIntent) - val contentPI = taskStackBuilder.getPendingIntent(threadId.toInt(), PendingIntent.FLAG_UPDATE_CURRENT) + val contentPI = taskStackBuilder.getPendingIntent(threadId.toInt(), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) val notification = NotificationCompat.Builder(context, getChannelIdForNotification(threadId)) .setContentTitle(context.getString(R.string.notification_message_failed_title)) @@ -357,7 +357,7 @@ class NotificationManagerImpl @Inject constructor( private fun getReplyAction(threadId: Long): NotificationCompat.Action { val replyIntent = Intent(context, RemoteMessagingReceiver::class.java).putExtra("threadId", threadId) val replyPI = PendingIntent.getBroadcast(context, threadId.toInt(), replyIntent, - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE) val title = context.resources.getStringArray(R.array.notification_actions)[ Preferences.NOTIFICATION_ACTION_REPLY] diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/widget/WidgetProvider.kt b/presentation/src/main/java/com/moez/QKSMS/feature/widget/WidgetProvider.kt index 696823f1..bfa0525b 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/widget/WidgetProvider.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/widget/WidgetProvider.kt @@ -140,17 +140,17 @@ class WidgetProvider : AppWidgetProvider() { // Main intent val mainIntent = Intent(context, MainActivity::class.java) - val mainPI = PendingIntent.getActivity(context, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT) + val mainPI = PendingIntent.getActivity(context, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) remoteViews.setOnClickPendingIntent(R.id.title, mainPI) // Compose intent val composeIntent = Intent(context, ComposeActivity::class.java) - val composePI = PendingIntent.getActivity(context, 0, composeIntent, PendingIntent.FLAG_UPDATE_CURRENT) + val composePI = PendingIntent.getActivity(context, 0, composeIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) remoteViews.setOnClickPendingIntent(R.id.compose, composePI) // Conversation intent val startActivityIntent = Intent(context, MainActivity::class.java) - val startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT) + val startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) remoteViews.setPendingIntentTemplate(R.id.conversations, startActivityPendingIntent) AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, remoteViews)