Merge branch 'master' into feat/alarm-sort

This commit is contained in:
Tibor Kaputa 2021-04-19 14:53:18 +02:00 committed by GitHub
commit 9c9d8215b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 94 additions and 59 deletions

View File

@ -17,7 +17,7 @@ insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 4
continuation_indent_size = 8
continuation_indent_size = 4
[*.xml]
continuation_indent_size = 4

View File

@ -1,6 +1,12 @@
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)*
----------------------------

View File

@ -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>
<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/app_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/1.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/english/3.jpg" width="30%">
</div>

View File

@ -15,8 +15,8 @@ android {
applicationId "com.simplemobiletools.clock"
minSdkVersion 21
targetSdkVersion 30
versionCode 21
versionName "5.4.0"
versionCode 22
versionName "5.5.0"
setProperty("archivesBaseName", "clock")
vectorDrawables.useSupportLibrary = true
}
@ -66,14 +66,14 @@ android {
}
dependencies {
implementation 'com.simplemobiletools:commons:5.31.24'
implementation 'com.github.SimpleMobileTools:Simple-Commons:99a97f2e16'
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 "androidx.preference:preference:1.1.1"
implementation "androidx.work:work-runtime-ktx:2.4.0"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
implementation "androidx.preference:preference-ktx:1.1.1"
implementation "androidx.work:work-runtime-ktx:2.5.0"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'org.greenrobot:eventbus:3.2.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
}

View File

@ -49,15 +49,16 @@ class SettingsActivity : SimpleActivity() {
}
private fun setupPurchaseThankYou() {
settings_purchase_thank_you_holder.beVisibleIf(!isThankYouInstalled())
settings_purchase_thank_you_holder.beGoneIf(isOrWasThankYouInstalled())
settings_purchase_thank_you_holder.setOnClickListener {
launchPurchaseThankYouIntent()
}
}
private fun setupCustomizeColors() {
settings_customize_colors_label.text = getCustomizeColorsString()
settings_customize_colors_holder.setOnClickListener {
startCustomizationActivity()
handleCustomizeColorsClick()
}
}

View File

