Refactored option creating
This commit is contained in:
parent
76e1363a6d
commit
7767fdaf62
|
@ -22,8 +22,7 @@ import com.simplemobiletools.calendar.pro.models.Widget
|
||||||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
import kotlinx.android.synthetic.main.widget_config_list.*
|
import kotlinx.android.synthetic.main.widget_config_list.*
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
|
@ -36,9 +35,7 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||||
private var mBgColor = 0
|
private var mBgColor = 0
|
||||||
private var mTextColorWithoutTransparency = 0
|
private var mTextColorWithoutTransparency = 0
|
||||||
private var mTextColor = 0
|
private var mTextColor = 0
|
||||||
private var selectedPeriodOption = 0
|
private var selectedPeriodOption = YEAR_SECONDS
|
||||||
private var selectedPeriodValue: Int? = null
|
|
||||||
private var selectedPeriodValueType: Int? = null
|
|
||||||
|
|
||||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
useDynamicTheme = false
|
useDynamicTheme = false
|
||||||
|
@ -104,37 +101,36 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun calculatePeriod(selectedPeriodValue: Int, selectedPeriodValueType: Int): Int {
|
|
||||||
return when (selectedPeriodValueType) {
|
|
||||||
R.id.dialog_radio_days -> selectedPeriodValue * DAY
|
|
||||||
R.id.dialog_radio_weeks -> selectedPeriodValue * WEEK
|
|
||||||
else -> selectedPeriodValue * MONTH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getCustomRadioItems(): List<RadioItem> {
|
|
||||||
val items = ArrayList<RadioItem>()
|
|
||||||
items.add(RadioItem(calculatePeriod(1, R.id.dialog_radio_weeks), resources.getQuantityString(R.plurals.within_the_next_weeks, 1, 1)))
|
|
||||||
items.add(RadioItem(calculatePeriod(1, R.id.dialog_radio_months), resources.getQuantityString(R.plurals.within_the_next_months, 1, 1)))
|
|
||||||
return items
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showPeriodSelector() {
|
private fun showPeriodSelector() {
|
||||||
hideKeyboard()
|
hideKeyboard()
|
||||||
|
val seconds = TreeSet<Int>()
|
||||||
|
seconds.apply {
|
||||||
|
add(EVENT_PERIOD_TODAY)
|
||||||
|
add(WEEK_SECONDS)
|
||||||
|
add(MONTH_SECONDS)
|
||||||
|
add(YEAR_SECONDS)
|
||||||
|
add(selectedPeriodOption)
|
||||||
|
}
|
||||||
|
|
||||||
|
val items = ArrayList<RadioItem>(seconds.size)
|
||||||
|
seconds.mapIndexedTo(items) { index, value ->
|
||||||
|
RadioItem(index, getFormattedSeconds(value), value)
|
||||||
|
}
|
||||||
|
|
||||||
|
var selectedIndex = 0
|
||||||
|
seconds.forEachIndexed { index, value ->
|
||||||
|
if (value == selectedPeriodOption) {
|
||||||
|
selectedIndex = index
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val items = ArrayList<RadioItem>()
|
|
||||||
items.add(RadioItem(EVENT_PERIOD_TODAY, getString(R.string.today_only)))
|
|
||||||
items.addAll(getCustomRadioItems())
|
|
||||||
items.add(RadioItem(EVENT_PERIOD_ONE_YEAR, getString(R.string.within_the_next_one_year)))
|
|
||||||
items.add(RadioItem(EVENT_PERIOD_CUSTOM, getString(R.string.within_the_next)))
|
items.add(RadioItem(EVENT_PERIOD_CUSTOM, getString(R.string.within_the_next)))
|
||||||
|
|
||||||
val selectedOption = if (items.any { it.id === selectedPeriodOption }) selectedPeriodOption else EVENT_PERIOD_CUSTOM
|
RadioGroupDialog(this, items, selectedIndex, showOKButton = true, cancelCallback = null) {
|
||||||
|
|
||||||
RadioGroupDialog(this, items, selectedOption, showOKButton = true, cancelCallback = null) {
|
|
||||||
val option = it as Int
|
val option = it as Int
|
||||||
if (option == EVENT_PERIOD_CUSTOM) {
|
if (option == EVENT_PERIOD_CUSTOM) {
|
||||||
CustomPeriodPickerDialog(this, selectedPeriodValue, selectedPeriodValueType) { value: Int, type: Int ->
|
CustomPeriodPickerDialog(this) {
|
||||||
updateSelectedPeriod(option, value, type)
|
updateSelectedPeriod(it)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
updateSelectedPeriod(option)
|
updateSelectedPeriod(option)
|
||||||
|
@ -142,33 +138,31 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSelectedPeriod(selectedPeriod: Int, periodValue: Int? = null, periodType: Int? = null) {
|
private fun updateSelectedPeriod(selectedPeriod: Int) {
|
||||||
selectedPeriodOption = selectedPeriod
|
selectedPeriodOption = selectedPeriod
|
||||||
when (selectedPeriodOption) {
|
when (selectedPeriod) {
|
||||||
EVENT_PERIOD_ONE_YEAR -> period_picker_value.setText(R.string.within_the_next_one_year)
|
0 -> {
|
||||||
EVENT_PERIOD_TODAY -> period_picker_value.setText(R.string.today_only)
|
selectedPeriodOption = YEAR_SECONDS
|
||||||
EVENT_PERIOD_CUSTOM -> {
|
|
||||||
if (periodValue != null && periodValue != 0 && periodType != null) {
|
|
||||||
selectedPeriodValue = periodValue
|
|
||||||
selectedPeriodValueType = periodType
|
|
||||||
selectedPeriodOption = calculatePeriod(selectedPeriodValue!!, selectedPeriodValueType!!)
|
|
||||||
when (periodType) {
|
|
||||||
R.id.dialog_radio_days -> period_picker_value.setText(resources.getQuantityString(R.plurals.within_the_next_days, periodValue, periodValue))
|
|
||||||
R.id.dialog_radio_weeks -> period_picker_value.setText(resources.getQuantityString(R.plurals.within_the_next_weeks, periodValue, periodValue))
|
|
||||||
R.id.dialog_radio_months -> period_picker_value.setText(resources.getQuantityString(R.plurals.within_the_next_months, periodValue, periodValue))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
selectedPeriodOption = EVENT_PERIOD_ONE_YEAR
|
|
||||||
period_picker_value.setText(R.string.within_the_next_one_year)
|
period_picker_value.setText(R.string.within_the_next_one_year)
|
||||||
}
|
}
|
||||||
}
|
EVENT_PERIOD_TODAY -> period_picker_value.setText(R.string.today_only)
|
||||||
else -> {
|
else -> {
|
||||||
val item = getCustomRadioItems().find { it.id == selectedPeriodOption }
|
period_picker_value.setText(getFormattedSeconds(selectedPeriodOption))
|
||||||
period_picker_value.setText(item?.title)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getFormattedSeconds(seconds: Int): String = if (seconds === EVENT_PERIOD_TODAY) {
|
||||||
|
getString(R.string.today_only)
|
||||||
|
} else {
|
||||||
|
when {
|
||||||
|
seconds == YEAR_SECONDS -> getString(R.string.within_the_next_one_year)
|
||||||
|
seconds % MONTH_SECONDS == 0 -> resources.getQuantityString(R.plurals.within_the_next_months, seconds / MONTH_SECONDS, seconds / MONTH_SECONDS)
|
||||||
|
seconds % WEEK_SECONDS == 0 -> resources.getQuantityString(R.plurals.within_the_next_weeks, seconds / WEEK_SECONDS, seconds / WEEK_SECONDS)
|
||||||
|
else -> resources.getQuantityString(R.plurals.within_the_next_days, seconds / DAY_SECONDS, seconds / DAY_SECONDS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun storeWidgetColors() {
|
private fun storeWidgetColors() {
|
||||||
config.apply {
|
config.apply {
|
||||||
widgetBgColor = mBgColor
|
widgetBgColor = mBgColor
|
||||||
|
|
|
@ -159,11 +159,11 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
|
||||||
|
|
||||||
override fun onDataSetChanged() {
|
override fun onDataSetChanged() {
|
||||||
initConfigValues()
|
initConfigValues()
|
||||||
val period = intent.getIntExtra(EVENT_LIST_PERIOD, EVENT_PERIOD_ONE_YEAR)
|
val period = intent.getIntExtra(EVENT_LIST_PERIOD, 0)
|
||||||
val currentDate = DateTime()
|
val currentDate = DateTime()
|
||||||
val fromTS = currentDate.seconds() - context.config.displayPastEvents * 60
|
val fromTS = currentDate.seconds() - context.config.displayPastEvents * 60
|
||||||
val toTS = when (period) {
|
val toTS = when (period) {
|
||||||
EVENT_PERIOD_ONE_YEAR -> currentDate.plusYears(1).seconds()
|
0 -> currentDate.plusYears(1).seconds()
|
||||||
EVENT_PERIOD_TODAY -> currentDate.withTime(23, 59, 59, 999).seconds()
|
EVENT_PERIOD_TODAY -> currentDate.withTime(23, 59, 59, 999).seconds()
|
||||||
else -> currentDate.plusSeconds(period).seconds()
|
else -> currentDate.plusSeconds(period).seconds()
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,15 +5,18 @@ import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.simplemobiletools.calendar.pro.R
|
import com.simplemobiletools.calendar.pro.R
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.DAY_SECONDS
|
||||||
|
import com.simplemobiletools.commons.helpers.MONTH_SECONDS
|
||||||
|
import com.simplemobiletools.commons.helpers.WEEK_SECONDS
|
||||||
import kotlinx.android.synthetic.main.dialog_custom_period_picker.view.*
|
import kotlinx.android.synthetic.main.dialog_custom_period_picker.view.*
|
||||||
|
|
||||||
class CustomPeriodPickerDialog(val activity: Activity, val initialValue: Int?, val initialType: Int?, val callback: (value: Int, selectedType: Int) -> Unit) {
|
class CustomPeriodPickerDialog(val activity: Activity, val callback: (value: Int) -> Unit) {
|
||||||
var dialog: AlertDialog
|
var dialog: AlertDialog
|
||||||
var view = (activity.layoutInflater.inflate(R.layout.dialog_custom_period_picker, null) as ViewGroup)
|
var view = (activity.layoutInflater.inflate(R.layout.dialog_custom_period_picker, null) as ViewGroup)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
view.dialog_custom_period_value.setText(initialValue?.toString() ?: "")
|
view.dialog_custom_period_value.setText("")
|
||||||
view.dialog_radio_view.check(initialType ?: R.id.dialog_radio_days)
|
view.dialog_radio_view.check(R.id.dialog_radio_days)
|
||||||
dialog = AlertDialog.Builder(activity)
|
dialog = AlertDialog.Builder(activity)
|
||||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmReminder() }
|
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmReminder() }
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
|
@ -24,11 +27,17 @@ class CustomPeriodPickerDialog(val activity: Activity, val initialValue: Int?, v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun calculatePeriod(selectedPeriodValue: Int, selectedPeriodValueType: Int) = when (selectedPeriodValueType) {
|
||||||
|
R.id.dialog_radio_days -> selectedPeriodValue * DAY_SECONDS
|
||||||
|
R.id.dialog_radio_weeks -> selectedPeriodValue * WEEK_SECONDS
|
||||||
|
else -> selectedPeriodValue * MONTH_SECONDS
|
||||||
|
}
|
||||||
|
|
||||||
private fun confirmReminder() {
|
private fun confirmReminder() {
|
||||||
val value = view.dialog_custom_period_value.value
|
val value = view.dialog_custom_period_value.value
|
||||||
val type = view.dialog_radio_view.checkedRadioButtonId
|
val type = view.dialog_radio_view.checkedRadioButtonId
|
||||||
val period = Integer.valueOf(if (value.isEmpty()) "0" else value)
|
val period = calculatePeriod(Integer.valueOf(if (value.isEmpty()) "0" else value), type)
|
||||||
callback(period, type)
|
callback(period)
|
||||||
activity.hideKeyboard()
|
activity.hideKeyboard()
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,6 @@ const val WEEK = 604800
|
||||||
const val MONTH = 2592001 // exact value not taken into account, Joda is used for adding months and years
|
const val MONTH = 2592001 // exact value not taken into account, Joda is used for adding months and years
|
||||||
const val YEAR = 31536000
|
const val YEAR = 31536000
|
||||||
|
|
||||||
const val EVENT_PERIOD_ONE_YEAR = 0
|
|
||||||
const val EVENT_PERIOD_TODAY = -1
|
const val EVENT_PERIOD_TODAY = -1
|
||||||
const val EVENT_PERIOD_CUSTOM = -2
|
const val EVENT_PERIOD_CUSTOM = -2
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue