mirror of
https://github.com/bitfireAT/davx5-ose
synced 2024-09-16 00:58:27 +00:00
Show CalDAV/CardDAV account settings only when CalDAV/CardDAV is present; update ical4android
This commit is contained in:
parent
c9ccbb73ac
commit
ca3b308018
|
@ -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>>()
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
Loading…
Reference in a new issue