From 19a3d5803e633feeb349d884a3da35a9216fb583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sylwester=20Zieli=C5=84ski?= Date: Tue, 3 May 2022 10:27:53 +0200 Subject: [PATCH] Switch AlarmManager to RingtoneManager --- .../android/prx/repository/AlarmHandler.kt | 65 ++++--------------- .../android/prx/repository/PRXRepository.kt | 1 - 2 files changed, 11 insertions(+), 55 deletions(-) diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/AlarmHandler.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/AlarmHandler.kt index 0d9b03c0..9b4bc16a 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/AlarmHandler.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/AlarmHandler.kt @@ -1,15 +1,10 @@ package no.nordicsemi.android.prx.repository import android.content.Context -import android.media.AudioManager -import android.media.MediaPlayer import android.media.RingtoneManager -import android.util.Log -import androidx.lifecycle.LifecycleService +import android.os.Build import dagger.hilt.android.qualifiers.ApplicationContext import no.nordicsemi.android.prx.data.AlarmLevel -import java.io.IOException -import java.lang.Exception import javax.inject.Inject internal class AlarmHandler @Inject constructor( @@ -17,61 +12,23 @@ internal class AlarmHandler @Inject constructor( private val context: Context ) { - private val TAG = "ALARM_MANAGER" - - private var mediaPlayer = MediaPlayer() - private var volume = 0 - - init { - mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM) - mediaPlayer.isLooping = true - mediaPlayer.setVolume(1.0f, 1.0f) - try { - mediaPlayer.setDataSource( - context, - RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM) - ) - } catch (e: IOException) { - Log.e(TAG, "Initialize Alarm failed: ", e) - } - } + private val ringtone = RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)) fun playAlarm(alarmLevel: AlarmLevel) { - val am = context.getSystemService(LifecycleService.AUDIO_SERVICE) as AudioManager - - volume = when (alarmLevel) { - AlarmLevel.NONE -> 0 - AlarmLevel.MEDIUM -> am.getStreamVolume(AudioManager.STREAM_NOTIFICATION) - AlarmLevel.HIGH -> am.getStreamVolume(AudioManager.STREAM_ALARM) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + ringtone.volume = when (alarmLevel) { + AlarmLevel.NONE -> 0f + AlarmLevel.MEDIUM -> 0.5f + AlarmLevel.HIGH -> 1f + } } - am.setStreamVolume( - AudioManager.STREAM_ALARM, - volume, - AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE - ) - try { - mediaPlayer.prepare() - mediaPlayer.start() - } catch (e: Exception) { - Log.e(TAG, "Prepare Alarm failed: ", e) - } + ringtone.play() } fun pauseAlarm() { - try { - if (mediaPlayer.isPlaying) { - mediaPlayer.stop() - // Restore original volume - val am = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager - am.setStreamVolume(AudioManager.STREAM_ALARM, volume, 0) - } - } catch (e: Exception) { - Log.e(TAG, "Prepare Alarm failed: ", e) + if (ringtone.isPlaying) { + ringtone.stop() } } - - fun releaseAlarm() { - mediaPlayer.release() - } } diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXRepository.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXRepository.kt index 9c4dae1e..4ebd7b95 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXRepository.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXRepository.kt @@ -84,7 +84,6 @@ class PRXRepository @Inject internal constructor( } fun release() { - alarmHandler.releaseAlarm() manager?.disconnect()?.enqueue() manager = null logger = null