From 272d327646abaf68de38c5809d4d69bccf5708c8 Mon Sep 17 00:00:00 2001 From: Javinator9889 Date: Tue, 30 Jun 2020 14:06:11 +0200 Subject: [PATCH] Created new setting for managing the time in between activity transitions notifications --- .../views/fragments/settings/SettingsView.kt | 6 ++- .../data/SettingsLoader.kt | 45 ++++++++++++++++--- .../handwashingreminder/utils/Constants.kt | 1 + .../main/res/layout/preference_edit_text.xml | 31 +++++++++++++ app/src/main/res/values-es/strings.xml | 7 +++ app/src/main/res/values/strings.xml | 7 +++ app/src/main/res/xml/preferences.xml | 9 ++++ 7 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/layout/preference_edit_text.xml diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt index e798545..69e75e7 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt @@ -27,6 +27,7 @@ import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.base.LayoutVisibilityChange import com.javinator9889.handwashingreminder.data.SettingsLoader import com.javinator9889.handwashingreminder.gms.vendor.BillingService +import timber.log.Timber import java.lang.ref.WeakReference class SettingsView : PreferenceFragmentCompat(), @@ -61,7 +62,10 @@ class SettingsView : PreferenceFragmentCompat(), override fun onPreferenceChange( preference: Preference?, newValue: Any? - ): Boolean = loader.onPreferenceChange(preference, newValue) + ): Boolean { + Timber.d("Preference $preference changed - ${preference?.key}") + return loader.onPreferenceChange(preference, newValue) + } override fun onVisibilityChanged(visibility: Int) { if (visibility == View.VISIBLE) diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/SettingsLoader.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/SettingsLoader.kt index d532594..8786c8d 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/data/SettingsLoader.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/SettingsLoader.kt @@ -27,6 +27,7 @@ import androidx.annotation.StringRes import androidx.emoji.text.EmojiCompat import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope +import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.SwitchPreference @@ -293,6 +294,24 @@ class SettingsLoader( ), dispatcher = Dispatchers.Main ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.ACTIVITY_MINIMUM_TIME, + Ionicons.Icon.ion_ios_stopwatch_outline, + onInitialized = { it, _ -> + runCatching { + it as EditTextPreference + val timeText = Integer.parseInt(it.text) + val minutes = resources.getQuantityString( + R.plurals.minutes, + timeText, + timeText + ) + it.summary = + getString(R.string.minimum_time_summ, minutes) + } + }, + onChangeListener = this@with + ).also { deferreds.add(it) } deferreds.awaitAll() arePreferencesInitialized.set(true) } @@ -454,9 +473,10 @@ class SettingsLoader( preference: Preference?, newValue: Any? ): Boolean = - when (preference) { - view.firebaseAnalyticsPreference.get() -> { + when (preference?.key) { + Preferences.ANALYTICS_ENABLED -> { val enabled = newValue as Boolean + Timber.d("Analytics collection is $enabled") with(FirebaseAnalytics.getInstance(view.requireContext())) { setAnalyticsCollectionEnabled(enabled) if (!enabled) @@ -464,15 +484,17 @@ class SettingsLoader( } true } - view.firebasePerformancePreference.get() -> { + Preferences.PERFORMANCE_ENABLED -> { val enabled = newValue as Boolean + Timber.d("Performance is $enabled") with(FirebasePerformance.getInstance()) { isPerformanceCollectionEnabled = enabled } true } - view.adsPreference.get() -> { + Preferences.ADS_ENABLED -> { val enabled = newValue as Boolean + Timber.d("Ads are enabled $enabled") var ret = false val adEnabler = AdsEnabler(HandwashingApplication.instance) if (enabled) { @@ -512,7 +534,7 @@ class SettingsLoader( } ret } - view.donationsPreference.get() -> { + Preferences.DONATIONS -> { Timber.d("Purchase clicked - $newValue") val purchaseId = newValue as String if (isConnected()) @@ -531,6 +553,19 @@ class SettingsLoader( } false } + Preferences.ACTIVITY_MINIMUM_TIME -> runCatching { + preference as EditTextPreference + Timber.d("Changing activity interval - $newValue") + val timeText = Integer.parseInt(newValue as String) + val minutes = view.resources.getQuantityString( + R.plurals.minutes, + timeText, + timeText + ) + preference.summary = + view.getString(R.string.minimum_time_summ, minutes) + true + }.getOrElse { Timber.w(it); false } else -> true } } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt index 9495bb5..8ff8004 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt @@ -42,6 +42,7 @@ object Preferences { ) const val DONATIONS = "donations" const val INITIAL_TUTORIAL_DONE = "app:tutorial:is_done" + const val ACTIVITY_MINIMUM_TIME = "activity:gms:minimumInterval" } object TimeConfig { diff --git a/app/src/main/res/layout/preference_edit_text.xml b/app/src/main/res/layout/preference_edit_text.xml new file mode 100644 index 0000000..fe704d1 --- /dev/null +++ b/app/src/main/res/layout/preference_edit_text.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3f658f5..563cab6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -278,4 +278,11 @@ ¡Añade otra más! 🙌 Bueno, quizás una menos 😅 Información de enfermedades + Tiempo mínimo en minutos… + Tiempo mínimo entre notificaciones + Recibirás notificaciones con un tiempo mínimo de %1$s entre ellas + + %d minuto + %d minutos + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aedd584..ff5966c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -306,4 +306,11 @@ Add another! 🙌 Well, maybe one less 😅 Diseases information + Minimum time in minutes… + Minimum time in between notifications + You will receive notifications with at least %1$s in between them + + %d minute + %d minutes + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 6d6758a..4924349 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -57,6 +57,15 @@ android:key="activity:gms:tracking" android:title="@string/activity_recognition" app:summary="For enabling the activity recognition, you need both Google Play Services and permissions" /> + +