Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions app/src/main/kotlin/org/fossify/clock/extensions/Context.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager.STREAM_ALARM
import android.media.RingtoneManager
import android.net.Uri
import android.os.Handler
import android.os.Looper
import android.text.SpannableString
Expand Down Expand Up @@ -51,6 +52,7 @@ import org.fossify.clock.helpers.getDefaultTimeZoneTitle
import org.fossify.clock.helpers.getTimeOfNextAlarm
import org.fossify.clock.interfaces.TimerDao
import org.fossify.clock.models.Alarm
import org.fossify.clock.models.AlarmEvent
import org.fossify.clock.models.MyTimeZone
import org.fossify.clock.models.Timer
import org.fossify.clock.models.TimerState
Expand Down Expand Up @@ -87,6 +89,7 @@ import java.util.Locale
import kotlin.math.ceil
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.minutes
import org.greenrobot.eventbus.EventBus

val Context.config: Config
get() = Config.newInstance(applicationContext)
Expand Down Expand Up @@ -557,6 +560,26 @@ fun Context.checkAlarmsWithDeletedSoundUri(uri: String) {
it.soundUri = defaultAlarmSound.uri
dbHelper.updateAlarm(it)
}
EventBus.getDefault().post(AlarmEvent.Refresh)
}

fun Context.isUriAccessible(uri: Uri): Boolean {
return try {
this.contentResolver.openAssetFileDescriptor(uri, "r")?.close()
true
} catch (_: Exception) {
false
}
}

fun Context.isUriAccessible(uriString: String): Boolean {
if (uriString.isBlank()) return false
return try {
val uri = uriString.toUri()
isUriAccessible(uri)
} catch (_: Exception) {
false
}
}

fun Context.rotateWeekdays(days: List<Int>) = days.rotateLeft(config.firstDayOfWeek - 1)
Expand Down
17 changes: 15 additions & 2 deletions app/src/main/kotlin/org/fossify/clock/services/AlarmService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,25 @@ import android.media.AudioAttributes
import android.media.AudioManager
import android.media.AudioManager.STREAM_ALARM
import android.media.MediaPlayer
import android.media.RingtoneManager
import android.os.Handler
import android.os.Looper
import android.os.VibrationEffect
import android.os.Vibrator
import androidx.core.net.toUri
import org.fossify.clock.activities.AlarmActivity
import org.fossify.clock.extensions.alarmController
import org.fossify.clock.extensions.checkAlarmsWithDeletedSoundUri
import org.fossify.clock.extensions.config
import org.fossify.clock.extensions.dbHelper
import org.fossify.clock.extensions.isUriAccessible
import org.fossify.clock.helpers.ALARM_ID
import org.fossify.clock.helpers.ALARM_NOTIFICATION_ID
import org.fossify.clock.helpers.AlarmNotificationHelper
import org.fossify.clock.models.Alarm
import org.fossify.commons.extensions.getDefaultAlarmSound
import org.fossify.commons.helpers.SILENT
import org.fossify.commons.helpers.ensureBackgroundThread
import kotlin.time.Duration.Companion.seconds

/**
Expand Down Expand Up @@ -109,7 +114,15 @@ class AlarmService : Service() {
}

private fun startAlarmEffects(alarm: Alarm) {
if (alarm.soundUri != SILENT) {
var soundUri = alarm.soundUri
if (!isUriAccessible(soundUri)) {
ensureBackgroundThread {
checkAlarmsWithDeletedSoundUri(soundUri)
}
soundUri = applicationContext.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM).uri
}

if (soundUri != SILENT) {
try {
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
Expand All @@ -118,7 +131,7 @@ class AlarmService : Service() {

mediaPlayer = MediaPlayer().apply {
setAudioAttributes(audioAttributes)
setDataSource(this@AlarmService, alarm.soundUri.toUri())
setDataSource(this@AlarmService, soundUri.toUri())
isLooping = true
prepare()
start()
Expand Down
Loading