From b33510f81e6eb34aa9a66c407eced854dcd04d0e Mon Sep 17 00:00:00 2001
From: yattoz <12408848+yattoz@users.noreply.github.com>
Date: Sat, 18 Apr 2020 13:29:19 +0200
Subject: [PATCH 1/9] Added missing permission for bootbroadcast alarm register
---
app/src/main/AndroidManifest.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4bb94a6..3a7c555 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,6 +13,7 @@
+
Date: Wed, 5 Aug 2020 11:49:20 +0200
Subject: [PATCH 2/9] added button to test and adjust alarm volume.
---
.idea/codeStyles/Project.xml | 3 -
.idea/gradle.xml | 3 +-
.idea/jarRepositories.xml | 30 +++++++
app/build.gradle | 6 +-
.../fr/forum_thalie/tsumugi/MainActivity.kt | 2 +-
.../tsumugi/alarm/RadioAlarmExtensions.kt | 33 +++++++
.../tsumugi/preferences/AlarmFragment.kt | 90 +++++++++++++++++++
app/src/main/res/values-fr/strings.xml | 4 +
app/src/main/res/values/strings.xml | 4 +
app/src/main/res/xml/alarm_preferences.xml | 6 ++
10 files changed, 173 insertions(+), 8 deletions(-)
create mode 100644 .idea/jarRepositories.xml
create mode 100644 app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 45b5654..88ea3aa 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -1,8 +1,5 @@
-
-
-
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 169fd0d..5cd135a 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,8 +1,10 @@
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..eb2873e
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0274953..4a6df77 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -16,8 +16,8 @@ configurations.all {
}
android {
- compileSdkVersion 29
- buildToolsVersion "29.0.2"
+ compileSdkVersion 30
+ buildToolsVersion "30.0.0"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
@@ -28,7 +28,7 @@ android {
defaultConfig {
applicationId "fr.forum_thalie.tsumugi"
minSdkVersion 16
- targetSdkVersion 29
+ targetSdkVersion 30
versionCode 115
versionName "1.1.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/MainActivity.kt b/app/src/main/java/fr/forum_thalie/tsumugi/MainActivity.kt
index 91fd2c7..c325d77 100644
--- a/app/src/main/java/fr/forum_thalie/tsumugi/MainActivity.kt
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/MainActivity.kt
@@ -117,7 +117,7 @@ class MainActivity : BaseActivity() {
}
}
- override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
+ override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState ?: Bundle())
// Now that BottomNavigationBar has restored its instance state
// and its selectedItemId, we can proceed with setting up the
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt b/app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt
new file mode 100644
index 0000000..23131df
--- /dev/null
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt
@@ -0,0 +1,33 @@
+package fr.forum_thalie.tsumugi.alarm
+
+import android.content.Context
+import android.content.Intent
+import fr.forum_thalie.tsumugi.Actions
+import fr.forum_thalie.tsumugi.RadioService
+
+
+fun playOnFallback(c: Context) {
+ val a = Actions.PLAY_OR_FALLBACK
+ val i = Intent(c, RadioService::class.java)
+ i.putExtra("action", a.name)
+ c.startService(i)
+}
+
+fun resume(c: Context)
+{
+
+}
+
+fun resumeStop(c: Context) {
+ val a = Actions.PLAY
+ val i = Intent(c, RadioService::class.java)
+ i.putExtra("action", a.name)
+ c.startService(i)
+}
+
+fun resumePlay(c: Context) {
+ val a = Actions.PLAY
+ val i = Intent(c, RadioService::class.java)
+ i.putExtra("action", a.name)
+ c.startService(i)
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt
index 4b07606..cfd55cc 100644
--- a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt
@@ -2,15 +2,29 @@ package fr.forum_thalie.tsumugi.preferences
import android.app.TimePickerDialog
import android.content.Context
+import android.content.Intent
+import android.media.AudioManager
import android.os.Bundle
import android.util.Log
+import android.view.KeyEvent
+import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.edit
import androidx.preference.*
import fr.forum_thalie.tsumugi.*
import fr.forum_thalie.tsumugi.R
import fr.forum_thalie.tsumugi.alarm.RadioAlarm
+import fr.forum_thalie.tsumugi.playerstore.PlayerStore
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.GlobalScope.coroutineContext
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
import java.util.*
+import kotlin.coroutines.CoroutineContext
+import kotlin.math.max
+import kotlin.math.min
+
class AlarmFragment : PreferenceFragmentCompat() {
@@ -130,11 +144,87 @@ class AlarmFragment : PreferenceFragmentCompat() {
}
+ val testAlarmVolume: Preference? = findPreference("testAlarmVolume")
+ testAlarmVolume!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
+
+ // get previous state: if it's playing, we'll resume playing as multimedia; if it was stopped, we'll stop
+ val isPlayingMultimedia: Boolean = PlayerStore.instance.isPlaying.value ?: false
+
+ val builder1 = AlertDialog.Builder(requireContext())
+ builder1.setTitle(R.string.test_alarm_volume)
+ builder1.setMessage(R.string.popupTestAlarmVolume)
+ builder1.setCancelable(false)
+ builder1.setPositiveButton(
+ getString(R.string.finished)
+ ) { dialog, _ ->
+ // put the radio back to media sound, or off if it was off.
+ if (isPlayingMultimedia)
+ {
+ actionOnService(Actions.PLAY)
+ } else {
+ actionOnService(Actions.STOP)
+ }
+ dialog.cancel()
+ }
+
+ val adjustAlarmVolume: (Int) -> Unit = debounce(50, coroutineContext) {
+ val keyCode = it
+
+ val audioManager = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
+ val currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM)
+ val minVolume = 0 // audioManager.getStreamMinVolume(AudioManager.STREAM_ALARM) <- require API28+
+ val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM)
+ Log.d(tag, "current, max = $currentVolume, $maxVolume")
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
+ audioManager.setStreamVolume(AudioManager.STREAM_ALARM, max(currentVolume - 1, minVolume), AudioManager.FLAG_SHOW_UI)
+
+ } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
+ audioManager.setStreamVolume(AudioManager.STREAM_ALARM, min(currentVolume + 1, maxVolume), AudioManager.FLAG_SHOW_UI)
+ }
+
+ }
+
+ builder1.setOnKeyListener { dialogInterface, i, event ->
+ adjustAlarmVolume(i)
+ true
+ }
+
+ val alert11 = builder1.create()
+
+ // start as alarm
+ actionOnService(Actions.PLAY_OR_FALLBACK)
+
+ alert11.show()
+
+ true
+ }
+
alarmDays?.isEnabled = isWakingUp?.isChecked ?: false
timeSet?.isEnabled = isWakingUp?.isChecked ?: false
snoozeDuration?.isEnabled = isWakingUp?.isChecked ?: false
}
+ private fun actionOnService (a: Actions) {
+ // start as alarm
+ val i = Intent(requireContext(), RadioService::class.java)
+ i.putExtra("action", a.name)
+ requireContext().startService(i)
+ }
+
+ private fun debounce(delayMs: Long = 500L,
+ coroutineContext: CoroutineContext,
+ f: (T) -> Unit): (T) -> Unit {
+ var debounceJob: Job? = null
+ return { param: T ->
+ if (debounceJob?.isCompleted != false) {
+ debounceJob = CoroutineScope(coroutineContext).launch {
+ delay(delayMs)
+ f(param)
+ }
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index c2e04af..9e99285 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -56,5 +56,9 @@
Raffraîchir les données
\"Play\" au branchement de la prise casque
Paramètres
+ Tester et ajuster le volume de l\'alarme
+ Touchez pour écouter et régler le volume
+ La radio est à présent lancée en mode alarme. Ajustez le volume avec les boutons de volume de votre appareil.
+ Terminé
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3847fed..ee12429 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -76,5 +76,9 @@
Refresh data
Auto play when plugging headphones
Settings
+ Test and change alarm volume
+ Touch this to listen to the alarm volume and set it up
+ The radio stream is now started in alarm mode. Adjust the volume with the volume buttons on your device.
+ Done
diff --git a/app/src/main/res/xml/alarm_preferences.xml b/app/src/main/res/xml/alarm_preferences.xml
index 625ee4c..75c5abf 100644
--- a/app/src/main/res/xml/alarm_preferences.xml
+++ b/app/src/main/res/xml/alarm_preferences.xml
@@ -37,4 +37,10 @@
android:summary="%s"
/>
+
+
\ No newline at end of file
From 0b7b5dd2f1a8c5501c5fb6d17ad140e9147c8c51 Mon Sep 17 00:00:00 2001
From: yattoz <12408848+yattoz@users.noreply.github.com>
Date: Wed, 5 Aug 2020 17:55:52 +0200
Subject: [PATCH 3/9] added slider for alarm volume
---
app/build.gradle | 4 +-
.../fr/forum_thalie/tsumugi/RadioService.kt | 15 +-
.../tsumugi/alarm/RadioAlarmExtensions.kt | 33 -----
.../preferences/AlarmAdjustVolumeFragment.kt | 129 ++++++++++++++++++
.../tsumugi/preferences/AlarmFragment.kt | 78 -----------
.../ui/nowplaying/NowPlayingFragment.kt | 6 +-
app/src/main/res/values-fr/strings.xml | 6 +-
app/src/main/res/values/strings.xml | 5 +-
.../xml/alarm_adjust_volume_preferences.xml | 23 ++++
app/src/main/res/xml/alarm_preferences.xml | 7 +-
10 files changed, 180 insertions(+), 126 deletions(-)
delete mode 100644 app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt
create mode 100644 app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmAdjustVolumeFragment.kt
create mode 100644 app/src/main/res/xml/alarm_adjust_volume_preferences.xml
diff --git a/app/build.gradle b/app/build.gradle
index 4a6df77..3a24669 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -29,8 +29,8 @@ android {
applicationId "fr.forum_thalie.tsumugi"
minSdkVersion 16
targetSdkVersion 30
- versionCode 115
- versionName "1.1.5"
+ versionCode 116
+ versionName "1.1.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt b/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt
index c98f641..ccbb25a 100644
--- a/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt
@@ -454,12 +454,13 @@ class RadioService : MediaBrowserServiceCompat() {
// this function is playing the stream if available, or a default sound if there's a problem.
private fun beginPlayingOrFallback()
{
- PlayerStore.instance.volume.value = 100 // we set the max volume for exoPlayer to be sure it rings correctly.
+ PlayerStore.instance.volume.value = PreferenceManager.getDefaultSharedPreferences(this).getInt("alarmVolume", 100)
+ // we set the max volume for exoPlayer to be sure it rings correctly.
beginPlaying(isRinging = true, isFallback = false)
val wait: (Any?) -> Any = {
/*
Here we lower the isAlarmStopped flag and we wait for 17s. (seems like 12 could be a bit too short since I increased the buffer!!)
- If the player stops the alarm (by calling an intent), the isAlarmStopped flag will be raised.
+ If the user stops the alarm (by calling an intent), the isAlarmStopped flag will be raised.
*/
isAlarmStopped = false // reset the flag
var i = 0
@@ -513,8 +514,11 @@ class RadioService : MediaBrowserServiceCompat() {
return
}
- if (mediaSession.controller.playbackState.state == PlaybackStateCompat.STATE_PLAYING && !isRinging)
- return // nothing to do here
+ // TODO: Remove this
+ if (mediaSession.controller.playbackState.state == PlaybackStateCompat.STATE_PLAYING && !isRinging && isAlarmStopped)
+ return // nothing to do here
+ isAlarmStopped = true
+
PlayerStore.instance.playbackState.value = PlaybackStateCompat.STATE_PLAYING
// Reinitialize media player. Otherwise the playback doesn't resume when beginPlaying. Dunno why.
@@ -554,8 +558,7 @@ class RadioService : MediaBrowserServiceCompat() {
if (mediaSession.controller.playbackState.state == PlaybackStateCompat.STATE_STOPPED)
return // nothing to do here
- if (PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_PLAYING)
- isAlarmStopped = true
+ isAlarmStopped = true
PlayerStore.instance.playbackState.value = PlaybackStateCompat.STATE_STOPPED
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt b/app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt
deleted file mode 100644
index 23131df..0000000
--- a/app/src/main/java/fr/forum_thalie/tsumugi/alarm/RadioAlarmExtensions.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package fr.forum_thalie.tsumugi.alarm
-
-import android.content.Context
-import android.content.Intent
-import fr.forum_thalie.tsumugi.Actions
-import fr.forum_thalie.tsumugi.RadioService
-
-
-fun playOnFallback(c: Context) {
- val a = Actions.PLAY_OR_FALLBACK
- val i = Intent(c, RadioService::class.java)
- i.putExtra("action", a.name)
- c.startService(i)
-}
-
-fun resume(c: Context)
-{
-
-}
-
-fun resumeStop(c: Context) {
- val a = Actions.PLAY
- val i = Intent(c, RadioService::class.java)
- i.putExtra("action", a.name)
- c.startService(i)
-}
-
-fun resumePlay(c: Context) {
- val a = Actions.PLAY
- val i = Intent(c, RadioService::class.java)
- i.putExtra("action", a.name)
- c.startService(i)
-}
\ No newline at end of file
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmAdjustVolumeFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmAdjustVolumeFragment.kt
new file mode 100644
index 0000000..aba0b8a
--- /dev/null
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmAdjustVolumeFragment.kt
@@ -0,0 +1,129 @@
+package fr.forum_thalie.tsumugi.preferences
+
+import android.content.Context
+import android.content.Intent
+import android.media.AudioManager
+import android.os.Bundle
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
+import androidx.preference.PreferenceFragmentCompat
+import androidx.preference.PreferenceManager
+import androidx.preference.SeekBarPreference
+import androidx.preference.SwitchPreferenceCompat
+import fr.forum_thalie.tsumugi.Actions
+import fr.forum_thalie.tsumugi.R
+import fr.forum_thalie.tsumugi.RadioService
+import fr.forum_thalie.tsumugi.playerstore.PlayerStore
+import kotlinx.coroutines.*
+import kotlin.coroutines.CoroutineContext
+import kotlin.math.max
+import kotlin.math.min
+
+
+class AlarmAdjustVolumeFragment : PreferenceFragmentCompat() {
+ override fun onAttach(context: Context) {
+ (activity as AppCompatActivity).supportActionBar?.title = context.getString(R.string.test_alarm_volume)
+ super.onAttach(context)
+ }
+
+ // get previous state: if it's playing, we'll resume playing as multimedia; if it was stopped, we'll stop
+ private var isPlayingMultimedia: Boolean = PlayerStore.instance.isPlaying.value ?: false
+
+ override fun onStop() {
+ if (isPlayingMultimedia)
+ {
+ actionOnService(Actions.PLAY)
+ } else {
+ actionOnService(Actions.PAUSE)
+ }
+ PlayerStore.instance.volume.value = PreferenceManager.getDefaultSharedPreferences(requireContext()).getInt("volume", 100)
+ super.onStop()
+ }
+
+ override fun onResume() {
+
+ isPlayingMultimedia = PlayerStore.instance.isPlaying.value ?: false
+ // start as alarm
+ actionOnService(Actions.PLAY_OR_FALLBACK)
+ super.onResume()
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ fun debounce(delayMs: Long = 500L,
+ coroutineContext: CoroutineContext,
+ f: (T) -> Unit): (T) -> Unit {
+ var debounceJob: Job? = null
+ return { param: T ->
+ if (debounceJob?.isCompleted != false) {
+ debounceJob = CoroutineScope(coroutineContext).launch {
+ delay(delayMs)
+ f(param)
+ }
+ }
+ }
+ }
+
+ val adjustAlarmVolume: (Int) -> Unit = debounce(50, GlobalScope.coroutineContext) {
+ android.util.Log.d(tag, "button $it pushed")
+ val keyCode = it
+ val audioManager = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
+ audioManager.apply {
+ val currentVolume = this.getStreamVolume(AudioManager.STREAM_ALARM)
+ val minVolume = 0 // audioManager.getStreamMinVolume(AudioManager.STREAM_ALARM) <- require API28+
+ val maxVolume = this.getStreamMaxVolume(AudioManager.STREAM_ALARM)
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
+ this.setStreamVolume(AudioManager.STREAM_ALARM, max(currentVolume - 1, minVolume), AudioManager.FLAG_SHOW_UI)
+
+ } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
+ this.setStreamVolume(AudioManager.STREAM_ALARM, min(currentVolume + 1, maxVolume), AudioManager.FLAG_SHOW_UI)
+ } else {
+
+ }
+ }
+
+ }
+ view.isFocusableInTouchMode = true;
+ view.requestFocus();
+ view.setOnKeyListener { _, i, event ->
+ if (i == KeyEvent.KEYCODE_VOLUME_DOWN || i == KeyEvent.KEYCODE_VOLUME_UP) {
+ adjustAlarmVolume(i)
+ true
+ } else {
+ false
+ }
+ }
+ }
+
+ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ setPreferencesFromResource(R.xml.alarm_adjust_volume_preferences, rootKey)
+
+ val alarmVolumeSeekBar = findPreference("alarmVolume")
+ alarmVolumeSeekBar?.apply {
+ min = 0
+ max = 100
+ updatesContinuously = true
+ setOnPreferenceChangeListener { _, newValue ->
+ actionOnService(Actions.VOLUME, newValue as Int)
+ true
+ }
+ }
+
+ }
+
+
+ private fun actionOnService(a: Actions, v: Int = 0)
+ {
+ val i = Intent(requireContext(), RadioService::class.java)
+ i.putExtra("action", a.name)
+ i.putExtra("value", v)
+ //[REMOVE LOG CALLS]Log.d(tag, "Sending intent ${a.name}")
+ requireContext().startService(i)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt
index cfd55cc..ceb2a38 100644
--- a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt
@@ -143,88 +143,10 @@ class AlarmFragment : PreferenceFragmentCompat() {
true
}
-
- val testAlarmVolume: Preference? = findPreference("testAlarmVolume")
- testAlarmVolume!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
-
- // get previous state: if it's playing, we'll resume playing as multimedia; if it was stopped, we'll stop
- val isPlayingMultimedia: Boolean = PlayerStore.instance.isPlaying.value ?: false
-
- val builder1 = AlertDialog.Builder(requireContext())
- builder1.setTitle(R.string.test_alarm_volume)
- builder1.setMessage(R.string.popupTestAlarmVolume)
- builder1.setCancelable(false)
- builder1.setPositiveButton(
- getString(R.string.finished)
- ) { dialog, _ ->
- // put the radio back to media sound, or off if it was off.
- if (isPlayingMultimedia)
- {
- actionOnService(Actions.PLAY)
- } else {
- actionOnService(Actions.STOP)
- }
- dialog.cancel()
- }
-
- val adjustAlarmVolume: (Int) -> Unit = debounce(50, coroutineContext) {
- val keyCode = it
-
- val audioManager = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
- val currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM)
- val minVolume = 0 // audioManager.getStreamMinVolume(AudioManager.STREAM_ALARM) <- require API28+
- val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM)
- Log.d(tag, "current, max = $currentVolume, $maxVolume")
- if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
- audioManager.setStreamVolume(AudioManager.STREAM_ALARM, max(currentVolume - 1, minVolume), AudioManager.FLAG_SHOW_UI)
-
- } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
- audioManager.setStreamVolume(AudioManager.STREAM_ALARM, min(currentVolume + 1, maxVolume), AudioManager.FLAG_SHOW_UI)
- }
-
- }
-
- builder1.setOnKeyListener { dialogInterface, i, event ->
- adjustAlarmVolume(i)
- true
- }
-
- val alert11 = builder1.create()
-
- // start as alarm
- actionOnService(Actions.PLAY_OR_FALLBACK)
-
- alert11.show()
-
- true
- }
-
alarmDays?.isEnabled = isWakingUp?.isChecked ?: false
timeSet?.isEnabled = isWakingUp?.isChecked ?: false
snoozeDuration?.isEnabled = isWakingUp?.isChecked ?: false
}
- private fun actionOnService (a: Actions) {
- // start as alarm
- val i = Intent(requireContext(), RadioService::class.java)
- i.putExtra("action", a.name)
- requireContext().startService(i)
- }
-
- private fun debounce(delayMs: Long = 500L,
- coroutineContext: CoroutineContext,
- f: (T) -> Unit): (T) -> Unit {
- var debounceJob: Job? = null
- return { param: T ->
- if (debounceJob?.isCompleted != false) {
- debounceJob = CoroutineScope(coroutineContext).launch {
- delay(delayMs)
- f(param)
- }
- }
- }
- }
-
-
}
\ No newline at end of file
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingFragment.kt
index 1e306ac..fdb24c1 100644
--- a/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingFragment.kt
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingFragment.kt
@@ -166,10 +166,10 @@ class NowPlayingFragment : Fragment() {
}
})
-
- seekBarVolume.setOnSeekBarChangeListener(nowPlayingViewModel.seekBarChangeListener)
seekBarVolume.progress = PlayerStore.instance.volume.value!!
- progressBar.max = 1000
+ seekBarVolume.setOnSeekBarChangeListener(nowPlayingViewModel.seekBarChangeListener)
+
+ progressBar.max = 100
progressBar.progress = 0
syncPlayPauseButtonImage(root)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 9e99285..6650dd4 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -58,7 +58,11 @@
Paramètres
Tester et ajuster le volume de l\'alarme
Touchez pour écouter et régler le volume
- La radio est à présent lancée en mode alarme. Ajustez le volume avec les boutons de volume de votre appareil.
+ La radio est à présent lancée en mode alarme. Ajustez le volume avec les boutons de volume de votre appareil. Vous pouvez faire un réglage plus fin du volume avec la réglette ci-dessous.
Terminé
+ Ajuster le volume de l\'alarme
+ Régler le volume de l\'alarme
+ Volume de l\'alarme
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ee12429..8fcad32 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -78,7 +78,10 @@
Settings
Test and change alarm volume
Touch this to listen to the alarm volume and set it up
- The radio stream is now started in alarm mode. Adjust the volume with the volume buttons on your device.
+ The radio stream is now started in alarm mode. Adjust the volume with the volume buttons on your device. You can make a finer adjustment of the volume with the slider below.
Done
+ Adjust alarm volume
+ Set up alarm volume
+ Alarm volume
diff --git a/app/src/main/res/xml/alarm_adjust_volume_preferences.xml b/app/src/main/res/xml/alarm_adjust_volume_preferences.xml
new file mode 100644
index 0000000..7e336af
--- /dev/null
+++ b/app/src/main/res/xml/alarm_adjust_volume_preferences.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/alarm_preferences.xml b/app/src/main/res/xml/alarm_preferences.xml
index 75c5abf..cfd50d6 100644
--- a/app/src/main/res/xml/alarm_preferences.xml
+++ b/app/src/main/res/xml/alarm_preferences.xml
@@ -38,9 +38,12 @@
/>
+ android:summary="@string/test_alarm_volume_summary"
+ app:icon="@drawable/ic_volume_high"
+ app:fragment="fr.forum_thalie.tsumugi.preferences.AlarmAdjustVolumeFragment"
+ />
\ No newline at end of file
From e3f1508b50815aca47c083ce81fdd6760c24e146 Mon Sep 17 00:00:00 2001
From: yattoz <12408848+yattoz@users.noreply.github.com>
Date: Sat, 8 Aug 2020 20:33:22 +0200
Subject: [PATCH 4/9] updated gradle, maybe fixed fallback issue
---
app/build.gradle | 2 +-
.../java/fr/forum_thalie/tsumugi/RadioService.kt | 13 +++++--------
app/src/main/res/drawable/none.xml | 4 ++++
app/src/main/res/values/styles.xml | 10 ++++++++--
app/src/main/res/xml/preferences.xml | 5 ++---
build.gradle | 4 ++--
gradle/wrapper/gradle-wrapper.properties | 4 ++--
7 files changed, 24 insertions(+), 18 deletions(-)
create mode 100644 app/src/main/res/drawable/none.xml
diff --git a/app/build.gradle b/app/build.gradle
index 3a24669..0acdf31 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,7 +17,7 @@ configurations.all {
android {
compileSdkVersion 30
- buildToolsVersion "30.0.0"
+ buildToolsVersion "30.0.1"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt b/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt
index ccbb25a..d89e00e 100644
--- a/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt
+++ b/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt
@@ -499,6 +499,7 @@ class RadioService : MediaBrowserServiceCompat() {
.setUsage(C.USAGE_ALARM)
.build()
} else {
+ isAlarmStopped = true // if we're not ringing and it tries playing, it means the user opened the app somehow
audioAttributes.setUsage(AudioAttributesCompat.USAGE_MEDIA)
audioFocusRequestBuilder.setAudioAttributes(audioAttributes.build())
audioFocusRequest = audioFocusRequestBuilder.build()
@@ -514,11 +515,6 @@ class RadioService : MediaBrowserServiceCompat() {
return
}
- // TODO: Remove this
- if (mediaSession.controller.playbackState.state == PlaybackStateCompat.STATE_PLAYING && !isRinging && isAlarmStopped)
- return // nothing to do here
- isAlarmStopped = true
-
PlayerStore.instance.playbackState.value = PlaybackStateCompat.STATE_PLAYING
// Reinitialize media player. Otherwise the playback doesn't resume when beginPlaying. Dunno why.
@@ -534,7 +530,6 @@ class RadioService : MediaBrowserServiceCompat() {
}
// START PLAYBACK, LET'S ROCK
- player.playWhenReady = true
nowPlayingNotification.update(this, isUpdatingNotificationButton = true, isRinging = isRinging)
playbackStateBuilder.setState(
@@ -544,6 +539,8 @@ class RadioService : MediaBrowserServiceCompat() {
SystemClock.elapsedRealtime()
)
mediaSession.setPlaybackState(playbackStateBuilder.build())
+ player.playWhenReady = true
+
//[REMOVE LOG CALLS]Log.d(tag, radioTag + "begin playing")
}
@@ -557,8 +554,8 @@ class RadioService : MediaBrowserServiceCompat() {
{
if (mediaSession.controller.playbackState.state == PlaybackStateCompat.STATE_STOPPED)
return // nothing to do here
-
- isAlarmStopped = true
+ if (PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_PLAYING)
+ isAlarmStopped = true
PlayerStore.instance.playbackState.value = PlaybackStateCompat.STATE_STOPPED
diff --git a/app/src/main/res/drawable/none.xml b/app/src/main/res/drawable/none.xml
new file mode 100644
index 0000000..a8b409b
--- /dev/null
+++ b/app/src/main/res/drawable/none.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index fcdcb13..96c951a 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -11,8 +11,14 @@
- @color/colorPrimaryDark
-