adding the alarm sound picker dialog from Commons
This commit is contained in:
parent
b43f63a142
commit
c9146b10af
5 changed files with 47 additions and 71 deletions
|
@ -46,11 +46,10 @@ ext {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.simplemobiletools:commons:3.17.5'
|
implementation 'com.simplemobiletools:commons:3.17.13'
|
||||||
implementation 'joda-time:joda-time:2.9.9'
|
implementation 'joda-time:joda-time:2.9.9'
|
||||||
implementation 'com.facebook.stetho:stetho:1.5.0'
|
implementation 'com.facebook.stetho:stetho:1.5.0'
|
||||||
implementation 'com.android.support:multidex:1.0.3'
|
implementation 'com.android.support:multidex:1.0.3'
|
||||||
implementation 'com.google.code.gson:gson:2.8.2'
|
|
||||||
|
|
||||||
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion"
|
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion"
|
||||||
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
|
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
|
||||||
|
|
|
@ -2,12 +2,9 @@ package com.simplemobiletools.calendar.activities
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.media.RingtoneManager
|
import android.media.AudioManager
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Parcelable
|
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import com.simplemobiletools.calendar.BuildConfig
|
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.dialogs.SelectCalendarsDialog
|
import com.simplemobiletools.calendar.dialogs.SelectCalendarsDialog
|
||||||
import com.simplemobiletools.calendar.extensions.*
|
import com.simplemobiletools.calendar.extensions.*
|
||||||
|
@ -19,12 +16,14 @@ import com.simplemobiletools.calendar.models.EventType
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.CustomIntervalPickerDialog
|
import com.simplemobiletools.commons.dialogs.CustomIntervalPickerDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
|
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_NOTIFICATION
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALENDAR
|
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALENDAR
|
||||||
|
import com.simplemobiletools.commons.models.AlarmSound
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
import kotlinx.android.synthetic.main.activity_settings.*
|
import kotlinx.android.synthetic.main.activity_settings.*
|
||||||
import java.io.File
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class SettingsActivity : SimpleActivity() {
|
class SettingsActivity : SimpleActivity() {
|
||||||
|
@ -276,28 +275,28 @@ class SettingsActivity : SimpleActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupReminderSound() {
|
private fun setupReminderSound() {
|
||||||
val noRingtone = res.getString(R.string.no_ringtone_selected)
|
settings_reminder_sound.text = config.reminderSoundTitle
|
||||||
if (config.reminderSound.isEmpty()) {
|
|
||||||
settings_reminder_sound.text = noRingtone
|
|
||||||
} else {
|
|
||||||
settings_reminder_sound.text = RingtoneManager.getRingtone(this, Uri.parse(config.reminderSound))?.getTitle(this) ?: noRingtone
|
|
||||||
}
|
|
||||||
|
|
||||||
settings_reminder_sound_holder.setOnClickListener {
|
settings_reminder_sound_holder.setOnClickListener {
|
||||||
Intent(RingtoneManager.ACTION_RINGTONE_PICKER).apply {
|
SelectAlarmSoundDialog(this, config.reminderSoundUri, AudioManager.STREAM_NOTIFICATION, GET_RINGTONE_URI, ALARM_SOUND_TYPE_NOTIFICATION, onAlarmPicked = {
|
||||||
putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION)
|
if (it != null) {
|
||||||
putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, res.getString(R.string.reminder_sound))
|
updateReminderSound(it)
|
||||||
putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(config.reminderSound))
|
|
||||||
|
|
||||||
if (resolveActivity(packageManager) != null)
|
|
||||||
startActivityForResult(this, GET_RINGTONE_URI)
|
|
||||||
else {
|
|
||||||
toast(R.string.no_ringtone_picker)
|
|
||||||
}
|
}
|
||||||
}
|
}, onAlarmSoundDeleted = {
|
||||||
|
if (it.uri == config.reminderSoundUri) {
|
||||||
|
val defaultAlarm = getDefaultAlarmSound(ALARM_SOUND_TYPE_NOTIFICATION)
|
||||||
|
updateReminderSound(defaultAlarm)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateReminderSound(alarmSound: AlarmSound) {
|
||||||
|
config.reminderSoundTitle = alarmSound.title
|
||||||
|
config.reminderSoundUri = alarmSound.uri
|
||||||
|
settings_reminder_sound.text = alarmSound.title
|
||||||
|
}
|
||||||
|
|
||||||
private fun setupVibrate() {
|
private fun setupVibrate() {
|
||||||
settings_vibrate.isChecked = config.vibrateOnReminder
|
settings_vibrate.isChecked = config.vibrateOnReminder
|
||||||
settings_vibrate_holder.setOnClickListener {
|
settings_vibrate_holder.setOnClickListener {
|
||||||
|
@ -381,24 +380,10 @@ class SettingsActivity : SimpleActivity() {
|
||||||
})
|
})
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||||
if (resultCode == RESULT_OK) {
|
super.onActivityResult(requestCode, resultCode, resultData)
|
||||||
if (requestCode == GET_RINGTONE_URI) {
|
if (requestCode == GET_RINGTONE_URI && resultCode == RESULT_OK && resultData != null) {
|
||||||
var uri = resultData?.getParcelableExtra<Parcelable>(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
|
val newAlarmSound = storeNewYourAlarmSound(resultData)
|
||||||
|
updateReminderSound(newAlarmSound)
|
||||||
if (uri == null) {
|
|
||||||
config.reminderSound = ""
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
if ((uri as Uri).scheme == "file") {
|
|
||||||
uri = getFilePublicUri(File(uri.path), BuildConfig.APPLICATION_ID)
|
|
||||||
}
|
|
||||||
settings_reminder_sound.text = RingtoneManager.getRingtone(this, uri)?.getTitle(this)
|
|
||||||
config.reminderSound = uri.toString()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
showErrorToast(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.simplemobiletools.calendar.BuildConfig
|
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.activities.EventActivity
|
import com.simplemobiletools.calendar.activities.EventActivity
|
||||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||||
|
@ -38,7 +37,6 @@ import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
import org.joda.time.DateTimeZone
|
import org.joda.time.DateTimeZone
|
||||||
import org.joda.time.LocalDate
|
import org.joda.time.LocalDate
|
||||||
import java.io.File
|
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -163,17 +161,17 @@ fun Context.notifyEvent(event: Event) {
|
||||||
val timeRange = if (event.getIsAllDay()) getString(R.string.all_day) else getFormattedEventTime(startTime, endTime)
|
val timeRange = if (event.getIsAllDay()) getString(R.string.all_day) else getFormattedEventTime(startTime, endTime)
|
||||||
val descriptionOrLocation = if (config.replaceDescription) event.location else event.description
|
val descriptionOrLocation = if (config.replaceDescription) event.location else event.description
|
||||||
val content = "$displayedStartDate $timeRange $descriptionOrLocation".trim()
|
val content = "$displayedStartDate $timeRange $descriptionOrLocation".trim()
|
||||||
val notification = getNotification(applicationContext, pendingIntent, event, content)
|
val notification = getNotification(pendingIntent, event, content)
|
||||||
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
notificationManager.notify(event.id, notification)
|
notificationManager.notify(event.id, notification)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
private fun getNotification(context: Context, pendingIntent: PendingIntent, event: Event, content: String): Notification {
|
fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: String): Notification {
|
||||||
val channelId = "reminder_channel"
|
val channelId = "reminder_channel"
|
||||||
if (isOreoPlus()) {
|
if (isOreoPlus()) {
|
||||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
val name = context.resources.getString(R.string.event_reminders)
|
val name = resources.getString(R.string.event_reminders)
|
||||||
val importance = NotificationManager.IMPORTANCE_HIGH
|
val importance = NotificationManager.IMPORTANCE_HIGH
|
||||||
NotificationChannel(channelId, name, importance).apply {
|
NotificationChannel(channelId, name, importance).apply {
|
||||||
enableLights(true)
|
enableLights(true)
|
||||||
|
@ -183,15 +181,10 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var soundUri = Uri.parse(context.config.reminderSound)
|
val soundUri = Uri.parse(config.reminderSoundUri)
|
||||||
if (soundUri.scheme == "file") {
|
grantReadUriPermission(config.reminderSoundUri)
|
||||||
try {
|
|
||||||
soundUri = context.getFilePublicUri(File(soundUri.path), BuildConfig.APPLICATION_ID)
|
|
||||||
} catch (ignored: Exception) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val builder = NotificationCompat.Builder(context)
|
val builder = NotificationCompat.Builder(this)
|
||||||
.setContentTitle(event.title)
|
.setContentTitle(event.title)
|
||||||
.setContentText(content)
|
.setContentText(content)
|
||||||
.setSmallIcon(R.drawable.ic_calendar)
|
.setSmallIcon(R.drawable.ic_calendar)
|
||||||
|
@ -199,15 +192,15 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even
|
||||||
.setPriority(Notification.PRIORITY_HIGH)
|
.setPriority(Notification.PRIORITY_HIGH)
|
||||||
.setDefaults(Notification.DEFAULT_LIGHTS)
|
.setDefaults(Notification.DEFAULT_LIGHTS)
|
||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
.setSound(soundUri, AudioManager.STREAM_SYSTEM)
|
.setSound(soundUri, AudioManager.STREAM_NOTIFICATION)
|
||||||
.setChannelId(channelId)
|
.setChannelId(channelId)
|
||||||
.addAction(R.drawable.ic_snooze, context.getString(R.string.snooze), getSnoozePendingIntent(context, event))
|
.addAction(R.drawable.ic_snooze, getString(R.string.snooze), getSnoozePendingIntent(this, event))
|
||||||
|
|
||||||
if (isLollipopPlus()) {
|
if (isLollipopPlus()) {
|
||||||
builder.setVisibility(Notification.VISIBILITY_PUBLIC)
|
builder.setVisibility(Notification.VISIBILITY_PUBLIC)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (context.config.vibrateOnReminder) {
|
if (config.vibrateOnReminder) {
|
||||||
builder.setVibrate(longArrayOf(0, 300, 300, 300))
|
builder.setVibrate(longArrayOf(0, 300, 300, 300))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
package com.simplemobiletools.calendar.helpers
|
package com.simplemobiletools.calendar.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.media.RingtoneManager
|
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.extensions.scheduleCalDAVSync
|
import com.simplemobiletools.calendar.extensions.scheduleCalDAVSync
|
||||||
|
import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle
|
||||||
|
import com.simplemobiletools.commons.extensions.getDefaultAlarmUri
|
||||||
|
import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_NOTIFICATION
|
||||||
import com.simplemobiletools.commons.helpers.BaseConfig
|
import com.simplemobiletools.commons.helpers.BaseConfig
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -28,9 +30,13 @@ class Config(context: Context) : BaseConfig(context) {
|
||||||
get() = prefs.getBoolean(VIBRATE, false)
|
get() = prefs.getBoolean(VIBRATE, false)
|
||||||
set(vibrate) = prefs.edit().putBoolean(VIBRATE, vibrate).apply()
|
set(vibrate) = prefs.edit().putBoolean(VIBRATE, vibrate).apply()
|
||||||
|
|
||||||
var reminderSound: String
|
var reminderSoundUri: String
|
||||||
get() = prefs.getString(REMINDER_SOUND, getDefaultNotificationSound())
|
get() = prefs.getString(REMINDER_SOUND_URI, context.getDefaultAlarmUri(ALARM_SOUND_TYPE_NOTIFICATION).toString())
|
||||||
set(path) = prefs.edit().putString(REMINDER_SOUND, path).apply()
|
set(reminderSoundUri) = prefs.edit().putString(REMINDER_SOUND_URI, reminderSoundUri).apply()
|
||||||
|
|
||||||
|
var reminderSoundTitle: String
|
||||||
|
get() = prefs.getString(REMINDER_SOUND_TITLE, context.getDefaultAlarmTitle(ALARM_SOUND_TYPE_NOTIFICATION))
|
||||||
|
set(reminderSoundTitle) = prefs.edit().putString(REMINDER_SOUND_TITLE, reminderSoundTitle).apply()
|
||||||
|
|
||||||
var storedView: Int
|
var storedView: Int
|
||||||
get() = prefs.getInt(VIEW, MONTHLY_VIEW)
|
get() = prefs.getInt(VIEW, MONTHLY_VIEW)
|
||||||
|
@ -97,14 +103,6 @@ class Config(context: Context) : BaseConfig(context) {
|
||||||
displayEventTypes = currDisplayEventTypes
|
displayEventTypes = currDisplayEventTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getDefaultNotificationSound(): String {
|
|
||||||
return try {
|
|
||||||
RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION)?.toString() ?: ""
|
|
||||||
} catch (e: Exception) {
|
|
||||||
""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getFontSize() = when (fontSize) {
|
fun getFontSize() = when (fontSize) {
|
||||||
FONT_SIZE_SMALL -> getSmallFontSize()
|
FONT_SIZE_SMALL -> getSmallFontSize()
|
||||||
FONT_SIZE_MEDIUM -> getMediumFontSize()
|
FONT_SIZE_MEDIUM -> getMediumFontSize()
|
||||||
|
|
|
@ -37,7 +37,8 @@ const val WEEK_NUMBERS = "week_numbers"
|
||||||
const val START_WEEKLY_AT = "start_weekly_at"
|
const val START_WEEKLY_AT = "start_weekly_at"
|
||||||
const val END_WEEKLY_AT = "end_weekly_at"
|
const val END_WEEKLY_AT = "end_weekly_at"
|
||||||
const val VIBRATE = "vibrate"
|
const val VIBRATE = "vibrate"
|
||||||
const val REMINDER_SOUND = "reminder_sound"
|
const val REMINDER_SOUND_URI = "reminder_sound_uri"
|
||||||
|
const val REMINDER_SOUND_TITLE = "reminder_sound_title"
|
||||||
const val VIEW = "view"
|
const val VIEW = "view"
|
||||||
const val REMINDER_MINUTES = "reminder_minutes"
|
const val REMINDER_MINUTES = "reminder_minutes"
|
||||||
const val REMINDER_MINUTES_2 = "reminder_minutes_2"
|
const val REMINDER_MINUTES_2 = "reminder_minutes_2"
|
||||||
|
|
Loading…
Reference in a new issue