@ -3,6 +3,7 @@ package com.simplemobiletools.clock.dialogs
import android.app.TimePickerDialog
import android.graphics.drawable.Drawable
import android.media.AudioManager
import android.media.RingtoneManager
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
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.getCurrentDayMinutes
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_ALARM
import com.simplemobiletools.commons.models.AlarmSound
import kotlinx.android.synthetic.main.dialog_edit_alarm.view.*
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.text = alarm.soundTitle
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 = {
if (it != null) {
updateSelectedAlarmSound(it)
}
}, onAlarmSoundDeleted = {
if (alarm.soundUri == it.uri) {
val defaultAlarm = context.getDefaultAlarmSound(ALARM_SOUND_TYPE_ALARM)
updateSelectedAlarmSound(defaultAlarm)
}
activity.checkAlarmsWithDeletedSoundUri(it.uri)
})
if (alarm.soundUri == it.uri) {
val defaultAlarm = context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM)
updateSelectedAlarmSound(defaultAlarm)
}
activity.checkAlarmsWithDeletedSoundUri(it.uri)
})
}
edit_alarm_vibrate.colorLeftDrawable(textColor)
@ -101,6 +102,15 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
.create().apply {
activity.setupDialogStuff(view, this) {
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) {
alarm.days = if (alarm.timeInMinutes > getCurrentDayMinutes()) {
TODAY_BIT

View File

@ -7,8 +7,8 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.AudioManager.STREAM_ALARM
import android.media.RingtoneManager
import android.net.Uri
import android.os.PowerManager
import android.text.SpannableString
@ -33,7 +33,6 @@ import com.simplemobiletools.commons.helpers.*
import java.util.*
import kotlin.math.pow
val Context.config: Config get() = Config.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.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, "")
}
@ -408,7 +407,7 @@ fun Context.getReminderActivityIntent(): PendingIntent {
}
fun Context.checkAlarmsWithDeletedSoundUri(uri: String) {
val defaultAlarmSound = getDefaultAlarmSound(ALARM_SOUND_TYPE_ALARM)
val defaultAlarmSound = getDefaultAlarmSound(RingtoneManager.TYPE_ALARM)
dbHelper.getAlarmsWithUri(uri).forEach {
it.soundTitle = defaultAlarmSound.title
it.soundUri = defaultAlarmSound.uri

View File

@ -2,6 +2,7 @@ package com.simplemobiletools.clock.fragments
import android.graphics.Color
import android.media.AudioManager
import android.media.RingtoneManager
import android.os.Bundle
import android.view.LayoutInflater
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.commons.dialogs.SelectAlarmSoundDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_ALARM
import com.simplemobiletools.commons.models.AlarmSound
import kotlinx.android.synthetic.main.fragment_timer.view.*
import org.greenrobot.eventbus.EventBus
@ -45,7 +45,7 @@ class TimerFragment : Fragment() {
timer_time.text = config.timerSeconds.getFormattedDuration()
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.applyColorFilter(if (requireContext().getAdjustedPrimaryColor() == Color.WHITE) Color.BLACK else Color.WHITE)
timer_reset.applyColorFilter(textColor)
@ -80,12 +80,12 @@ class TimerFragment : Fragment() {
stopTimer()
}
timer_time.setOnClickListener {
changeDuration()
}
timer_initial_time.setOnClickListener {
MyTimePickerDialogDialog(activity as SimpleActivity, config.timerSeconds) { seconds ->
val timerSeconds = if (seconds <= 0) 10 else seconds
config.timerSeconds = timerSeconds
timer_initial_time.text = timerSeconds.getFormattedDuration()
}
changeDuration()
}
timer_vibrate_holder.setOnClickListener {
@ -96,7 +96,7 @@ class TimerFragment : Fragment() {
timer_sound.setOnClickListener {
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 ->
if (sound != null) {
updateAlarmSound(sound)
@ -104,7 +104,7 @@ class TimerFragment : Fragment() {
},
onAlarmSoundDeleted = { sound ->
if (config.timerSoundUri == sound.uri) {
val defaultAlarm = context.getDefaultAlarmSound(ALARM_SOUND_TYPE_ALARM)
val defaultAlarm = context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM)
updateAlarmSound(defaultAlarm)
}
@ -122,8 +122,21 @@ class TimerFragment : Fragment() {
private fun stopTimer() {
EventBus.getDefault().post(TimerState.Idle)
requiredActivity.hideTimerNotification()
view.timer_time.text = requiredActivity.config.timerSeconds.getFormattedDuration()
activity?.hideTimerNotification()
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)
@ -159,7 +172,7 @@ class TimerFragment : Fragment() {
R.drawable.ic_play_vector
}
val iconColor = if (requiredActivity.getAdjustedPrimaryColor() == Color.WHITE) {
val iconColor = if (activity?.getAdjustedPrimaryColor() == Color.WHITE) {
Color.BLACK
} else {
Color.WHITE
@ -169,8 +182,8 @@ class TimerFragment : Fragment() {
}
fun updateAlarmSound(alarmSound: AlarmSound) {
requiredActivity.config.timerSoundTitle = alarmSound.title
requiredActivity.config.timerSoundUri = alarmSound.uri
activity?.config?.timerSoundTitle = alarmSound.title
activity?.config?.timerSoundUri = alarmSound.uri
view.timer_sound.text = alarmSound.title
}
}

View File

@ -2,13 +2,13 @@ package com.simplemobiletools.clock.helpers
import android.content.Context
import com.simplemobiletools.clock.models.AlarmSort
import android.media.RingtoneManager
import com.simplemobiletools.clock.extensions.gson.gson
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.clock.models.StateWrapper
import com.simplemobiletools.clock.models.TimerState
import com.simplemobiletools.commons.extensions.getDefaultAlarmSound
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
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()
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()
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()
var timerMaxReminderSecs: Int
@ -59,8 +59,7 @@ class Config(context: Context) : BaseConfig(context) {
set(label) = prefs.edit().putString(TIMER_LABEL, label).apply()
var alarmSort: AlarmSort
get() = AlarmSort.valueOf(prefs.getInt(ALARM_SORT, AlarmSort.default().value))
?: AlarmSort.default()
get() = AlarmSort.valueOf(prefs.getInt(ALARM_SORT, AlarmSort.default().value)) ?: AlarmSort.default()
set(alarmSort) = prefs.edit().putInt(ALARM_SORT, alarmSort.value).apply()
var alarmMaxReminderSecs: Int

View File

@ -16,6 +16,7 @@ import com.simplemobiletools.clock.activities.ReminderActivity
import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.helpers.ALARM_ID
import com.simplemobiletools.clock.helpers.ALARM_NOTIF_ID
import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.helpers.isOreoPlus
class AlarmReceiver : BroadcastReceiver() {
@ -59,7 +60,11 @@ class AlarmReceiver : BroadcastReceiver() {
.setCategory(NotificationCompat.CATEGORY_ALARM)
.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 {
Intent(context, ReminderActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

View File

@ -44,7 +44,7 @@
android:paddingBottom="@dimen/activity_margin">
<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_height="wrap_content"
android:layout_centerVertical="true"

View File

@ -49,7 +49,7 @@
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
<b>Facebook:</b>

View File

@ -5,23 +5,23 @@
<string name="created_at">Created at</string>
<string name="time_of_day">Time of day</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="timer">Ajastin</string>
<string name="lap">Väliaika</string>
<string name="lap">Kierrosaika</string>
<string name="stopwatch_stopped">Sekuntikello pysäytetty</string>
<string name="timer_stopped">Ajastin on pysäytetty</string>
<string name="max_reminder_duration">Herätyksen maksimikesto</string>
<string name="time_expired">Ajastimen aika päättynyt</string>
<string name="clock_and_date">Kello ja päivä</string>
<string name="use_text_shadow">Käytä tekstin varjoa</string>
<string name="swipe_right_to_dismiss">Pyyhkäise oikealle sammuttaaksesi, vasemmalle torkuttaaksesi.</string>
<string name="use_text_shadow">Tekstin varjostus</string>
<string name="swipe_right_to_dismiss">Pyyhkäise oikealle sammuttaaksesi tai vasemmalle torkuttaaksesi.</string>
 
<!-- Settings -->
<string name="clock_tab">Kello</string>
<string name="alarm_tab">Herätyskello</string>
<string name="stopwatch_tab">Sekuntikello</string>
<string name="timer_tab">Ajastin</string>
<string name="clock_tab">Kello-välilehti</string>
<string name="alarm_tab">Herätyskello-välilehti</string>
<string name="stopwatch_tab">Sekuntikello-välilehti</string>
<string name="timer_tab">Ajastin-välilehti</string>
<string name="show_seconds">Näytä sekunnit</string>
<string name="increase_volume_gradually">Lisää äänen voimakkuutta asteittain</string>
 

View File

@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.4.10'
ext.kotlin_version = '1.4.32'
repositories {
google()
@ -9,7 +9,7 @@ buildscript {
}
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"
// NOTE: Do not place your application dependencies here; they belong

View File

@ -0,0 +1,2 @@
* Added some stability and translation improvements
* Require a Simple Thank You purchase for color customization

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB