Loading build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.15.11' propVersionName = '3.15.15' kotlin_version = '1.2.30' support_libs = '27.1.0' } Loading commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/CustomIntervalPickerDialog.kt +19 −13 Original line number Diff line number Diff line Loading @@ -4,32 +4,37 @@ import android.app.Activity import android.support.v7.app.AlertDialog import android.view.ViewGroup import com.simplemobiletools.commons.R import com.simplemobiletools.commons.extensions.hideKeyboard import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.showKeyboard import com.simplemobiletools.commons.extensions.value import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.DAY_MINUTES import com.simplemobiletools.commons.helpers.DAY_SECONDS import com.simplemobiletools.commons.helpers.HOUR_SECONDS import com.simplemobiletools.commons.helpers.MINUTE_SECONDS import kotlinx.android.synthetic.main.dialog_custom_interval_picker.view.* class CustomIntervalPickerDialog(val activity: Activity, val selectedMinutes: Int = 0, val callback: (minutes: Int) -> Unit) { class CustomIntervalPickerDialog(val activity: Activity, val selectedSeconds: Int = 0, val showSeconds: Boolean = false, val callback: (minutes: Int) -> Unit) { var dialog: AlertDialog var view = (activity.layoutInflater.inflate(R.layout.dialog_custom_interval_picker, null) as ViewGroup) init { view.apply { dialog_radio_seconds.beVisibleIf(showSeconds) when { selectedMinutes == 0 -> dialog_radio_view.check(R.id.dialog_radio_minutes) selectedMinutes % DAY_MINUTES == 0 -> { selectedSeconds == 0 -> dialog_radio_view.check(R.id.dialog_radio_minutes) selectedSeconds % DAY_SECONDS == 0 -> { dialog_radio_view.check(R.id.dialog_radio_days) dialog_custom_interval_value.setText((selectedMinutes / DAY_MINUTES).toString()) dialog_custom_interval_value.setText((selectedSeconds / DAY_SECONDS).toString()) } selectedMinutes % 60 == 0 -> { selectedSeconds % HOUR_SECONDS == 0 -> { dialog_radio_view.check(R.id.dialog_radio_hours) dialog_custom_interval_value.setText((selectedMinutes / 60).toString()) dialog_custom_interval_value.setText((selectedSeconds / HOUR_SECONDS).toString()) } else -> { selectedSeconds % MINUTE_SECONDS == 0 -> { dialog_radio_view.check(R.id.dialog_radio_minutes) dialog_custom_interval_value.setText(selectedMinutes.toString()) dialog_custom_interval_value.setText((selectedSeconds / MINUTE_SECONDS).toString()) } else -> { dialog_radio_view.check(R.id.dialog_radio_seconds) dialog_custom_interval_value.setText(selectedSeconds.toString()) } } } Loading @@ -54,8 +59,9 @@ class CustomIntervalPickerDialog(val activity: Activity, val selectedMinutes: In } private fun getMultiplier(id: Int) = when (id) { R.id.dialog_radio_hours -> 60 R.id.dialog_radio_days -> DAY_MINUTES R.id.dialog_radio_hours -> HOUR_SECONDS R.id.dialog_radio_minutes -> MINUTE_SECONDS else -> 1 } } commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Activity.kt +16 −15 Original line number Diff line number Diff line Loading @@ -730,30 +730,31 @@ fun Activity.setupDialogStuff(view: View, dialog: AlertDialog, titleId: Int = 0, callback?.invoke() } fun Activity.showPickIntervalDialog(curMinutes: Int, isSnoozePicker: Boolean = false, cancelCallback: (() -> Unit)? = null, callback: (minutes: Int) -> Unit) { fun Activity.showPickSecondsDialog(curSeconds: Int, isSnoozePicker: Boolean = false, showSecondsAtCustomDialog: Boolean = false, cancelCallback: (() -> Unit)? = null, callback: (minutes: Int) -> Unit) { hideKeyboard() val minutes = TreeSet<Int>() minutes.apply { val seconds = TreeSet<Int>() seconds.apply { if (!isSnoozePicker) { add(-1) add(0) } add(5) add(10) add(20) add(30) add(60) add(curMinutes) add(1 * MINUTE_SECONDS) add(5 * MINUTE_SECONDS) add(10 * MINUTE_SECONDS) add(30 * MINUTE_SECONDS) add(60 * MINUTE_SECONDS) add(curSeconds) } val items = ArrayList<RadioItem>(minutes.size + 1) minutes.mapIndexedTo(items, { index, value -> RadioItem(index, getFormattedMinutes(value, !isSnoozePicker), value) val items = ArrayList<RadioItem>(seconds.size + 1) seconds.mapIndexedTo(items, { index, value -> RadioItem(index, getFormattedSeconds(value, !isSnoozePicker), value) }) var selectedIndex = 0 minutes.forEachIndexed { index, value -> if (value == curMinutes) { seconds.forEachIndexed { index, value -> if (value == curSeconds) { selectedIndex = index } } Loading @@ -762,7 +763,7 @@ fun Activity.showPickIntervalDialog(curMinutes: Int, isSnoozePicker: Boolean = f RadioGroupDialog(this, items, selectedIndex, showOKButton = isSnoozePicker, cancelCallback = cancelCallback) { if (it == -2) { CustomIntervalPickerDialog(this) { CustomIntervalPickerDialog(this, showSeconds = showSecondsAtCustomDialog) { callback(it) } } else { Loading commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Context.kt +29 −15 Original line number Diff line number Diff line Loading @@ -361,10 +361,13 @@ fun Context.getSelectedDaysString(bitMask: Int): String { return days.trim().trimEnd(',') } fun Context.formatMinutesToTimeString(totalMinutes: Int): String { val days = totalMinutes / DAY_MINUTES val hours = (totalMinutes % DAY_MINUTES) / HOUR_MINUTES val minutes = totalMinutes % HOUR_MINUTES fun Context.formatMinutesToTimeString(totalMinutes: Int) = formatSecondsToTimeString(totalMinutes * 60) fun Context.formatSecondsToTimeString(totalSeconds: Int): String { val days = totalSeconds / DAY_SECONDS val hours = (totalSeconds % DAY_SECONDS) / HOUR_SECONDS val minutes = (totalSeconds % HOUR_SECONDS) / MINUTE_SECONDS val seconds = totalSeconds % MINUTE_SECONDS val timesString = StringBuilder() if (days > 0) { val daysString = String.format(resources.getQuantityString(R.plurals.days, days, days)) Loading @@ -378,7 +381,12 @@ fun Context.formatMinutesToTimeString(totalMinutes: Int): String { if (minutes > 0) { val minutesString = String.format(resources.getQuantityString(R.plurals.minutes, minutes, minutes)) timesString.append(minutesString) timesString.append("$minutesString, ") } if (seconds > 0) { val secondsString = String.format(resources.getQuantityString(R.plurals.seconds, seconds, seconds)) timesString.append(secondsString) } var result = timesString.toString().trim().trimEnd(',') Loading @@ -388,24 +396,30 @@ fun Context.formatMinutesToTimeString(totalMinutes: Int): String { return result } fun Context.getFormattedMinutes(minutes: Int, showBefore: Boolean = true) = when (minutes) { fun Context.getFormattedMinutes(minutes: Int, showBefore: Boolean = true) = getFormattedSeconds(minutes * 60, showBefore) fun Context.getFormattedSeconds(seconds: Int, showBefore: Boolean = true) = when (seconds) { -1 -> getString(R.string.no_reminder) 0 -> getString(R.string.at_start) else -> { if (minutes % YEAR_MINUTES == 0) resources.getQuantityString(R.plurals.years, minutes / YEAR_MINUTES, minutes / YEAR_MINUTES) if (seconds % YEAR_SECONDS == 0) resources.getQuantityString(R.plurals.years, seconds / YEAR_SECONDS, seconds / YEAR_SECONDS) when { minutes % MONTH_MINUTES == 0 -> resources.getQuantityString(R.plurals.months, minutes / MONTH_MINUTES, minutes / MONTH_MINUTES) minutes % WEEK_MINUTES == 0 -> resources.getQuantityString(R.plurals.weeks, minutes / WEEK_MINUTES, minutes / WEEK_MINUTES) minutes % DAY_MINUTES == 0 -> resources.getQuantityString(R.plurals.days, minutes / DAY_MINUTES, minutes / DAY_MINUTES) minutes % HOUR_MINUTES == 0 -> { seconds % MONTH_SECONDS == 0 -> resources.getQuantityString(R.plurals.months, seconds / MONTH_SECONDS, seconds / MONTH_SECONDS) seconds % WEEK_SECONDS == 0 -> resources.getQuantityString(R.plurals.weeks, seconds / WEEK_SECONDS, seconds / WEEK_SECONDS) seconds % DAY_SECONDS == 0 -> resources.getQuantityString(R.plurals.days, seconds / DAY_SECONDS, seconds / DAY_SECONDS) seconds % HOUR_SECONDS == 0 -> { val base = if (showBefore) R.plurals.hours_before else R.plurals.by_hours resources.getQuantityString(base, minutes / HOUR_MINUTES, minutes / HOUR_MINUTES) resources.getQuantityString(base, seconds / HOUR_SECONDS, seconds / HOUR_SECONDS) } else -> { seconds % MINUTE_SECONDS == 0 -> { val base = if (showBefore) R.plurals.minutes_before else R.plurals.by_minutes resources.getQuantityString(base, minutes, minutes) resources.getQuantityString(base, seconds / MINUTE_SECONDS, seconds / MINUTE_SECONDS) } else -> { val base = if (showBefore) R.plurals.seconds_before else R.plurals.by_seconds resources.getQuantityString(base, seconds, seconds) } } } Loading commons/src/main/kotlin/com/simplemobiletools/commons/extensions/RemoteViews.kt +5 −0 Original line number Diff line number Diff line package com.simplemobiletools.commons.extensions import android.view.View import android.widget.RemoteViews fun RemoteViews.setBackgroundColor(id: Int, color: Int) { Loading @@ -13,3 +14,7 @@ fun RemoteViews.setTextSize(id: Int, size: Float) { fun RemoteViews.setText(id: Int, text: String) { setTextViewText(id, text) } fun RemoteViews.setVisibleIf(id: Int, beVisible: Boolean) { setViewVisibility(id, if (beVisible) View.VISIBLE else View.GONE) } Loading
build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.15.11' propVersionName = '3.15.15' kotlin_version = '1.2.30' support_libs = '27.1.0' } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/CustomIntervalPickerDialog.kt +19 −13 Original line number Diff line number Diff line Loading @@ -4,32 +4,37 @@ import android.app.Activity import android.support.v7.app.AlertDialog import android.view.ViewGroup import com.simplemobiletools.commons.R import com.simplemobiletools.commons.extensions.hideKeyboard import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.showKeyboard import com.simplemobiletools.commons.extensions.value import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.DAY_MINUTES import com.simplemobiletools.commons.helpers.DAY_SECONDS import com.simplemobiletools.commons.helpers.HOUR_SECONDS import com.simplemobiletools.commons.helpers.MINUTE_SECONDS import kotlinx.android.synthetic.main.dialog_custom_interval_picker.view.* class CustomIntervalPickerDialog(val activity: Activity, val selectedMinutes: Int = 0, val callback: (minutes: Int) -> Unit) { class CustomIntervalPickerDialog(val activity: Activity, val selectedSeconds: Int = 0, val showSeconds: Boolean = false, val callback: (minutes: Int) -> Unit) { var dialog: AlertDialog var view = (activity.layoutInflater.inflate(R.layout.dialog_custom_interval_picker, null) as ViewGroup) init { view.apply { dialog_radio_seconds.beVisibleIf(showSeconds) when { selectedMinutes == 0 -> dialog_radio_view.check(R.id.dialog_radio_minutes) selectedMinutes % DAY_MINUTES == 0 -> { selectedSeconds == 0 -> dialog_radio_view.check(R.id.dialog_radio_minutes) selectedSeconds % DAY_SECONDS == 0 -> { dialog_radio_view.check(R.id.dialog_radio_days) dialog_custom_interval_value.setText((selectedMinutes / DAY_MINUTES).toString()) dialog_custom_interval_value.setText((selectedSeconds / DAY_SECONDS).toString()) } selectedMinutes % 60 == 0 -> { selectedSeconds % HOUR_SECONDS == 0 -> { dialog_radio_view.check(R.id.dialog_radio_hours) dialog_custom_interval_value.setText((selectedMinutes / 60).toString()) dialog_custom_interval_value.setText((selectedSeconds / HOUR_SECONDS).toString()) } else -> { selectedSeconds % MINUTE_SECONDS == 0 -> { dialog_radio_view.check(R.id.dialog_radio_minutes) dialog_custom_interval_value.setText(selectedMinutes.toString()) dialog_custom_interval_value.setText((selectedSeconds / MINUTE_SECONDS).toString()) } else -> { dialog_radio_view.check(R.id.dialog_radio_seconds) dialog_custom_interval_value.setText(selectedSeconds.toString()) } } } Loading @@ -54,8 +59,9 @@ class CustomIntervalPickerDialog(val activity: Activity, val selectedMinutes: In } private fun getMultiplier(id: Int) = when (id) { R.id.dialog_radio_hours -> 60 R.id.dialog_radio_days -> DAY_MINUTES R.id.dialog_radio_hours -> HOUR_SECONDS R.id.dialog_radio_minutes -> MINUTE_SECONDS else -> 1 } }
commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Activity.kt +16 −15 Original line number Diff line number Diff line Loading @@ -730,30 +730,31 @@ fun Activity.setupDialogStuff(view: View, dialog: AlertDialog, titleId: Int = 0, callback?.invoke() } fun Activity.showPickIntervalDialog(curMinutes: Int, isSnoozePicker: Boolean = false, cancelCallback: (() -> Unit)? = null, callback: (minutes: Int) -> Unit) { fun Activity.showPickSecondsDialog(curSeconds: Int, isSnoozePicker: Boolean = false, showSecondsAtCustomDialog: Boolean = false, cancelCallback: (() -> Unit)? = null, callback: (minutes: Int) -> Unit) { hideKeyboard() val minutes = TreeSet<Int>() minutes.apply { val seconds = TreeSet<Int>() seconds.apply { if (!isSnoozePicker) { add(-1) add(0) } add(5) add(10) add(20) add(30) add(60) add(curMinutes) add(1 * MINUTE_SECONDS) add(5 * MINUTE_SECONDS) add(10 * MINUTE_SECONDS) add(30 * MINUTE_SECONDS) add(60 * MINUTE_SECONDS) add(curSeconds) } val items = ArrayList<RadioItem>(minutes.size + 1) minutes.mapIndexedTo(items, { index, value -> RadioItem(index, getFormattedMinutes(value, !isSnoozePicker), value) val items = ArrayList<RadioItem>(seconds.size + 1) seconds.mapIndexedTo(items, { index, value -> RadioItem(index, getFormattedSeconds(value, !isSnoozePicker), value) }) var selectedIndex = 0 minutes.forEachIndexed { index, value -> if (value == curMinutes) { seconds.forEachIndexed { index, value -> if (value == curSeconds) { selectedIndex = index } } Loading @@ -762,7 +763,7 @@ fun Activity.showPickIntervalDialog(curMinutes: Int, isSnoozePicker: Boolean = f RadioGroupDialog(this, items, selectedIndex, showOKButton = isSnoozePicker, cancelCallback = cancelCallback) { if (it == -2) { CustomIntervalPickerDialog(this) { CustomIntervalPickerDialog(this, showSeconds = showSecondsAtCustomDialog) { callback(it) } } else { Loading
commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Context.kt +29 −15 Original line number Diff line number Diff line Loading @@ -361,10 +361,13 @@ fun Context.getSelectedDaysString(bitMask: Int): String { return days.trim().trimEnd(',') } fun Context.formatMinutesToTimeString(totalMinutes: Int): String { val days = totalMinutes / DAY_MINUTES val hours = (totalMinutes % DAY_MINUTES) / HOUR_MINUTES val minutes = totalMinutes % HOUR_MINUTES fun Context.formatMinutesToTimeString(totalMinutes: Int) = formatSecondsToTimeString(totalMinutes * 60) fun Context.formatSecondsToTimeString(totalSeconds: Int): String { val days = totalSeconds / DAY_SECONDS val hours = (totalSeconds % DAY_SECONDS) / HOUR_SECONDS val minutes = (totalSeconds % HOUR_SECONDS) / MINUTE_SECONDS val seconds = totalSeconds % MINUTE_SECONDS val timesString = StringBuilder() if (days > 0) { val daysString = String.format(resources.getQuantityString(R.plurals.days, days, days)) Loading @@ -378,7 +381,12 @@ fun Context.formatMinutesToTimeString(totalMinutes: Int): String { if (minutes > 0) { val minutesString = String.format(resources.getQuantityString(R.plurals.minutes, minutes, minutes)) timesString.append(minutesString) timesString.append("$minutesString, ") } if (seconds > 0) { val secondsString = String.format(resources.getQuantityString(R.plurals.seconds, seconds, seconds)) timesString.append(secondsString) } var result = timesString.toString().trim().trimEnd(',') Loading @@ -388,24 +396,30 @@ fun Context.formatMinutesToTimeString(totalMinutes: Int): String { return result } fun Context.getFormattedMinutes(minutes: Int, showBefore: Boolean = true) = when (minutes) { fun Context.getFormattedMinutes(minutes: Int, showBefore: Boolean = true) = getFormattedSeconds(minutes * 60, showBefore) fun Context.getFormattedSeconds(seconds: Int, showBefore: Boolean = true) = when (seconds) { -1 -> getString(R.string.no_reminder) 0 -> getString(R.string.at_start) else -> { if (minutes % YEAR_MINUTES == 0) resources.getQuantityString(R.plurals.years, minutes / YEAR_MINUTES, minutes / YEAR_MINUTES) if (seconds % YEAR_SECONDS == 0) resources.getQuantityString(R.plurals.years, seconds / YEAR_SECONDS, seconds / YEAR_SECONDS) when { minutes % MONTH_MINUTES == 0 -> resources.getQuantityString(R.plurals.months, minutes / MONTH_MINUTES, minutes / MONTH_MINUTES) minutes % WEEK_MINUTES == 0 -> resources.getQuantityString(R.plurals.weeks, minutes / WEEK_MINUTES, minutes / WEEK_MINUTES) minutes % DAY_MINUTES == 0 -> resources.getQuantityString(R.plurals.days, minutes / DAY_MINUTES, minutes / DAY_MINUTES) minutes % HOUR_MINUTES == 0 -> { seconds % MONTH_SECONDS == 0 -> resources.getQuantityString(R.plurals.months, seconds / MONTH_SECONDS, seconds / MONTH_SECONDS) seconds % WEEK_SECONDS == 0 -> resources.getQuantityString(R.plurals.weeks, seconds / WEEK_SECONDS, seconds / WEEK_SECONDS) seconds % DAY_SECONDS == 0 -> resources.getQuantityString(R.plurals.days, seconds / DAY_SECONDS, seconds / DAY_SECONDS) seconds % HOUR_SECONDS == 0 -> { val base = if (showBefore) R.plurals.hours_before else R.plurals.by_hours resources.getQuantityString(base, minutes / HOUR_MINUTES, minutes / HOUR_MINUTES) resources.getQuantityString(base, seconds / HOUR_SECONDS, seconds / HOUR_SECONDS) } else -> { seconds % MINUTE_SECONDS == 0 -> { val base = if (showBefore) R.plurals.minutes_before else R.plurals.by_minutes resources.getQuantityString(base, minutes, minutes) resources.getQuantityString(base, seconds / MINUTE_SECONDS, seconds / MINUTE_SECONDS) } else -> { val base = if (showBefore) R.plurals.seconds_before else R.plurals.by_seconds resources.getQuantityString(base, seconds, seconds) } } } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/extensions/RemoteViews.kt +5 −0 Original line number Diff line number Diff line package com.simplemobiletools.commons.extensions import android.view.View import android.widget.RemoteViews fun RemoteViews.setBackgroundColor(id: Int, color: Int) { Loading @@ -13,3 +14,7 @@ fun RemoteViews.setTextSize(id: Int, size: Float) { fun RemoteViews.setText(id: Int, text: String) { setTextViewText(id, text) } fun RemoteViews.setVisibleIf(id: Int, beVisible: Boolean) { setViewVisibility(id, if (beVisible) View.VISIBLE else View.GONE) }