diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt index 1d446797..edd24315 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt @@ -15,9 +15,9 @@ */ package org.moire.ultrasonic.playback -import android.annotation.SuppressLint import android.app.PendingIntent import android.content.Intent +import android.os.Build import androidx.media3.common.AudioAttributes import androidx.media3.common.C import androidx.media3.common.C.CONTENT_TYPE_MUSIC @@ -132,11 +132,14 @@ class PlaybackService : MediaLibraryService(), KoinComponent { .build() } - @SuppressLint("UnspecifiedImmutableFlag") private fun getPendingIntentForContent(): PendingIntent { val intent = Intent(this, NavigationActivity::class.java) .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) - val flags = PendingIntent.FLAG_UPDATE_CURRENT + var flags = PendingIntent.FLAG_UPDATE_CURRENT + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // needed starting Android 12 (S = 31) + flags = flags or PendingIntent.FLAG_IMMUTABLE + } intent.putExtra(Constants.INTENT_SHOW_PLAYER, true) return PendingIntent.getActivity(this, 0, intent, flags) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt index 7a12fdfe..ddc11e3f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt @@ -7,13 +7,13 @@ package org.moire.ultrasonic.provider -import android.annotation.SuppressLint import android.app.PendingIntent import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider import android.content.ComponentName import android.content.Context import android.content.Intent +import android.os.Build import android.os.Environment import android.view.KeyEvent import android.widget.RemoteViews @@ -164,7 +164,6 @@ open class UltrasonicAppWidgetProvider : AppWidgetProvider() { /** * Link up various button actions using [PendingIntent]. */ - @SuppressLint("UnspecifiedImmutableFlag") private fun linkButtons(context: Context, views: RemoteViews, playerActive: Boolean) { var intent = Intent( context, @@ -173,8 +172,13 @@ open class UltrasonicAppWidgetProvider : AppWidgetProvider() { if (playerActive) intent.putExtra(Constants.INTENT_SHOW_PLAYER, true) intent.action = "android.intent.action.MAIN" intent.addCategory("android.intent.category.LAUNCHER") + var flags = PendingIntent.FLAG_UPDATE_CURRENT + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // needed starting Android 12 (S = 31) + flags = flags or PendingIntent.FLAG_IMMUTABLE + } var pendingIntent = - PendingIntent.getActivity(context, 10, intent, PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.getActivity(context, 10, intent, flags) views.setOnClickPendingIntent(R.id.appwidget_coverart, pendingIntent) views.setOnClickPendingIntent(R.id.appwidget_top, pendingIntent) @@ -185,7 +189,12 @@ open class UltrasonicAppWidgetProvider : AppWidgetProvider() { Intent.EXTRA_KEY_EVENT, KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) ) - pendingIntent = PendingIntent.getBroadcast(context, 11, intent, 0) + flags = 0 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // needed starting Android 12 (S = 31) + flags = flags or PendingIntent.FLAG_IMMUTABLE + } + pendingIntent = PendingIntent.getBroadcast(context, 11, intent, flags) views.setOnClickPendingIntent(R.id.control_play, pendingIntent) intent = Intent(Constants.CMD_PROCESS_KEYCODE) intent.component = ComponentName(context, MediaButtonIntentReceiver::class.java) @@ -193,7 +202,7 @@ open class UltrasonicAppWidgetProvider : AppWidgetProvider() { Intent.EXTRA_KEY_EVENT, KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT) ) - pendingIntent = PendingIntent.getBroadcast(context, 12, intent, 0) + pendingIntent = PendingIntent.getBroadcast(context, 12, intent, flags) views.setOnClickPendingIntent(R.id.control_next, pendingIntent) intent = Intent(Constants.CMD_PROCESS_KEYCODE) intent.component = ComponentName(context, MediaButtonIntentReceiver::class.java) @@ -201,7 +210,7 @@ open class UltrasonicAppWidgetProvider : AppWidgetProvider() { Intent.EXTRA_KEY_EVENT, KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS) ) - pendingIntent = PendingIntent.getBroadcast(context, 13, intent, 0) + pendingIntent = PendingIntent.getBroadcast(context, 13, intent, flags) views.setOnClickPendingIntent(R.id.control_previous, pendingIntent) } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt index e9cc351d..f6b2ed49 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt @@ -7,7 +7,6 @@ package org.moire.ultrasonic.service -import android.annotation.SuppressLint import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager @@ -154,11 +153,14 @@ class DownloadService : Service() { return notificationBuilder.build() } - @SuppressLint("UnspecifiedImmutableFlag") private fun getPendingIntentForContent(): PendingIntent { val intent = Intent(this, NavigationActivity::class.java) .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) - val flags = PendingIntent.FLAG_UPDATE_CURRENT + var flags = PendingIntent.FLAG_UPDATE_CURRENT + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // needed starting Android 12 (S = 31) + flags = flags or PendingIntent.FLAG_IMMUTABLE + } intent.putExtra(Constants.INTENT_SHOW_PLAYER, true) return PendingIntent.getActivity(this, 0, intent, flags) }