From 1048866831071952077bcead87d32a4f70d78c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Bo=CC=88hm?= Date: Fri, 30 Jul 2021 13:34:35 +0200 Subject: [PATCH] adds `PendingIntent.FLAG_IMMUTABLE` to all PendingIntents to be compatible with Android 12 https://developer.android.com/about/versions/12/behavior-changes-12#pending-intent-mutability --- .../com/onesignal/GenerateNotification.java | 22 +++++++++++++++++-- .../java/com/onesignal/OSBackgroundSync.java | 12 +++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/OneSignalSDK/onesignal/src/main/java/com/onesignal/GenerateNotification.java b/OneSignalSDK/onesignal/src/main/java/com/onesignal/GenerateNotification.java index bc11f1e4ea..56174d88b6 100644 --- a/OneSignalSDK/onesignal/src/main/java/com/onesignal/GenerateNotification.java +++ b/OneSignalSDK/onesignal/src/main/java/com/onesignal/GenerateNotification.java @@ -133,11 +133,29 @@ private static CharSequence getTitle(JSONObject fcmJson) { * on weird UI interaction */ private static PendingIntent getNewActionPendingIntent(int requestCode, Intent intent) { - return PendingIntent.getActivity(currentContext, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); + final int flags; + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE; + + } else { + flags = PendingIntent.FLAG_UPDATE_CURRENT; + } + + return PendingIntent.getActivity(currentContext, requestCode, intent, flags); } private static PendingIntent getNewDismissActionPendingIntent(int requestCode, Intent intent) { - return PendingIntent.getBroadcast(currentContext, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); + final int flags; + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE; + + } else { + flags = PendingIntent.FLAG_UPDATE_CURRENT; + } + + return PendingIntent.getBroadcast(currentContext, requestCode, intent, flags); } private static Intent getNewBaseIntent(int notificationId) { diff --git a/OneSignalSDK/onesignal/src/main/java/com/onesignal/OSBackgroundSync.java b/OneSignalSDK/onesignal/src/main/java/com/onesignal/OSBackgroundSync.java index 28534bc431..2f7709949a 100644 --- a/OneSignalSDK/onesignal/src/main/java/com/onesignal/OSBackgroundSync.java +++ b/OneSignalSDK/onesignal/src/main/java/com/onesignal/OSBackgroundSync.java @@ -174,11 +174,21 @@ private PendingIntent syncServicePendingIntent(Context context) { // KEEP - PendingIntent.FLAG_UPDATE_CURRENT // Some Samsung devices will throw the below exception otherwise. // "java.lang.SecurityException: !@Too many alarms (500) registered" + + final int flags; + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE; + + } else { + flags = PendingIntent.FLAG_UPDATE_CURRENT; + } + return PendingIntent.getService( context, getSyncTaskId(), new Intent(context, getSyncServicePendingIntentClass()), - PendingIntent.FLAG_UPDATE_CURRENT + flags ); }