@@ -83,24 +83,7 @@ class BackupFragment :
8383 private var showSidebar = true
8484 private var showCalendarBackup = true
8585
86- private var isCalendarBackupEnabled: Boolean
87- get() = arbitraryDataProvider.getBooleanValue(user, PREFERENCE_CALENDAR_BACKUP_ENABLED )
88- set(enabled) = arbitraryDataProvider.storeOrUpdateKeyValue(
89- user.accountName,
90- PREFERENCE_CALENDAR_BACKUP_ENABLED ,
91- enabled
92- )
93-
94- private var isContactsBackupEnabled: Boolean
95- get() = arbitraryDataProvider.getBooleanValue(user, PREFERENCE_CONTACTS_BACKUP_ENABLED )
96- set(enabled) = arbitraryDataProvider.storeOrUpdateKeyValue(
97- user.accountName,
98- PREFERENCE_CONTACTS_BACKUP_ENABLED ,
99- enabled
100- )
101-
102- // region Lifecycle
103-
86+ // region Lifecycle
10487 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View {
10588 if (themeUtils.themingEnabled(context)) requireContext().theme.applyStyle(R .style.FallbackThemingTheme , true )
10689
@@ -118,7 +101,7 @@ class BackupFragment :
118101 val contactsPreferenceActivity = requireActivity() as ContactsPreferenceActivity
119102 user = contactsPreferenceActivity.user.orElseThrow { RuntimeException () }
120103
121- setupSwitches(user )
104+ setupSwitches()
122105 setupCheckListeners()
123106 setBackupNowButtonVisibility()
124107 setOnClickListeners()
@@ -148,32 +131,54 @@ class BackupFragment :
148131 outState.putSerializable(KEY_CALENDAR_DATE , GregorianCalendar (it.year, it.month, it.dayOfMonth))
149132 }
150133 }
134+ // endregion
151135
152- // endregion
153-
154- // region Setup
136+ // region Setup
137+ private fun setupSwitches () {
138+ val activity = getTypedActivity(ContactsPreferenceActivity ::class .java) ? : return
139+ val user = activity.user?.takeIf { it.isPresent }?.get() ? : return
155140
156- private fun setupSwitches (user : User ) {
157141 binding.dailyBackup.isChecked = arbitraryDataProvider.getBooleanValue(
158142 user,
159143 ContactsPreferenceActivity .PREFERENCE_CONTACTS_AUTOMATIC_BACKUP
160144 )
161- binding.contacts.isChecked = isContactsBackupEnabled && checkContactBackupPermission()
162- binding.calendar.isChecked = isCalendarBackupEnabled && checkCalendarBackupPermission(requireContext())
145+ binding.contacts.isChecked = isBackupEnabled( BackupType . Contacts ) && checkContactBackupPermission()
146+ binding.calendar.isChecked = isBackupEnabled( BackupType . Calendar ) && checkCalendarBackupPermission(requireContext())
163147 binding.calendar.visibility = if (showCalendarBackup) View .VISIBLE else View .GONE
164148 }
165149
150+ private enum class BackupType (val key : String ) {
151+ Calendar (PREFERENCE_CALENDAR_BACKUP_ENABLED ),
152+ Contacts (PREFERENCE_CONTACTS_BACKUP_ENABLED )
153+ }
154+
155+ private fun isBackupEnabled (type : BackupType ): Boolean {
156+ val activity = getTypedActivity(ContactsPreferenceActivity ::class .java) ? : return false
157+ val user = activity.user?.takeIf { it.isPresent }?.get() ? : return false
158+ return arbitraryDataProvider.getBooleanValue(user, type.key)
159+ }
160+
161+ private fun setBackup (type : BackupType , value : Boolean ) {
162+ val activity = getTypedActivity(ContactsPreferenceActivity ::class .java) ? : return
163+ val user = activity.user?.takeIf { it.isPresent }?.get() ? : return
164+ arbitraryDataProvider.storeOrUpdateKeyValue(
165+ user.accountName,
166+ type.key,
167+ value
168+ )
169+ }
170+
166171 private fun setupCheckListeners () {
167172 binding.dailyBackup.setOnCheckedChangeListener { _, isChecked ->
168173 if (checkAndAskForContactsReadPermission()) setAutomaticBackup(isChecked)
169174 }
170175 contactsCheckedListener = CompoundButton .OnCheckedChangeListener { _, isChecked ->
171- isContactsBackupEnabled = isChecked && checkAndAskForContactsReadPermission()
176+ setBackup( BackupType . Contacts , ( isChecked && checkAndAskForContactsReadPermission()) )
172177 setBackupNowButtonVisibility()
173178 setAutomaticBackup(binding.dailyBackup.isChecked)
174179 }
175180 calendarCheckedListener = CompoundButton .OnCheckedChangeListener { _, isChecked ->
176- isCalendarBackupEnabled = isChecked && checkAndAskForCalendarReadPermission()
181+ setBackup( BackupType . Calendar , ( isChecked && checkAndAskForCalendarReadPermission()) )
177182 setBackupNowButtonVisibility()
178183 setAutomaticBackup(binding.dailyBackup.isChecked)
179184 }
@@ -263,19 +268,17 @@ class BackupFragment :
263268 }
264269 return true
265270 }
266-
267271 // endregion
268272
269273 // region Backup operations
270-
271274 private fun backupNow () {
272275 val activity = getTypedActivity(ContactsPreferenceActivity ::class .java) ? : return
273276 val user = activity.user?.takeIf { it.isPresent }?.get() ? : return
274277
275- if (isContactsBackupEnabled && checkContactBackupPermission()) {
278+ if (isBackupEnabled( BackupType . Contacts ) && checkContactBackupPermission()) {
276279 backgroundJobManager.startImmediateContactsBackup(user)
277280 }
278- if (showCalendarBackup && isCalendarBackupEnabled && checkCalendarBackupPermission(requireContext())) {
281+ if (showCalendarBackup && isBackupEnabled( BackupType . Calendar ) && checkCalendarBackupPermission(requireContext())) {
279282 backgroundJobManager.startImmediateCalendarBackup(user)
280283 }
281284 DisplayUtils .showSnackMessage(this , R .string.contacts_preferences_backup_scheduled)
@@ -286,14 +289,14 @@ class BackupFragment :
286289 val user = activity.user?.takeIf { it.isPresent }?.get() ? : return
287290
288291 if (enabled) {
289- if (isContactsBackupEnabled ) {
292+ if (isBackupEnabled( BackupType . Contacts ) ) {
290293 Log_OC .d(TAG , " Scheduling contacts backup job" )
291294 backgroundJobManager.schedulePeriodicContactsBackup(user)
292295 } else {
293296 Log_OC .d(TAG , " Cancelling contacts backup job" )
294297 backgroundJobManager.cancelPeriodicContactsBackup(user)
295298 }
296- if (isCalendarBackupEnabled ) {
299+ if (isBackupEnabled( BackupType . Calendar ) ) {
297300 Log_OC .d(TAG , " Scheduling calendar backup job" )
298301 backgroundJobManager.schedulePeriodicCalendarBackup(user)
299302 } else {
@@ -354,11 +357,9 @@ class BackupFragment :
354357 addAll(storageManager.getFolderContent(calendarFolder, false ))
355358 }
356359 }
357-
358360 // endregion
359361
360362 // region Date picker
361-
362363 private fun openCleanDate () {
363364 if (checkAndAskForCalendarReadPermission() && checkAndAskForContactsReadPermission()) openDate(null )
364365 }
@@ -448,11 +449,9 @@ class BackupFragment :
448449 val calendarBackups = if (showCalendarBackup) inRange.filter { MimeTypeUtil .isCalendar(it) } else emptyList()
449450 return listOfNotNull(contactBackup) + calendarBackups
450451 }
451-
452452 // endregion
453453
454454 // region Permissions
455-
456455 private fun checkAndAskForContactsReadPermission (): Boolean {
457456 if (checkSelfPermission(requireActivity(), Manifest .permission.READ_CONTACTS )) return true
458457 requestContactsPermissionLauncher.launch(Manifest .permission.READ_CONTACTS )
@@ -482,7 +481,11 @@ class BackupFragment :
482481
483482 private val requestContactsPermissionLauncher =
484483 registerForActivityResult(ActivityResultContracts .RequestPermission ()) { isGranted ->
485- if (isGranted) isContactsBackupEnabled = true else resetSwitch(binding.contacts, contactsCheckedListener)
484+ if (isGranted) {
485+ setBackup(BackupType .Contacts , true )
486+ } else {
487+ resetSwitch(binding.contacts, contactsCheckedListener)
488+ }
486489 setBackupNowButtonVisibility()
487490 setAutomaticBackup(binding.dailyBackup.isChecked)
488491 }
@@ -492,14 +495,13 @@ class BackupFragment :
492495 val readGranted = permissions[Manifest .permission.READ_CALENDAR ] == true
493496 val writeGranted = permissions[Manifest .permission.WRITE_CALENDAR ] == true
494497 if (readGranted && writeGranted) {
495- isCalendarBackupEnabled = true
498+ setBackup( BackupType . Calendar , true )
496499 } else {
497500 resetSwitch(binding.calendar, calendarCheckedListener)
498501 }
499502 setBackupNowButtonVisibility()
500503 setAutomaticBackup(binding.dailyBackup.isChecked)
501504 }
502-
503505 // endregion
504506
505507 companion object {
0 commit comments