started updating intent calls. Crash when selecting day in alarm

remotes/origin/update/api32
yattoz 2022-03-13 12:09:08 +09:00
parent 63d18856f1
commit 185f0867e2
5 changed files with 42 additions and 12 deletions

View File

@ -50,6 +50,7 @@ abstract class BaseNotification(private val notificationChannelId: String,
notificationManager.notify(notificationId, notification) notificationManager.notify(notificationId, notification)
} }
@RequiresApi(Build.VERSION_CODES.M)
open fun create(c: Context) { open fun create(c: Context) {
notificationManager = c.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager = c.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
@ -58,7 +59,7 @@ abstract class BaseNotification(private val notificationChannelId: String,
// thanks to the launchMode specified in the Manifest : android:launchMode="singleTop" // thanks to the launchMode specified in the Manifest : android:launchMode="singleTop"
val pendingIntent = PendingIntent.getActivity( val pendingIntent = PendingIntent.getActivity(
c, 0, c, 0,
notificationIntent, 0 notificationIntent, PendingIntent.FLAG_IMMUTABLE
) )
var channelID = "" var channelID = ""

View File

@ -3,8 +3,10 @@ package fr.forum_thalie.tsumugi
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.session.PlaybackStateCompat
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import fr.forum_thalie.tsumugi.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
@ -34,7 +36,7 @@ class NowPlayingNotification(
// got it right // got it right
val delIntent = Intent(c, RadioService::class.java) val delIntent = Intent(c, RadioService::class.java)
delIntent.putExtra("action", Actions.KILL.name) delIntent.putExtra("action", Actions.KILL.name)
val deleteIntent = PendingIntent.getService(c, 0, delIntent, PendingIntent.FLAG_NO_CREATE) val deleteIntent = PendingIntent.getService(c, 0, delIntent, PendingIntent.FLAG_NO_CREATE + PendingIntent.FLAG_IMMUTABLE)
builder.setDeleteIntent(deleteIntent) builder.setDeleteIntent(deleteIntent)
mediaStyle = androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle().also { mediaStyle = androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle().also {
@ -46,6 +48,7 @@ class NowPlayingNotification(
update(c) update(c)
} }
@RequiresApi(Build.VERSION_CODES.M)
fun update(c: Context, isUpdatingNotificationButton: Boolean = false, isRinging: Boolean = false) { fun update(c: Context, isUpdatingNotificationButton: Boolean = false, isRinging: Boolean = false) {
if (isUpdatingNotificationButton) if (isUpdatingNotificationButton)
@ -72,17 +75,17 @@ class NowPlayingNotification(
playPauseAction = if (PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_PLAYING) { playPauseAction = if (PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_PLAYING) {
intent.putExtra("action", Actions.PAUSE.name) intent.putExtra("action", Actions.PAUSE.name)
val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT) val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
NotificationCompat.Action.Builder(R.drawable.ic_pause, "Pause", pendingButtonIntent).build() NotificationCompat.Action.Builder(R.drawable.ic_pause, "Pause", pendingButtonIntent).build()
} else { } else {
intent.putExtra("action", Actions.PLAY.name) intent.putExtra("action", Actions.PLAY.name)
val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT) val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
NotificationCompat.Action.Builder(R.drawable.ic_play,"Play", pendingButtonIntent).build() NotificationCompat.Action.Builder(R.drawable.ic_play,"Play", pendingButtonIntent).build()
} }
builder.addAction(playPauseAction) builder.addAction(playPauseAction)
val intent2 = Intent(c, RadioService::class.java) val intent2 = Intent(c, RadioService::class.java)
intent2.putExtra("action", Actions.KILL.name) intent2.putExtra("action", Actions.KILL.name)
val pendingButtonIntent = PendingIntent.getService(c, 2, intent2, PendingIntent.FLAG_UPDATE_CURRENT) val pendingButtonIntent = PendingIntent.getService(c, 2, intent2, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
val stopAction = NotificationCompat.Action.Builder(R.drawable.ic_close,"Stop", pendingButtonIntent).build() val stopAction = NotificationCompat.Action.Builder(R.drawable.ic_close,"Stop", pendingButtonIntent).build()
builder.addAction(stopAction) builder.addAction(stopAction)
@ -92,7 +95,7 @@ class NowPlayingNotification(
val snoozeIntent = Intent(c, RadioService::class.java) val snoozeIntent = Intent(c, RadioService::class.java)
snoozeIntent.putExtra("action", Actions.SNOOZE.name) snoozeIntent.putExtra("action", Actions.SNOOZE.name)
val pendingSnoozeIntent = PendingIntent.getService(c, 5, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT) val pendingSnoozeIntent = PendingIntent.getService(c, 5, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
val snoozeAction = NotificationCompat.Action.Builder(R.drawable.ic_alarm, "Snooze ($snoozeMinutes min.)", pendingSnoozeIntent ).build() val snoozeAction = NotificationCompat.Action.Builder(R.drawable.ic_alarm, "Snooze ($snoozeMinutes min.)", pendingSnoozeIntent ).build()
if (snoozeMinutes > 0) if (snoozeMinutes > 0)
builder.addAction(snoozeAction) builder.addAction(snoozeAction)

View File

@ -193,7 +193,8 @@ class RadioService : MediaBrowserServiceCompat() {
// Define managers // Define managers
telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
telephonyManager?.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE) // telephonyManager?.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE)
audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
//define the audioFocusRequest //define the audioFocusRequest

View File

@ -4,7 +4,9 @@ import android.app.AlarmManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.util.Log import android.util.Log
import androidx.annotation.RequiresApi
import androidx.core.app.AlarmManagerCompat import androidx.core.app.AlarmManagerCompat
import fr.forum_thalie.tsumugi.BootBroadcastReceiver import fr.forum_thalie.tsumugi.BootBroadcastReceiver
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
@ -27,13 +29,31 @@ class RadioAlarm {
{ {
alarmIntent = Intent(c, BootBroadcastReceiver::class.java).let { intent -> alarmIntent = Intent(c, BootBroadcastReceiver::class.java).let { intent ->
intent.putExtra("action", "$tag.${Actions.PLAY_OR_FALLBACK.name}") intent.putExtra("action", "$tag.${Actions.PLAY_OR_FALLBACK.name}")
PendingIntent.getBroadcast(c, 0, intent, 0) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PendingIntent.getBroadcast(
c,
0,
intent,
PendingIntent.FLAG_IMMUTABLE
)
} else {
PendingIntent.getBroadcast(
c,
0,
intent,
0
)
}
} }
showIntent = Intent(c, ParametersActivity::class.java).let { intent -> showIntent = Intent(c, ParametersActivity::class.java).let { intent ->
intent.putExtra("action", "alarm") intent.putExtra("action", "alarm")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PendingIntent.getActivity(c, 0, intent, PendingIntent.FLAG_IMMUTABLE)
} else {
PendingIntent.getActivity(c, 0, intent, 0) PendingIntent.getActivity(c, 0, intent, 0)
} }
} }
}
fun cancelAlarm(c: Context) fun cancelAlarm(c: Context)
@ -43,6 +63,7 @@ class RadioAlarm {
alarmManager.cancel(alarmIntent) alarmManager.cancel(alarmIntent)
} }
@RequiresApi(Build.VERSION_CODES.M)
fun setNextAlarm(c: Context, isForce: Boolean = false, forceTime: Int? = null, forceDays: Set<String>? = null) fun setNextAlarm(c: Context, isForce: Boolean = false, forceTime: Int? = null, forceDays: Set<String>? = null)
{ {
defineIntents(c) defineIntents(c)
@ -54,7 +75,7 @@ class RadioAlarm {
val showIntent = Intent(c, ParametersActivity::class.java).let { intent -> val showIntent = Intent(c, ParametersActivity::class.java).let { intent ->
intent.putExtra("action", ActionOpenParam.ALARM.name) intent.putExtra("action", ActionOpenParam.ALARM.name)
PendingIntent.getActivity(c, 0, intent, 0) PendingIntent.getActivity(c, 0, intent, PendingIntent.FLAG_IMMUTABLE)
} }
val time = findNextAlarmTime(c, forceTime, forceDays) val time = findNextAlarmTime(c, forceTime, forceDays)
if (time > 0) if (time > 0)

View File

@ -4,7 +4,9 @@ import android.app.AlarmManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.util.Log import android.util.Log
import androidx.annotation.RequiresApi
import androidx.core.app.AlarmManagerCompat import androidx.core.app.AlarmManagerCompat
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
@ -30,18 +32,20 @@ class RadioSleeper {
private lateinit var sleepIntent: PendingIntent private lateinit var sleepIntent: PendingIntent
private lateinit var fadeOutIntent: PendingIntent private lateinit var fadeOutIntent: PendingIntent
@RequiresApi(Build.VERSION_CODES.M)
private fun defineIntents(c: Context) private fun defineIntents(c: Context)
{ {
sleepIntent = Intent(c, RadioService::class.java).let { intent -> sleepIntent = Intent(c, RadioService::class.java).let { intent ->
intent.putExtra("action", Actions.KILL.name) intent.putExtra("action", Actions.KILL.name)
PendingIntent.getService(c, 99, intent, 0) PendingIntent.getService(c, 99, intent, PendingIntent.FLAG_IMMUTABLE)
} }
fadeOutIntent = Intent(c, RadioService::class.java).let { intent -> fadeOutIntent = Intent(c, RadioService::class.java).let { intent ->
intent.putExtra("action", Actions.FADE_OUT.name) intent.putExtra("action", Actions.FADE_OUT.name)
PendingIntent.getService(c, 98, intent, 0) PendingIntent.getService(c, 98, intent, PendingIntent.FLAG_IMMUTABLE)
} }
} }
@RequiresApi(Build.VERSION_CODES.M)
fun setSleep(c: Context, isForce: Boolean = false, forceDuration: Long? = null) fun setSleep(c: Context, isForce: Boolean = false, forceDuration: Long? = null)
{ {
defineIntents(c) defineIntents(c)