Merge pull request from rawlin/#242

 Fix for alarm playing twice
This commit is contained in:
Tibor Kaputa 2023-06-29 10:19:59 +02:00 committed by GitHub
commit 39a9c6d862
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 11 deletions
app/src/main/kotlin/com/simplemobiletools/clock

@ -30,6 +30,7 @@ const val DEFAULT_ALARM_MINUTES = 480
const val DEFAULT_MAX_ALARM_REMINDER_SECS = 300 const val DEFAULT_MAX_ALARM_REMINDER_SECS = 300
const val DEFAULT_MAX_TIMER_REMINDER_SECS = 60 const val DEFAULT_MAX_TIMER_REMINDER_SECS = 60
const val SIMPLE_PHONE = "Simple_Phone" const val SIMPLE_PHONE = "Simple_Phone"
const val ALARM_NOTIFICATION_CHANNEL_ID = "Alarm_Channel"
const val PICK_AUDIO_FILE_INTENT_ID = 9994 const val PICK_AUDIO_FILE_INTENT_ID = 9994
const val REMINDER_ACTIVITY_INTENT_ID = 9995 const val REMINDER_ACTIVITY_INTENT_ID = 9995

@ -6,14 +6,15 @@ import android.app.PendingIntent
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.media.AudioAttributes import android.os.Build
import android.net.Uri
import android.os.Handler import android.os.Handler
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import com.simplemobiletools.clock.R import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.ReminderActivity import com.simplemobiletools.clock.activities.ReminderActivity
import com.simplemobiletools.clock.extensions.* import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.helpers.ALARM_ID import com.simplemobiletools.clock.helpers.ALARM_ID
import com.simplemobiletools.clock.helpers.ALARM_NOTIFICATION_CHANNEL_ID
import com.simplemobiletools.clock.helpers.ALARM_NOTIF_ID import com.simplemobiletools.clock.helpers.ALARM_NOTIF_ID
import com.simplemobiletools.commons.extensions.showErrorToast import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.commons.helpers.isOreoPlus
@ -31,16 +32,13 @@ class AlarmReceiver : BroadcastReceiver() {
}, context.config.alarmMaxReminderSecs * 1000L) }, context.config.alarmMaxReminderSecs * 1000L)
} else { } else {
if (isOreoPlus()) { if (isOreoPlus()) {
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build()
val notificationManager = context.getSystemService(NotificationManager::class.java) val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (notificationManager.getNotificationChannel("Alarm") == null) { if (notificationManager.getNotificationChannel(ALARM_NOTIFICATION_CHANNEL_ID) == null) {
NotificationChannel("Alarm", "Alarm", NotificationManager.IMPORTANCE_HIGH).apply { oldNotificationChannelCleanup(notificationManager) // cleans up previous notification channel that had sound properties
NotificationChannel(ALARM_NOTIFICATION_CHANNEL_ID, "Alarm", NotificationManager.IMPORTANCE_HIGH).apply {
setBypassDnd(true) setBypassDnd(true)
setSound(Uri.parse(alarm.soundUri), audioAttributes) setSound(null, null)
notificationManager.createNotificationChannel(this) notificationManager.createNotificationChannel(this)
} }
} }
@ -50,7 +48,7 @@ class AlarmReceiver : BroadcastReceiver() {
putExtra(ALARM_ID, id) putExtra(ALARM_ID, id)
}, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) }, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
val builder = NotificationCompat.Builder(context, "Alarm") val builder = NotificationCompat.Builder(context, ALARM_NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_alarm_vector) .setSmallIcon(R.drawable.ic_alarm_vector)
.setContentTitle(context.getString(R.string.alarm)) .setContentTitle(context.getString(R.string.alarm))
.setAutoCancel(true) .setAutoCancel(true)
@ -72,4 +70,9 @@ class AlarmReceiver : BroadcastReceiver() {
} }
} }
} }
@RequiresApi(Build.VERSION_CODES.O)
private fun oldNotificationChannelCleanup(notificationManager: NotificationManager) {
notificationManager.deleteNotificationChannel("Alarm")
}
} }