From 2c0ad467a105f1fa8a57a3d682feb3fd36cc3931 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 5 Mar 2018 21:32:51 +0100 Subject: [PATCH] allow changing the alarm sound --- .../clock/dialogs/EditAlarmDialog.kt | 6 +- .../clock/dialogs/SelectAlarmSoundDialog.kt | 58 +++++++++++++++++++ .../clock/extensions/Context.kt | 11 +++- .../clock/models/AlarmSound.kt | 3 + .../res/layout/dialog_select_alarm_sound.xml | 16 +++++ app/src/main/res/layout/item_select_alarm.xml | 8 +++ 6 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/clock/models/AlarmSound.kt create mode 100644 app/src/main/res/layout/dialog_select_alarm_sound.xml create mode 100644 app/src/main/res/layout/item_select_alarm.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt index b55958d0..405519dc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt @@ -27,7 +27,11 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba colorLeftDrawable(edit_alarm_sound) edit_alarm_sound.text = alarm.soundTitle edit_alarm_sound.setOnClickListener { - + SelectAlarmSoundDialog(activity, alarm.soundUri) { + alarm.soundTitle = it.title + alarm.soundUri = it.uri + edit_alarm_sound.text = it.title + } } colorLeftDrawable(edit_alarm_vibrate) diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt new file mode 100644 index 00000000..afa771d1 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt @@ -0,0 +1,58 @@ +package com.simplemobiletools.clock.dialogs + +import android.media.AudioManager +import android.media.MediaPlayer +import android.net.Uri +import android.support.v7.app.AlertDialog +import android.view.ViewGroup +import android.widget.RadioButton +import android.widget.RadioGroup +import com.simplemobiletools.clock.R +import com.simplemobiletools.clock.activities.SimpleActivity +import com.simplemobiletools.clock.extensions.getAlarms +import com.simplemobiletools.clock.models.AlarmSound +import com.simplemobiletools.commons.extensions.setupDialogStuff +import kotlinx.android.synthetic.main.dialog_select_alarm_sound.view.* + +class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: String, val callback: (alarmSound: AlarmSound) -> Unit) { + private val view = activity.layoutInflater.inflate(R.layout.dialog_select_alarm_sound, null) + private val alarms = activity.getAlarms() + private var mediaPlayer = MediaPlayer() + + init { + view.dialog_select_alarm_radio.apply { + alarms.forEachIndexed { index, alarmSound -> + val radioButton = (activity.layoutInflater.inflate(R.layout.item_select_alarm, null) as RadioButton).apply { + text = alarmSound.title + isChecked = alarmSound.uri == currentUri + id = index + setOnClickListener { + mediaPlayer.stop() + mediaPlayer = MediaPlayer().apply { + setAudioStreamType(AudioManager.STREAM_ALARM) + setDataSource(context, Uri.parse(alarmSound.uri)) + prepare() + start() + } + } + } + + addView(radioButton, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) + } + } + + AlertDialog.Builder(activity) + .setOnDismissListener { mediaPlayer.stop() } + .setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() }) + .setNegativeButton(R.string.cancel, null) + .create().apply { + activity.setupDialogStuff(view, this) + window.volumeControlStream = AudioManager.STREAM_ALARM + } + } + + private fun dialogConfirmed() { + val checkedId = view.dialog_select_alarm_radio.checkedRadioButtonId + callback(alarms[checkedId]) + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt index 0adc9597..98fcac84 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt @@ -6,6 +6,7 @@ import android.net.Uri import com.simplemobiletools.clock.R import com.simplemobiletools.clock.helpers.* import com.simplemobiletools.clock.models.Alarm +import com.simplemobiletools.clock.models.AlarmSound import com.simplemobiletools.clock.models.MyTimeZone import java.util.* @@ -49,16 +50,20 @@ fun Context.getAllTimeZonesModified(): ArrayList { fun Context.getModifiedTimeZoneTitle(id: Int) = getAllTimeZonesModified().firstOrNull { it.id == id }?.title ?: getDefaultTimeZoneTitle(id) -fun Context.getAlarms(): Map { +fun Context.getAlarms(): ArrayList { val manager = RingtoneManager(this) manager.setType(RingtoneManager.TYPE_ALARM) val cursor = manager.cursor - val alarms = HashMap() + val alarms = ArrayList() + val defaultAlarm = AlarmSound(getDefaultAlarmTitle(this), getDefaultAlarmUri().toString()) + alarms.add(defaultAlarm) + while (cursor.moveToNext()) { val title = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX) val uri = Uri.parse("${cursor.getString(RingtoneManager.URI_COLUMN_INDEX)}/${cursor.getString(RingtoneManager.ID_COLUMN_INDEX)}").toString() - alarms[title] = uri + val alarmSound = AlarmSound(title, uri) + alarms.add(alarmSound) } return alarms diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/models/AlarmSound.kt b/app/src/main/kotlin/com/simplemobiletools/clock/models/AlarmSound.kt new file mode 100644 index 00000000..26874646 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/clock/models/AlarmSound.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.clock.models + +data class AlarmSound(var title: String, var uri: String) diff --git a/app/src/main/res/layout/dialog_select_alarm_sound.xml b/app/src/main/res/layout/dialog_select_alarm_sound.xml new file mode 100644 index 00000000..cf6c6130 --- /dev/null +++ b/app/src/main/res/layout/dialog_select_alarm_sound.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/layout/item_select_alarm.xml b/app/src/main/res/layout/item_select_alarm.xml new file mode 100644 index 00000000..0fcd2753 --- /dev/null +++ b/app/src/main/res/layout/item_select_alarm.xml @@ -0,0 +1,8 @@ + +