diff --git a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt index b68046f08..b127faf83 100644 --- a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt +++ b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt @@ -19,9 +19,9 @@ class Debug : InjectingPreferenceFragment() { @Inject lateinit var billingClient: BillingClient @Inject lateinit var toaster: Toaster - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_debug, rootKey) + override fun getPreferenceXml() = R.xml.preferences_debug + override fun setupPreferences(savedInstanceState: Bundle?) { for (pref in Ints.asList( R.string.p_leakcanary, R.string.p_flipper, diff --git a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt index 5101ba7a0..2bfb28ca3 100644 --- a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt +++ b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt @@ -3,7 +3,11 @@ package org.tasks.injection import android.app.Activity import android.content.DialogInterface import android.content.Intent +import android.graphics.drawable.Drawable +import android.os.Bundle import androidx.annotation.StringRes +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceGroup @@ -16,13 +20,37 @@ import org.tasks.dialogs.DialogBuilder import org.tasks.preferences.Device import javax.inject.Inject + abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { + companion object { + fun tintIcons(pref: Preference, color: Int) { + if (pref is PreferenceGroup) { + for (i in 0 until pref.preferenceCount) { + tintIcons(pref.getPreference(i), color) + } + } else { + val icon: Drawable? = pref.icon + if (icon != null) { + DrawableCompat.setTint(icon, color) + } + } + } + } + @Inject lateinit var device: Device @Inject lateinit var dialogBuilder: DialogBuilder private var injected = false + final override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(getPreferenceXml(), rootKey) + + tintIcons(preferenceScreen, ContextCompat.getColor(context!!, R.color.icon_tint)) + + setupPreferences(savedInstanceState) + } + override fun onAttach(activity: Activity) { super.onAttach(activity) if (!injected) { @@ -76,6 +104,10 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { open fun getMenu() = R.menu.menu_preferences + abstract fun getPreferenceXml(): Int + + abstract fun setupPreferences(savedInstanceState: Bundle?) + protected fun recreate() { activity!!.recreate() } diff --git a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt index a42fdfbca..9689b33a6 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt @@ -46,9 +46,9 @@ class Advanced : InjectingPreferenceFragment() { private lateinit var disposables: CompositeDisposable private lateinit var calendarReminderPreference: SwitchPreferenceCompat - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_advanced, rootKey) + override fun getPreferenceXml() = R.xml.preferences_advanced + override fun setupPreferences(savedInstanceState: Bundle?) { findPreference(R.string.EPr_manage_purge_deleted) .setOnPreferenceClickListener { purgeDeletedTasks() diff --git a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt index 530db928e..786edf1a3 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt @@ -35,9 +35,9 @@ class Backups : InjectingPreferenceFragment() { @Inject lateinit var toaster: Toaster @Inject lateinit var googleAccountManager: GoogleAccountManager - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_backups, rootKey) + override fun getPreferenceXml() = R.xml.preferences_backups + override fun setupPreferences(savedInstanceState: Bundle?) { initializeBackupDirectory() findPreference(R.string.backup_BAc_import) diff --git a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt index 1cb86026a..fa5a5f062 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt @@ -23,9 +23,9 @@ class DashClock : InjectingPreferenceFragment() { @Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var inventory: Inventory - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_dashclock, rootKey) + override fun getPreferenceXml() = R.xml.preferences_dashclock + override fun setupPreferences(savedInstanceState: Bundle?) { findPreference(R.string.p_dashclock_filter) .setOnPreferenceClickListener { val intent = Intent(context, FilterSelectionActivity::class.java) diff --git a/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt b/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt index 4d6c154ff..c81e0f000 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt @@ -16,9 +16,9 @@ class HelpAndFeedback : InjectingPreferenceFragment() { @Inject lateinit var billingClient: BillingClient @Inject lateinit var inventory: Inventory - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.help_and_feedback, rootKey) + override fun getPreferenceXml() = R.xml.help_and_feedback + override fun setupPreferences(savedInstanceState: Bundle?) { findPreference(R.string.changelog).summary = getString(R.string.version_string, BuildConfig.VERSION_NAME) diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt index 0ee906941..280d67aed 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -68,9 +68,9 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange @Inject lateinit var inventory: Inventory @Inject lateinit var toaster: Toaster - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_look_and_feel, rootKey) + override fun getPreferenceXml() = R.xml.preferences_look_and_feel + override fun setupPreferences(savedInstanceState: Bundle?) { setupColorPreference(R.string.p_theme, themeBase.name, THEMES, REQUEST_THEME_PICKER) setupColorPreference(R.string.p_theme_color, themeColor.name, COLORS, REQUEST_COLOR_PICKER) setupColorPreference( diff --git a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt index 5a46a0777..47b812776 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt @@ -9,9 +9,9 @@ import org.tasks.injection.InjectingPreferenceFragment class MainSettingsFragment : InjectingPreferenceFragment() { override fun inject(component: FragmentComponent) = component.inject(this) - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences, rootKey) + override fun getPreferenceXml() = R.xml.preferences + override fun setupPreferences(savedInstanceState: Bundle?) { requires(BuildConfig.DEBUG, R.string.debug) } } diff --git a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt index a12f8f9b7..3f8e9dd3a 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt @@ -44,9 +44,9 @@ class Notifications : InjectingPreferenceFragment() { @Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var voiceOutputAssistant: VoiceOutputAssistant - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_notifications, rootKey) + override fun getPreferenceXml() = R.xml.preferences_notifications + override fun setupPreferences(savedInstanceState: Bundle?) { rescheduleNotificationsOnChange( false, R.string.p_rmd_time, diff --git a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt index e1f3d9520..7daa7b50f 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt @@ -51,9 +51,9 @@ class ScrollableWidget : InjectingPreferenceFragment() { private lateinit var widgetPreferences: WidgetPreferences private var appWidgetId = 0 - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_widget, rootKey) + override fun getPreferenceXml() = R.xml.preferences_widget + override fun setupPreferences(savedInstanceState: Bundle?) { appWidgetId = arguments!!.getInt(EXTRA_WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) widgetPreferences = WidgetPreferences(context, preferences, appWidgetId) diff --git a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt index 001fc1998..c56916de0 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt @@ -45,9 +45,9 @@ class Synchronization : InjectingPreferenceFragment() { @Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var defaultFilterProvider: DefaultFilterProvider - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_synchronization, rootKey) + override fun getPreferenceXml() = R.xml.preferences_synchronization + override fun setupPreferences(savedInstanceState: Bundle?) { findPreference(R.string.p_background_sync_unmetered_only) .setOnPreferenceChangeListener { _: Preference?, o: Any? -> workManager.updateBackgroundSync(null, null, o as Boolean?) diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt index 2868965be..784f7ae7d 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt @@ -33,9 +33,9 @@ class TaskDefaults : InjectingPreferenceFragment() { private lateinit var defaultCalendarPref: Preference - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_task_defaults, rootKey) + override fun getPreferenceXml() = R.xml.preferences_task_defaults + override fun setupPreferences(savedInstanceState: Bundle?) { defaultCalendarPref = findPreference(R.string.gcal_p_default) defaultCalendarPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { if (permissionRequester.requestCalendarPermissions()) { @@ -59,7 +59,7 @@ class TaskDefaults : InjectingPreferenceFragment() { } updateRemoteListSummary() - requires(device.supportsGeofences(), R.string.p_default_location_reminder_key) + requires(device.supportsGeofences(), R.string.p_default_location_reminder_key, R.string.p_default_location_radius) } override fun onRequestPermissionsResult( diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt index 91b93f2e4..57f0f98ff 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt @@ -36,9 +36,9 @@ class TaskerListNotification : InjectingPreferenceFragment() { var filter: Filter? = null var cancelled: Boolean = false - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences_tasker, rootKey) + override fun getPreferenceXml() = R.xml.preferences_tasker + override fun setupPreferences(savedInstanceState: Bundle?) { filter = if (savedInstanceState == null) { defaultFilterProvider.getFilterFromPreference(arguments?.getString(EXTRA_FILTER)) } else { diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 7f9a5eb25..6eda4faef 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,9 +1,5 @@ - -