added button to test and adjust alarm volume.

remotes/origin/devel
yattoz 2020-08-05 11:49:20 +02:00
parent a180288d4f
commit 99ab795320
10 changed files with 173 additions and 8 deletions

View File

@ -1,8 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<AndroidXmlCodeStyleSettings>
<option name="ARRANGEMENT_SETTINGS_MIGRATED_TO_191" value="true" />
</AndroidXmlCodeStyleSettings>
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>

View File

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
@ -12,7 +14,6 @@
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="testRunner" value="PLATFORM" />
</GradleProjectSettings>
</option>
</component>

30
.idea/jarRepositories.xml Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://jitpack.io" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
</component>
</project>

View File

@ -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"

View File

@ -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

View File

@ -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)
}

View File

@ -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<Int>(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 <T> 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)
}
}
}
}
}

View File

@ -56,5 +56,9 @@
<string name="action_refresh">Raffraîchir les données</string>
<string name="autoPlay">\"Play\" au branchement de la prise casque</string>
<string name="settings">Paramètres</string>
<string name="test_alarm_volume">Tester et ajuster le volume de l\'alarme</string>
<string name="test_alarm_volume_summary">Touchez pour écouter et régler le volume</string>
<string name="popupTestAlarmVolume">La radio est à présent lancée en mode alarme. Ajustez le volume avec les boutons de volume de votre appareil.</string>
<string name="finished">Terminé</string>
</resources>

View File

@ -76,5 +76,9 @@
<string name="action_refresh">Refresh data</string>
<string name="autoPlay">Auto play when plugging headphones</string>
<string name="settings">Settings</string>
<string name="test_alarm_volume">Test and change alarm volume</string>
<string name="test_alarm_volume_summary">Touch this to listen to the alarm volume and set it up</string>
<string name="popupTestAlarmVolume">The radio stream is now started in alarm mode. Adjust the volume with the volume buttons on your device.</string>
<string name="finished">Done</string>
</resources>

View File

@ -37,4 +37,10 @@
android:summary="%s"
/>
<Preference
app:iconSpaceReserved="false"
android:key="testAlarmVolume"
android:title="@string/test_alarm_volume"
android:summary="@string/test_alarm_volume_summary" />
</PreferenceScreen>