Show CalDAV/CardDAV account settings only when CalDAV/CardDAV is present; update ical4android

This commit is contained in:
Ricki Hirner 2020-06-19 13:46:25 +02:00
parent c9ccbb73ac
commit ca3b308018
4 changed files with 129 additions and 93 deletions

View file

@ -258,102 +258,126 @@ class SettingsActivity: AppCompatActivity() {
})
// preference group: CalDAV
findPreference<EditTextPreference>(getString(R.string.settings_sync_time_range_past_key))!!.let {
model.timeRangePastDays.observe(this, Observer { pastDays ->
if (model.syncIntervalCalendars.value != null) {
it.isVisible = true
if (pastDays != null) {
it.text = pastDays.toString()
it.summary = resources.getQuantityString(R.plurals.settings_sync_time_range_past_days, pastDays, pastDays)
} else {
it.text = null
it.setSummary(R.string.settings_sync_time_range_past_none)
}
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val days = try {
(newValue as String).toInt()
} catch(e: NumberFormatException) {
-1
}
model.updateTimeRangePastDays(if (days < 0) null else days)
false
}
} else
it.isVisible = false
})
}
model.hasCalDav.observe(this, Observer { hasCalDav ->
if (!hasCalDav)
findPreference<PreferenceGroup>(getString(R.string.settings_caldav_key))!!.isVisible = false
else {
findPreference<PreferenceGroup>(getString(R.string.settings_caldav_key))!!.isVisible = true
findPreference<EditTextPreference>(getString(R.string.settings_key_default_alarm))!!.let {
model.defaultAlarmMinBefore.observe(this, Observer { minBefore ->
if (minBefore != null) {
it.text = minBefore.toString()
it.summary = resources.getQuantityString(R.plurals.settings_default_alarm_on, minBefore, minBefore)
} else {
it.text = null
it.summary = getString(R.string.settings_default_alarm_off)
// when model.hasCalDav is available, model.syncInterval* are also available
// (because hasCalDav is calculated from them)
val hasCalendars = model.syncIntervalCalendars.value != null
val hasTasks = model.syncIntervalTasks.value != null
findPreference<EditTextPreference>(getString(R.string.settings_sync_time_range_past_key))!!.let { pref ->
if (hasCalendars)
model.timeRangePastDays.observe(this, Observer { pastDays ->
if (model.syncIntervalCalendars.value != null) {
pref.isVisible = true
if (pastDays != null) {
pref.text = pastDays.toString()
pref.summary = resources.getQuantityString(R.plurals.settings_sync_time_range_past_days, pastDays, pastDays)
} else {
pref.text = null
pref.setSummary(R.string.settings_sync_time_range_past_none)
}
pref.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val days = try {
(newValue as String).toInt()
} catch(e: NumberFormatException) {
-1
}
model.updateTimeRangePastDays(if (days < 0) null else days)
false
}
} else
pref.isVisible = false
})
else
pref.isVisible = false
}
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val minBefore = try {
(newValue as String).toInt()
} catch (e: java.lang.NumberFormatException) {
null
}
model.updateDefaultAlarm(minBefore)
false
findPreference<EditTextPreference>(getString(R.string.settings_key_default_alarm))!!.let { pref ->
if (hasCalendars)
model.defaultAlarmMinBefore.observe(this, Observer { minBefore ->
pref.isVisible = true
if (minBefore != null) {
pref.text = minBefore.toString()
pref.summary = resources.getQuantityString(R.plurals.settings_default_alarm_on, minBefore, minBefore)
} else {
pref.text = null
pref.summary = getString(R.string.settings_default_alarm_off)
}
pref.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val minBefore = try {
(newValue as String).toInt()
} catch (e: java.lang.NumberFormatException) {
null
}
model.updateDefaultAlarm(minBefore)
false
}
})
else
pref.isVisible = false
}
})
}
findPreference<SwitchPreferenceCompat>(getString(R.string.settings_manage_calendar_colors_key))!!.let {
model.manageCalendarColors.observe(this, Observer { manageCalendarColors ->
if (model.syncIntervalCalendars.value != null || model.syncIntervalTasks.value != null) {
it.isVisible = true
it.isEnabled = !settings.containsKey(AccountSettings.KEY_MANAGE_CALENDAR_COLORS)
it.isChecked = manageCalendarColors
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
model.updateManageCalendarColors(newValue as Boolean)
false
}
} else
it.isVisible = false
})
}
findPreference<SwitchPreferenceCompat>(getString(R.string.settings_event_colors_key))!!.let {
model.eventColors.observe(this, Observer { eventColors ->
if (model.syncIntervalCalendars.value != null) {
it.isVisible = true
it.isEnabled = !settings.containsKey(AccountSettings.KEY_EVENT_COLORS)
it.isChecked = eventColors
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
model.updateEventColors(newValue as Boolean)
false
}
} else
it.isVisible = false
})
}
// preference group: CardDAV
findPreference<ListPreference>(getString(R.string.settings_contact_group_method_key))!!.let {
model.contactGroupMethod.observe(this, Observer { groupMethod ->
if (model.syncIntervalContacts.value != null) {
it.isVisible = true
it.value = groupMethod.name
it.summary = it.entry
if (settings.containsKey(AccountSettings.KEY_CONTACT_GROUP_METHOD))
it.isEnabled = false
else {
it.isEnabled = true
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, groupMethod ->
model.updateContactGroupMethod(GroupMethod.valueOf(groupMethod as String))
findPreference<SwitchPreferenceCompat>(getString(R.string.settings_manage_calendar_colors_key))!!.let {
model.manageCalendarColors.observe(this, Observer { manageCalendarColors ->
it.isEnabled = !settings.containsKey(AccountSettings.KEY_MANAGE_CALENDAR_COLORS)
it.isChecked = manageCalendarColors
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
model.updateManageCalendarColors(newValue as Boolean)
false
}
}
} else
it.isVisible = false
})
}
})
}
findPreference<SwitchPreferenceCompat>(getString(R.string.settings_event_colors_key))!!.let { pref ->
if (hasCalendars)
model.eventColors.observe(this, Observer { eventColors ->
pref.isVisible = true
pref.isEnabled = !settings.containsKey(AccountSettings.KEY_EVENT_COLORS)
pref.isChecked = eventColors
pref.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
model.updateEventColors(newValue as Boolean)
false
}
})
else
pref.isVisible = false
}
}
})
// preference group: CardDAV
model.syncIntervalContacts.observe(this, Observer { contactsSyncInterval ->
val hasCardDav = contactsSyncInterval != null
if (!hasCardDav)
findPreference<PreferenceGroup>(getString(R.string.settings_carddav_key))!!.isVisible = false
else {
findPreference<PreferenceGroup>(getString(R.string.settings_carddav_key))!!.isVisible = true
findPreference<ListPreference>(getString(R.string.settings_contact_group_method_key))!!.let {
model.contactGroupMethod.observe(this, Observer { groupMethod ->
if (model.syncIntervalContacts.value != null) {
it.isVisible = true
it.value = groupMethod.name
it.summary = it.entry
if (settings.containsKey(AccountSettings.KEY_CONTACT_GROUP_METHOD))
it.isEnabled = false
else {
it.isEnabled = true
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, groupMethod ->
model.updateContactGroupMethod(GroupMethod.valueOf(groupMethod as String))
false
}
}
} else
it.isVisible = false
})
}
}
})
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
@ -394,6 +418,16 @@ class SettingsActivity: AppCompatActivity() {
val syncIntervalContacts = MutableLiveData<Long>()
val syncIntervalCalendars = MutableLiveData<Long>()
val syncIntervalTasks = MutableLiveData<Long>()
val hasCalDav = object: MediatorLiveData<Boolean>() {
init {
addSource(syncIntervalCalendars) { calculate() }
addSource(syncIntervalTasks) { calculate() }
}
private fun calculate() {
value = syncIntervalCalendars.value != null || syncIntervalTasks.value != null
}
}
val syncWifiOnly = MutableLiveData<Boolean>()
val syncWifiOnlySSIDs = MutableLiveData<List<String>>()

View file

@ -267,6 +267,7 @@
<string name="settings_enter_password">Enter your password:</string>
<string name="settings_certificate_alias_key" translatable="false">certificate_alias</string>
<string name="settings_certificate_alias">Client certificate alias</string>
<string name="settings_caldav_key" translatable="false">caldav</string>
<string name="settings_caldav">CalDAV</string>
<string name="settings_sync_time_range_past_key" translatable="false">time_range_past_days</string>
<string name="settings_sync_time_range_past">Past event time limit</string>
@ -292,6 +293,7 @@
<string name="settings_event_colors">Event color support</string>
<string name="settings_event_colors_on">Sync event colors</string>
<string name="settings_event_colors_off">Do not sync event colors</string>
<string name="settings_carddav_key" translatable="false">carddav</string>
<string name="settings_carddav">CardDAV</string>
<string name="settings_contact_group_method_key" translatable="false">contact_group_method</string>
<string name="settings_contact_group_method">Contact group method</string>

View file

@ -78,7 +78,7 @@
</PreferenceCategory>
<PreferenceCategory
android:key="caldav"
android:key="@string/settings_caldav_key"
android:title="@string/settings_caldav">
<EditTextPreference
@ -113,7 +113,7 @@
</PreferenceCategory>
<PreferenceCategory
android:key="carddav"
android:key="@string/settings_carddav_key"
android:title="@string/settings_carddav">
<ListPreference

@ -1 +1 @@
Subproject commit dc17fcde847b7c21e1d4b43e27697c6dd0848bac
Subproject commit 925536ccd932f3f3f0a382929b059d128342206b