Merge branch 'master' into feat/alarm-sort
@ -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
|
||||
|
@ -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)*
|
||||
----------------------------
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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'
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
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 |