Merge branch 'master' into feat/alarm-sort
@ -17,7 +17,7 @@ insert_final_newline = true
|
|||||||
charset = utf-8
|
charset = utf-8
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
continuation_indent_size = 8
|
continuation_indent_size = 4
|
||||||
|
|
||||||
[*.xml]
|
[*.xml]
|
||||||
continuation_indent_size = 4
|
continuation_indent_size = 4
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
Changelog
|
Changelog
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
Version 5.5.0 *(2020-12-29)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added some stability and translation improvements
|
||||||
|
* Require a Simple Thank You purchase for color customization
|
||||||
|
|
||||||
Version 5.4.0 *(2020-11-05)*
|
Version 5.4.0 *(2020-11-05)*
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
@ -21,8 +21,8 @@ This app is just one piece of a bigger series of apps. You can find the rest of
|
|||||||
<a href='https://f-droid.org/packages/com.simplemobiletools.clock'><img src='https://simplemobiletools.com/assets/images/f-droid.png' alt='Get it on F-Droid' height='45' /></a>
|
<a href='https://f-droid.org/packages/com.simplemobiletools.clock'><img src='https://simplemobiletools.com/assets/images/f-droid.png' alt='Get it on F-Droid' height='45' /></a>
|
||||||
|
|
||||||
<div style="display:flex;">
|
<div style="display:flex;">
|
||||||
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/app_1.jpg" width="30%">
|
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/english/1.jpg" width="30%">
|
||||||
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/app_2.jpg" width="30%">
|
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/english/2.jpg" width="30%">
|
||||||
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/app_3.jpg" width="30%">
|
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/english/3.jpg" width="30%">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@ android {
|
|||||||
applicationId "com.simplemobiletools.clock"
|
applicationId "com.simplemobiletools.clock"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 21
|
versionCode 22
|
||||||
versionName "5.4.0"
|
versionName "5.5.0"
|
||||||
setProperty("archivesBaseName", "clock")
|
setProperty("archivesBaseName", "clock")
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
@ -66,14 +66,14 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.simplemobiletools:commons:5.31.24'
|
implementation 'com.github.SimpleMobileTools:Simple-Commons:99a97f2e16'
|
||||||
implementation 'com.facebook.stetho:stetho:1.5.0'
|
implementation 'com.facebook.stetho:stetho:1.5.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
|
||||||
implementation 'com.shawnlin:number-picker:2.4.6'
|
implementation 'com.shawnlin:number-picker:2.4.6'
|
||||||
implementation "androidx.preference:preference:1.1.1"
|
implementation "androidx.preference:preference-ktx:1.1.1"
|
||||||
implementation "androidx.work:work-runtime-ktx:2.4.0"
|
implementation "androidx.work:work-runtime-ktx:2.5.0"
|
||||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7'
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1'
|
||||||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
|
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
|
||||||
implementation 'org.greenrobot:eventbus:3.2.0'
|
implementation 'org.greenrobot:eventbus:3.2.0'
|
||||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
||||||
}
|
}
|
||||||
|
@ -49,15 +49,16 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupPurchaseThankYou() {
|
private fun setupPurchaseThankYou() {
|
||||||
settings_purchase_thank_you_holder.beVisibleIf(!isThankYouInstalled())
|
settings_purchase_thank_you_holder.beGoneIf(isOrWasThankYouInstalled())
|
||||||
settings_purchase_thank_you_holder.setOnClickListener {
|
settings_purchase_thank_you_holder.setOnClickListener {
|
||||||
launchPurchaseThankYouIntent()
|
launchPurchaseThankYouIntent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupCustomizeColors() {
|
private fun setupCustomizeColors() {
|
||||||
|
settings_customize_colors_label.text = getCustomizeColorsString()
|
||||||
settings_customize_colors_holder.setOnClickListener {
|
settings_customize_colors_holder.setOnClickListener {
|
||||||
startCustomizationActivity()
|
handleCustomizeColorsClick()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package com.simplemobiletools.clock.dialogs
|
|||||||
import android.app.TimePickerDialog
|
import android.app.TimePickerDialog
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
|
import android.media.RingtoneManager
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.simplemobiletools.clock.R
|
import com.simplemobiletools.clock.R
|
||||||
@ -13,9 +14,9 @@ import com.simplemobiletools.clock.helpers.TODAY_BIT
|
|||||||
import com.simplemobiletools.clock.helpers.TOMORROW_BIT
|
import com.simplemobiletools.clock.helpers.TOMORROW_BIT
|
||||||
import com.simplemobiletools.clock.helpers.getCurrentDayMinutes
|
import com.simplemobiletools.clock.helpers.getCurrentDayMinutes
|
||||||
import com.simplemobiletools.clock.models.Alarm
|
import com.simplemobiletools.clock.models.Alarm
|
||||||
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_ALARM
|
|
||||||
import com.simplemobiletools.commons.models.AlarmSound
|
import com.simplemobiletools.commons.models.AlarmSound
|
||||||
import kotlinx.android.synthetic.main.dialog_edit_alarm.view.*
|
import kotlinx.android.synthetic.main.dialog_edit_alarm.view.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -36,18 +37,18 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
|
|||||||
edit_alarm_sound.colorLeftDrawable(textColor)
|
edit_alarm_sound.colorLeftDrawable(textColor)
|
||||||
edit_alarm_sound.text = alarm.soundTitle
|
edit_alarm_sound.text = alarm.soundTitle
|
||||||
edit_alarm_sound.setOnClickListener {
|
edit_alarm_sound.setOnClickListener {
|
||||||
SelectAlarmSoundDialog(activity, alarm.soundUri, AudioManager.STREAM_ALARM, PICK_AUDIO_FILE_INTENT_ID, ALARM_SOUND_TYPE_ALARM, true,
|
SelectAlarmSoundDialog(activity, alarm.soundUri, AudioManager.STREAM_ALARM, PICK_AUDIO_FILE_INTENT_ID, RingtoneManager.TYPE_ALARM, true,
|
||||||
onAlarmPicked = {
|
onAlarmPicked = {
|
||||||
if (it != null) {
|
if (it != null) {
|
||||||
updateSelectedAlarmSound(it)
|
updateSelectedAlarmSound(it)
|
||||||
}
|
}
|
||||||
}, onAlarmSoundDeleted = {
|
}, onAlarmSoundDeleted = {
|
||||||
if (alarm.soundUri == it.uri) {
|
if (alarm.soundUri == it.uri) {
|
||||||
val defaultAlarm = context.getDefaultAlarmSound(ALARM_SOUND_TYPE_ALARM)
|
val defaultAlarm = context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM)
|
||||||
updateSelectedAlarmSound(defaultAlarm)
|
updateSelectedAlarmSound(defaultAlarm)
|
||||||
}
|
}
|
||||||
activity.checkAlarmsWithDeletedSoundUri(it.uri)
|
activity.checkAlarmsWithDeletedSoundUri(it.uri)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
edit_alarm_vibrate.colorLeftDrawable(textColor)
|
edit_alarm_vibrate.colorLeftDrawable(textColor)
|
||||||
@ -101,6 +102,15 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
|
|||||||
.create().apply {
|
.create().apply {
|
||||||
activity.setupDialogStuff(view, this) {
|
activity.setupDialogStuff(view, this) {
|
||||||
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
||||||
|
if (!activity.config.wasAlarmWarningShown) {
|
||||||
|
ConfirmationDialog(activity, messageId = R.string.alarm_warning, positive = R.string.ok, negative = 0) {
|
||||||
|
activity.config.wasAlarmWarningShown = true
|
||||||
|
it.performClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
|
||||||
if (alarm.days <= 0) {
|
if (alarm.days <= 0) {
|
||||||
alarm.days = if (alarm.timeInMinutes > getCurrentDayMinutes()) {
|
alarm.days = if (alarm.timeInMinutes > getCurrentDayMinutes()) {
|
||||||
TODAY_BIT
|
TODAY_BIT
|
||||||
|
@ -7,8 +7,8 @@ import android.content.ComponentName
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.media.AudioAttributes
|
import android.media.AudioAttributes
|
||||||
import android.media.AudioManager
|
|
||||||
import android.media.AudioManager.STREAM_ALARM
|
import android.media.AudioManager.STREAM_ALARM
|
||||||
|
import android.media.RingtoneManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import android.text.SpannableString
|
import android.text.SpannableString
|
||||||
@ -33,7 +33,6 @@ import com.simplemobiletools.commons.helpers.*
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
|
|
||||||
|
|
||||||
val Context.config: Config get() = Config.newInstance(applicationContext)
|
val Context.config: Config get() = Config.newInstance(applicationContext)
|
||||||
|
|
||||||
val Context.dbHelper: DBHelper get() = DBHelper.newInstance(applicationContext)
|
val Context.dbHelper: DBHelper get() = DBHelper.newInstance(applicationContext)
|
||||||
@ -74,7 +73,7 @@ fun Context.getAllTimeZonesModified(): ArrayList<MyTimeZone> {
|
|||||||
fun Context.getModifiedTimeZoneTitle(id: Int) = getAllTimeZonesModified().firstOrNull { it.id == id }?.title ?: getDefaultTimeZoneTitle(id)
|
fun Context.getModifiedTimeZoneTitle(id: Int) = getAllTimeZonesModified().firstOrNull { it.id == id }?.title ?: getDefaultTimeZoneTitle(id)
|
||||||
|
|
||||||
fun Context.createNewAlarm(timeInMinutes: Int, weekDays: Int): Alarm {
|
fun Context.createNewAlarm(timeInMinutes: Int, weekDays: Int): Alarm {
|
||||||
val defaultAlarmSound = getDefaultAlarmSound(ALARM_SOUND_TYPE_ALARM)
|
val defaultAlarmSound = getDefaultAlarmSound(RingtoneManager.TYPE_ALARM)
|
||||||
return Alarm(0, timeInMinutes, weekDays, false, false, defaultAlarmSound.title, defaultAlarmSound.uri, "")
|
return Alarm(0, timeInMinutes, weekDays, false, false, defaultAlarmSound.title, defaultAlarmSound.uri, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,7 +407,7 @@ fun Context.getReminderActivityIntent(): PendingIntent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun Context.checkAlarmsWithDeletedSoundUri(uri: String) {
|
fun Context.checkAlarmsWithDeletedSoundUri(uri: String) {
|
||||||
val defaultAlarmSound = getDefaultAlarmSound(ALARM_SOUND_TYPE_ALARM)
|
val defaultAlarmSound = getDefaultAlarmSound(RingtoneManager.TYPE_ALARM)
|
||||||
dbHelper.getAlarmsWithUri(uri).forEach {
|
dbHelper.getAlarmsWithUri(uri).forEach {
|
||||||
it.soundTitle = defaultAlarmSound.title
|
it.soundTitle = defaultAlarmSound.title
|
||||||
it.soundUri = defaultAlarmSound.uri
|
it.soundUri = defaultAlarmSound.uri
|
||||||
|
@ -2,6 +2,7 @@ package com.simplemobiletools.clock.fragments
|
|||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
|
import android.media.RingtoneManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@ -15,7 +16,6 @@ import com.simplemobiletools.clock.helpers.PICK_AUDIO_FILE_INTENT_ID
|
|||||||
import com.simplemobiletools.clock.models.TimerState
|
import com.simplemobiletools.clock.models.TimerState
|
||||||
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_ALARM
|
|
||||||
import com.simplemobiletools.commons.models.AlarmSound
|
import com.simplemobiletools.commons.models.AlarmSound
|
||||||
import kotlinx.android.synthetic.main.fragment_timer.view.*
|
import kotlinx.android.synthetic.main.fragment_timer.view.*
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
@ -45,7 +45,7 @@ class TimerFragment : Fragment() {
|
|||||||
timer_time.text = config.timerSeconds.getFormattedDuration()
|
timer_time.text = config.timerSeconds.getFormattedDuration()
|
||||||
timer_label.setText(config.timerLabel)
|
timer_label.setText(config.timerLabel)
|
||||||
|
|
||||||
requiredActivity.updateTextColors(timer_fragment)
|
activity?.updateTextColors(timer_fragment)
|
||||||
timer_play_pause.background = resources.getColoredDrawableWithColor(R.drawable.circle_background_filled, requireContext().getAdjustedPrimaryColor())
|
timer_play_pause.background = resources.getColoredDrawableWithColor(R.drawable.circle_background_filled, requireContext().getAdjustedPrimaryColor())
|
||||||
timer_play_pause.applyColorFilter(if (requireContext().getAdjustedPrimaryColor() == Color.WHITE) Color.BLACK else Color.WHITE)
|
timer_play_pause.applyColorFilter(if (requireContext().getAdjustedPrimaryColor() == Color.WHITE) Color.BLACK else Color.WHITE)
|
||||||
timer_reset.applyColorFilter(textColor)
|
timer_reset.applyColorFilter(textColor)
|
||||||
@ -80,12 +80,12 @@ class TimerFragment : Fragment() {
|
|||||||
stopTimer()
|
stopTimer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timer_time.setOnClickListener {
|
||||||
|
changeDuration()
|
||||||
|
}
|
||||||
|
|
||||||
timer_initial_time.setOnClickListener {
|
timer_initial_time.setOnClickListener {
|
||||||
MyTimePickerDialogDialog(activity as SimpleActivity, config.timerSeconds) { seconds ->
|
changeDuration()
|
||||||
val timerSeconds = if (seconds <= 0) 10 else seconds
|
|
||||||
config.timerSeconds = timerSeconds
|
|
||||||
timer_initial_time.text = timerSeconds.getFormattedDuration()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
timer_vibrate_holder.setOnClickListener {
|
timer_vibrate_holder.setOnClickListener {
|
||||||
@ -96,7 +96,7 @@ class TimerFragment : Fragment() {
|
|||||||
|
|
||||||
timer_sound.setOnClickListener {
|
timer_sound.setOnClickListener {
|
||||||
SelectAlarmSoundDialog(activity as SimpleActivity, config.timerSoundUri, AudioManager.STREAM_ALARM, PICK_AUDIO_FILE_INTENT_ID,
|
SelectAlarmSoundDialog(activity as SimpleActivity, config.timerSoundUri, AudioManager.STREAM_ALARM, PICK_AUDIO_FILE_INTENT_ID,
|
||||||
ALARM_SOUND_TYPE_ALARM, true,
|
RingtoneManager.TYPE_ALARM, true,
|
||||||
onAlarmPicked = { sound ->
|
onAlarmPicked = { sound ->
|
||||||
if (sound != null) {
|
if (sound != null) {
|
||||||
updateAlarmSound(sound)
|
updateAlarmSound(sound)
|
||||||
@ -104,7 +104,7 @@ class TimerFragment : Fragment() {
|
|||||||
},
|
},
|
||||||
onAlarmSoundDeleted = { sound ->
|
onAlarmSoundDeleted = { sound ->
|
||||||
if (config.timerSoundUri == sound.uri) {
|
if (config.timerSoundUri == sound.uri) {
|
||||||
val defaultAlarm = context.getDefaultAlarmSound(ALARM_SOUND_TYPE_ALARM)
|
val defaultAlarm = context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM)
|
||||||
updateAlarmSound(defaultAlarm)
|
updateAlarmSound(defaultAlarm)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,8 +122,21 @@ class TimerFragment : Fragment() {
|
|||||||
|
|
||||||
private fun stopTimer() {
|
private fun stopTimer() {
|
||||||
EventBus.getDefault().post(TimerState.Idle)
|
EventBus.getDefault().post(TimerState.Idle)
|
||||||
requiredActivity.hideTimerNotification()
|
activity?.hideTimerNotification()
|
||||||
view.timer_time.text = requiredActivity.config.timerSeconds.getFormattedDuration()
|
view.timer_time.text = activity?.config?.timerSeconds?.getFormattedDuration()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun changeDuration() {
|
||||||
|
MyTimePickerDialogDialog(activity as SimpleActivity, requireContext().config.timerSeconds) { seconds ->
|
||||||
|
val timerSeconds = if (seconds <= 0) 10 else seconds
|
||||||
|
activity?.config?.timerSeconds = timerSeconds
|
||||||
|
val duration = timerSeconds.getFormattedDuration()
|
||||||
|
view.timer_initial_time.text = duration
|
||||||
|
|
||||||
|
if (view.timer_reset.isGone()) {
|
||||||
|
stopTimer()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
@ -159,7 +172,7 @@ class TimerFragment : Fragment() {
|
|||||||
R.drawable.ic_play_vector
|
R.drawable.ic_play_vector
|
||||||
}
|
}
|
||||||
|
|
||||||
val iconColor = if (requiredActivity.getAdjustedPrimaryColor() == Color.WHITE) {
|
val iconColor = if (activity?.getAdjustedPrimaryColor() == Color.WHITE) {
|
||||||
Color.BLACK
|
Color.BLACK
|
||||||
} else {
|
} else {
|
||||||
Color.WHITE
|
Color.WHITE
|
||||||
@ -169,8 +182,8 @@ class TimerFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun updateAlarmSound(alarmSound: AlarmSound) {
|
fun updateAlarmSound(alarmSound: AlarmSound) {
|
||||||
requiredActivity.config.timerSoundTitle = alarmSound.title
|
activity?.config?.timerSoundTitle = alarmSound.title
|
||||||
requiredActivity.config.timerSoundUri = alarmSound.uri
|
activity?.config?.timerSoundUri = alarmSound.uri
|
||||||
view.timer_sound.text = alarmSound.title
|
view.timer_sound.text = alarmSound.title
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,13 @@ package com.simplemobiletools.clock.helpers
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.simplemobiletools.clock.models.AlarmSort
|
import com.simplemobiletools.clock.models.AlarmSort
|
||||||
|
import android.media.RingtoneManager
|
||||||
import com.simplemobiletools.clock.extensions.gson.gson
|
import com.simplemobiletools.clock.extensions.gson.gson
|
||||||
import com.simplemobiletools.clock.models.Alarm
|
import com.simplemobiletools.clock.models.Alarm
|
||||||
import com.simplemobiletools.clock.models.StateWrapper
|
import com.simplemobiletools.clock.models.StateWrapper
|
||||||
import com.simplemobiletools.clock.models.TimerState
|
import com.simplemobiletools.clock.models.TimerState
|
||||||
|
import com.simplemobiletools.commons.extensions.getDefaultAlarmSound
|
||||||
import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle
|
import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle
|
||||||
import com.simplemobiletools.commons.extensions.getDefaultAlarmUri
|
|
||||||
import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_ALARM
|
|
||||||
import com.simplemobiletools.commons.helpers.BaseConfig
|
import com.simplemobiletools.commons.helpers.BaseConfig
|
||||||
|
|
||||||
class Config(context: Context) : BaseConfig(context) {
|
class Config(context: Context) : BaseConfig(context) {
|
||||||
@ -43,11 +43,11 @@ class Config(context: Context) : BaseConfig(context) {
|
|||||||
set(timerVibrate) = prefs.edit().putBoolean(TIMER_VIBRATE, timerVibrate).apply()
|
set(timerVibrate) = prefs.edit().putBoolean(TIMER_VIBRATE, timerVibrate).apply()
|
||||||
|
|
||||||
var timerSoundUri: String
|
var timerSoundUri: String
|
||||||
get() = prefs.getString(TIMER_SOUND_URI, context.getDefaultAlarmUri(ALARM_SOUND_TYPE_ALARM).toString())!!
|
get() = prefs.getString(TIMER_SOUND_URI, context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM).uri)!!
|
||||||
set(timerSoundUri) = prefs.edit().putString(TIMER_SOUND_URI, timerSoundUri).apply()
|
set(timerSoundUri) = prefs.edit().putString(TIMER_SOUND_URI, timerSoundUri).apply()
|
||||||
|
|
||||||
var timerSoundTitle: String
|
var timerSoundTitle: String
|
||||||
get() = prefs.getString(TIMER_SOUND_TITLE, context.getDefaultAlarmTitle(ALARM_SOUND_TYPE_ALARM))!!
|
get() = prefs.getString(TIMER_SOUND_TITLE, context.getDefaultAlarmTitle(RingtoneManager.TYPE_ALARM))!!
|
||||||
set(timerSoundTitle) = prefs.edit().putString(TIMER_SOUND_TITLE, timerSoundTitle).apply()
|
set(timerSoundTitle) = prefs.edit().putString(TIMER_SOUND_TITLE, timerSoundTitle).apply()
|
||||||
|
|
||||||
var timerMaxReminderSecs: Int
|
var timerMaxReminderSecs: Int
|
||||||
@ -59,8 +59,7 @@ class Config(context: Context) : BaseConfig(context) {
|
|||||||
set(label) = prefs.edit().putString(TIMER_LABEL, label).apply()
|
set(label) = prefs.edit().putString(TIMER_LABEL, label).apply()
|
||||||
|
|
||||||
var alarmSort: AlarmSort
|
var alarmSort: AlarmSort
|
||||||
get() = AlarmSort.valueOf(prefs.getInt(ALARM_SORT, AlarmSort.default().value))
|
get() = AlarmSort.valueOf(prefs.getInt(ALARM_SORT, AlarmSort.default().value)) ?: AlarmSort.default()
|
||||||
?: AlarmSort.default()
|
|
||||||
set(alarmSort) = prefs.edit().putInt(ALARM_SORT, alarmSort.value).apply()
|
set(alarmSort) = prefs.edit().putInt(ALARM_SORT, alarmSort.value).apply()
|
||||||
|
|
||||||
var alarmMaxReminderSecs: Int
|
var alarmMaxReminderSecs: Int
|
||||||
|
@ -16,6 +16,7 @@ import com.simplemobiletools.clock.activities.ReminderActivity
|
|||||||
import com.simplemobiletools.clock.extensions.*
|
import com.simplemobiletools.clock.extensions.*
|
||||||
import com.simplemobiletools.clock.helpers.ALARM_ID
|
import com.simplemobiletools.clock.helpers.ALARM_ID
|
||||||
import com.simplemobiletools.clock.helpers.ALARM_NOTIF_ID
|
import com.simplemobiletools.clock.helpers.ALARM_NOTIF_ID
|
||||||
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||||
|
|
||||||
class AlarmReceiver : BroadcastReceiver() {
|
class AlarmReceiver : BroadcastReceiver() {
|
||||||
@ -59,7 +60,11 @@ class AlarmReceiver : BroadcastReceiver() {
|
|||||||
.setCategory(NotificationCompat.CATEGORY_ALARM)
|
.setCategory(NotificationCompat.CATEGORY_ALARM)
|
||||||
.setFullScreenIntent(pendingIntent, true)
|
.setFullScreenIntent(pendingIntent, true)
|
||||||
|
|
||||||
notificationManager.notify(ALARM_NOTIF_ID, builder.build())
|
try {
|
||||||
|
notificationManager.notify(ALARM_NOTIF_ID, builder.build())
|
||||||
|
} catch (e: Exception) {
|
||||||
|
context.showErrorToast(e)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Intent(context, ReminderActivity::class.java).apply {
|
Intent(context, ReminderActivity::class.java).apply {
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
android:paddingBottom="@dimen/activity_margin">
|
android:paddingBottom="@dimen/activity_margin">
|
||||||
|
|
||||||
<com.simplemobiletools.commons.views.MyTextView
|
<com.simplemobiletools.commons.views.MyTextView
|
||||||
android:id="@+id/settings_customize_colors"
|
android:id="@+id/settings_customize_colors_label"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
|
|
||||||
Die App beinhaltet keine Werbung oder unnötige Berechtigungen und ist komplett Open Source.
|
Die App beinhaltet keine Werbung oder unnötige Berechtigungen und ist komplett Open Source.
|
||||||
|
|
||||||
<b>Check out the full suite of Simple Tools here:</b>
|
<b>Entdecke die gesamte Serie an schlichten Apps hier:</b>
|
||||||
https://www.simplemobiletools.com
|
https://www.simplemobiletools.com
|
||||||
|
|
||||||
<b>Facebook:</b>
|
<b>Facebook:</b>
|
||||||
|
@ -5,23 +5,23 @@
|
|||||||
<string name="created_at">Created at</string>
|
<string name="created_at">Created at</string>
|
||||||
<string name="time_of_day">Time of day</string>
|
<string name="time_of_day">Time of day</string>
|
||||||
<string name="vibrate">Värinä</string>
|
<string name="vibrate">Värinä</string>
|
||||||
<string name="label">Nimi</string>
|
<string name="label">Tunniste</string>
|
||||||
<string name="no_days_selected">Ei päiviä valittuna</string>
|
<string name="no_days_selected">Ei päiviä valittuna</string>
|
||||||
<string name="timer">Ajastin</string>
|
<string name="timer">Ajastin</string>
|
||||||
<string name="lap">Väliaika</string>
|
<string name="lap">Kierrosaika</string>
|
||||||
<string name="stopwatch_stopped">Sekuntikello pysäytetty</string>
|
<string name="stopwatch_stopped">Sekuntikello pysäytetty</string>
|
||||||
<string name="timer_stopped">Ajastin on pysäytetty</string>
|
<string name="timer_stopped">Ajastin on pysäytetty</string>
|
||||||
<string name="max_reminder_duration">Herätyksen maksimikesto</string>
|
<string name="max_reminder_duration">Herätyksen maksimikesto</string>
|
||||||
<string name="time_expired">Ajastimen aika päättynyt</string>
|
<string name="time_expired">Ajastimen aika päättynyt</string>
|
||||||
<string name="clock_and_date">Kello ja päivä</string>
|
<string name="clock_and_date">Kello ja päivä</string>
|
||||||
<string name="use_text_shadow">Käytä tekstin varjoa</string>
|
<string name="use_text_shadow">Tekstin varjostus</string>
|
||||||
<string name="swipe_right_to_dismiss">Pyyhkäise oikealle sammuttaaksesi, vasemmalle torkuttaaksesi.</string>
|
<string name="swipe_right_to_dismiss">Pyyhkäise oikealle sammuttaaksesi tai vasemmalle torkuttaaksesi.</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="clock_tab">Kello</string>
|
<string name="clock_tab">Kello-välilehti</string>
|
||||||
<string name="alarm_tab">Herätyskello</string>
|
<string name="alarm_tab">Herätyskello-välilehti</string>
|
||||||
<string name="stopwatch_tab">Sekuntikello</string>
|
<string name="stopwatch_tab">Sekuntikello-välilehti</string>
|
||||||
<string name="timer_tab">Ajastin</string>
|
<string name="timer_tab">Ajastin-välilehti</string>
|
||||||
<string name="show_seconds">Näytä sekunnit</string>
|
<string name="show_seconds">Näytä sekunnit</string>
|
||||||
<string name="increase_volume_gradually">Lisää äänen voimakkuutta asteittain</string>
|
<string name="increase_volume_gradually">Lisää äänen voimakkuutta asteittain</string>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.4.10'
|
ext.kotlin_version = '1.4.32'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
@ -9,7 +9,7 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.1.0'
|
classpath 'com.android.tools.build:gradle:4.1.3'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
2
fastlane/metadata/android/en-US/changelogs/22.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
* Added some stability and translation improvements
|
||||||
|
* Require a Simple Thank You purchase for color customization
|
Before Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 139 KiB |
Before Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 168 KiB |
After Width: | Height: | Size: 185 KiB |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 170 KiB |