diff --git a/app/src/main/java/com/nutomic/syncthingandroid/service/Constants.java b/app/src/main/java/com/nutomic/syncthingandroid/service/Constants.java index 75b52aed..598872a1 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/service/Constants.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/service/Constants.java @@ -1,6 +1,7 @@ package com.nutomic.syncthingandroid.service; import android.Manifest; +import android.app.PendingIntent; import android.content.Context; import android.os.Build; import android.os.Environment; @@ -143,4 +144,6 @@ public class Constants { return true; } + + public static int FLAG_IMMUTABLE = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) ? PendingIntent.FLAG_IMMUTABLE : 0; } diff --git a/app/src/main/java/com/nutomic/syncthingandroid/service/EventProcessor.java b/app/src/main/java/com/nutomic/syncthingandroid/service/EventProcessor.java index 2cc86e85..fff8c583 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/service/EventProcessor.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/service/EventProcessor.java @@ -239,7 +239,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener .putExtra(DeviceActivity.EXTRA_DEVICE_ID, deviceId) .putExtra(DeviceActivity.EXTRA_DEVICE_NAME, deviceName); PendingIntent piAccept = PendingIntent.getActivity(mContext, notificationId, - intentAccept, PendingIntent.FLAG_UPDATE_CURRENT); + intentAccept, Constants.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); // Prepare "ignore" action. Intent intentIgnore = new Intent(mContext, SyncthingService.class) @@ -249,7 +249,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener .putExtra(SyncthingService.EXTRA_DEVICE_ADDRESS, deviceAddress); intentIgnore.setAction(SyncthingService.ACTION_IGNORE_DEVICE); PendingIntent piIgnore = PendingIntent.getService(mContext, 0, - intentIgnore, PendingIntent.FLAG_UPDATE_CURRENT); + intentIgnore, Constants.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); // Show notification. mNotificationHandler.showConsentNotification(notificationId, title, piAccept, piIgnore); @@ -287,7 +287,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener .putExtra(FolderActivity.EXTRA_FOLDER_ID, folderId) .putExtra(FolderActivity.EXTRA_FOLDER_LABEL, folderLabel); PendingIntent piAccept = PendingIntent.getActivity(mContext, notificationId, - intentAccept, PendingIntent.FLAG_UPDATE_CURRENT); + intentAccept, Constants.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); // Prepare "ignore" action. Intent intentIgnore = new Intent(mContext, SyncthingService.class) @@ -297,7 +297,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener .putExtra(SyncthingService.EXTRA_FOLDER_LABEL, folderLabel); intentIgnore.setAction(SyncthingService.ACTION_IGNORE_FOLDER); PendingIntent piIgnore = PendingIntent.getService(mContext, 0, - intentIgnore, PendingIntent.FLAG_UPDATE_CURRENT); + intentIgnore, Constants.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); // Show notification. mNotificationHandler.showConsentNotification(notificationId, title, piAccept, piIgnore); diff --git a/app/src/main/java/com/nutomic/syncthingandroid/service/NotificationHandler.java b/app/src/main/java/com/nutomic/syncthingandroid/service/NotificationHandler.java index 6955d949..3f3e2c70 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/service/NotificationHandler.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/service/NotificationHandler.java @@ -1,5 +1,6 @@ package com.nutomic.syncthingandroid.service; +import android.annotation.TargetApi; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -165,7 +166,7 @@ public class NotificationHandler { .setOngoing(true) .setOnlyAlertOnce(true) .setPriority(NotificationCompat.PRIORITY_MIN) - .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, Constants.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT)); if (!appShutdownInProgress) { if (startForegroundService) { Log.v(TAG, "Starting foreground service or updating notification"); @@ -198,7 +199,7 @@ public class NotificationHandler { .setContentTitle(mContext.getString(title)) .setContentText(mContext.getString(R.string.notification_crash_text)) .setSmallIcon(R.drawable.ic_stat_notify) - .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, Constants.FLAG_IMMUTABLE)) .setAutoCancel(true) .build(); mNotificationManager.notify(ID_CRASH, n); @@ -258,7 +259,7 @@ public class NotificationHandler { .setContentTitle(mContext.getString(R.string.syncthing_terminated)) .setContentText(mContext.getString(R.string.toast_write_storage_permission_required)) .setSmallIcon(R.drawable.ic_stat_notify) - .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, Constants.FLAG_IMMUTABLE)) .setAutoCancel(true) .setOnlyAlertOnce(true) .build(); @@ -268,7 +269,7 @@ public class NotificationHandler { public void showRestartNotification() { Intent intent = new Intent(mContext, SyncthingService.class) .setAction(SyncthingService.ACTION_RESTART); - PendingIntent pi = PendingIntent.getService(mContext, 0, intent, 0); + PendingIntent pi = PendingIntent.getService(mContext, 0, intent, Constants.FLAG_IMMUTABLE); Notification n = getNotificationBuilder(mInfoChannel) .setContentTitle(mContext.getString(R.string.restart_title)) @@ -295,7 +296,7 @@ public class NotificationHandler { .setAutoCancel(true) .setContentIntent(PendingIntent.getActivity(mContext, 0, new Intent(mContext, MainActivity.class), - PendingIntent.FLAG_UPDATE_CURRENT)); + Constants.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {