mirror of
https://github.com/SimpleMobileTools/Simple-Clock.git
synced 2025-06-05 22:19:17 +02:00
fix #14, request storage permission at alarm picker if necessary
This commit is contained in:
@ -7,6 +7,7 @@
|
|||||||
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
|
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
|
||||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.USE_FINGERPRINT"
|
android:name="android.permission.USE_FINGERPRINT"
|
||||||
|
@ -4,28 +4,48 @@ import android.media.MediaPlayer
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.support.v7.app.AlertDialog
|
import android.support.v7.app.AlertDialog
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.RadioButton
|
|
||||||
import android.widget.RadioGroup
|
import android.widget.RadioGroup
|
||||||
import com.simplemobiletools.clock.R
|
import com.simplemobiletools.clock.R
|
||||||
import com.simplemobiletools.clock.activities.SimpleActivity
|
import com.simplemobiletools.clock.activities.SimpleActivity
|
||||||
|
import com.simplemobiletools.clock.extensions.config
|
||||||
import com.simplemobiletools.clock.extensions.getAlarms
|
import com.simplemobiletools.clock.extensions.getAlarms
|
||||||
import com.simplemobiletools.clock.models.AlarmSound
|
import com.simplemobiletools.clock.models.AlarmSound
|
||||||
|
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
|
||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
|
import com.simplemobiletools.commons.views.MyCompatRadioButton
|
||||||
import kotlinx.android.synthetic.main.dialog_select_alarm_sound.view.*
|
import kotlinx.android.synthetic.main.dialog_select_alarm_sound.view.*
|
||||||
|
|
||||||
class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: String, val audioStream: Int, val callback: (alarmSound: AlarmSound?) -> Unit) {
|
class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: String, val audioStream: Int, val callback: (alarmSound: AlarmSound?) -> Unit) {
|
||||||
private val view = activity.layoutInflater.inflate(R.layout.dialog_select_alarm_sound, null)
|
private val view = activity.layoutInflater.inflate(R.layout.dialog_select_alarm_sound, null)
|
||||||
private val alarms = activity.getAlarms()
|
private var alarms = ArrayList<AlarmSound>()
|
||||||
private var mediaPlayer = MediaPlayer()
|
private var mediaPlayer = MediaPlayer()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
activity.getAlarms {
|
||||||
|
alarms = it
|
||||||
|
gotAlarms()
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = audioStream
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun gotAlarms() {
|
||||||
|
val config = activity.config
|
||||||
view.dialog_select_alarm_radio.apply {
|
view.dialog_select_alarm_radio.apply {
|
||||||
alarms.forEachIndexed { index, alarmSound ->
|
alarms.forEachIndexed { index, alarmSound ->
|
||||||
val radioButton = (activity.layoutInflater.inflate(R.layout.item_select_alarm, null) as RadioButton).apply {
|
val radioButton = (activity.layoutInflater.inflate(R.layout.item_select_alarm, null) as MyCompatRadioButton).apply {
|
||||||
text = alarmSound.title
|
text = alarmSound.title
|
||||||
isChecked = alarmSound.uri == currentUri
|
isChecked = alarmSound.uri == currentUri
|
||||||
id = index
|
id = index
|
||||||
|
setColors(config.textColor, activity.getAdjustedPrimaryColor(), config.backgroundColor)
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
try {
|
try {
|
||||||
mediaPlayer.stop()
|
mediaPlayer.stop()
|
||||||
@ -45,15 +65,6 @@ class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: Strin
|
|||||||
addView(radioButton, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
|
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 = audioStream
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun dialogConfirmed() {
|
private fun dialogConfirmed() {
|
||||||
|
@ -4,7 +4,9 @@ import android.app.Activity
|
|||||||
import android.media.RingtoneManager
|
import android.media.RingtoneManager
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import com.simplemobiletools.clock.models.AlarmSound
|
import com.simplemobiletools.clock.models.AlarmSound
|
||||||
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_STORAGE
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
fun Activity.showOverLockscreen() {
|
fun Activity.showOverLockscreen() {
|
||||||
@ -14,7 +16,7 @@ fun Activity.showOverLockscreen() {
|
|||||||
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.getAlarms(): ArrayList<AlarmSound> {
|
fun BaseSimpleActivity.getAlarms(callback: (ArrayList<AlarmSound>) -> Unit) {
|
||||||
val alarms = ArrayList<AlarmSound>()
|
val alarms = ArrayList<AlarmSound>()
|
||||||
val manager = RingtoneManager(this)
|
val manager = RingtoneManager(this)
|
||||||
manager.setType(RingtoneManager.TYPE_ALARM)
|
manager.setType(RingtoneManager.TYPE_ALARM)
|
||||||
@ -34,9 +36,20 @@ fun Activity.getAlarms(): ArrayList<AlarmSound> {
|
|||||||
val alarmSound = AlarmSound(title, uri)
|
val alarmSound = AlarmSound(title, uri)
|
||||||
alarms.add(alarmSound)
|
alarms.add(alarmSound)
|
||||||
}
|
}
|
||||||
|
callback(alarms)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
showErrorToast(e)
|
if (e is SecurityException) {
|
||||||
|
handlePermission(PERMISSION_READ_STORAGE) {
|
||||||
|
if (it) {
|
||||||
|
getAlarms(callback)
|
||||||
|
} else {
|
||||||
|
showErrorToast(e)
|
||||||
|
callback(ArrayList())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
showErrorToast(e)
|
||||||
|
callback(ArrayList())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return alarms
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user