From fc974bee083c8db4c63e40941f4e83ffc734dce2 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 16 Feb 2021 09:46:23 -0600 Subject: [PATCH] New location preferences menu --- app/src/main/java/org/tasks/Tasks.kt | 5 ++ .../injection/InjectingPreferenceFragment.kt | 4 ++ .../java/org/tasks/preferences/Preferences.kt | 3 +- .../fragments/LocationPreferences.kt | 48 ++++++++++++++ .../preferences/fragments/LookAndFeel.kt | 62 ------------------- app/src/main/res/values/arrays.xml | 10 +++ app/src/main/res/values/keys.xml | 4 +- app/src/main/res/xml/preferences.xml | 5 ++ app/src/main/res/xml/preferences_location.xml | 19 ++++++ .../res/xml/preferences_look_and_feel.xml | 11 ---- 10 files changed, 95 insertions(+), 76 deletions(-) create mode 100644 app/src/main/java/org/tasks/preferences/fragments/LocationPreferences.kt create mode 100644 app/src/main/res/xml/preferences_location.xml diff --git a/app/src/main/java/org/tasks/Tasks.kt b/app/src/main/java/org/tasks/Tasks.kt index 796c7c92b..6ddb1b0be 100644 --- a/app/src/main/java/org/tasks/Tasks.kt +++ b/app/src/main/java/org/tasks/Tasks.kt @@ -106,4 +106,9 @@ class Tasks : Application(), Configuration.Provider { intent) } } + + companion object { + const val IS_GOOGLE_PLAY = BuildConfig.FLAVOR == "googleplay" + const val IS_GENERIC = BuildConfig.FLAVOR == "generic" + } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt index 3973af768..16cb6f1b6 100644 --- a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt +++ b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt @@ -90,6 +90,10 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { } } + protected fun disable(vararg resIds: Int) = resIds.forEach { + findPreference(it).isEnabled = false + } + open fun getMenu() = R.menu.menu_preferences abstract fun getPreferenceXml(): Int diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index 14821c478..68f939478 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -172,6 +172,7 @@ class Preferences @JvmOverloads constructor( PreferenceManager.setDefaultValues(context, R.xml.preferences_look_and_feel, true) PreferenceManager.setDefaultValues(context, R.xml.preferences_notifications, true) PreferenceManager.setDefaultValues(context, R.xml.preferences_task_defaults, true) + PreferenceManager.setDefaultValues(context, R.xml.preferences_location, true) PreferenceManager.setDefaultValues(context, R.xml.preferences_date_and_time, true) PreferenceManager.setDefaultValues(context, R.xml.preferences_navigation_drawer, true) PreferenceManager.setDefaultValues(context, R.xml.preferences_backups, true) @@ -419,7 +420,7 @@ class Preferences @JvmOverloads constructor( syncFlags.forEach { setBoolean(it, value) } } - fun useGooglePlaces(): Boolean = getInt(R.string.p_place_provider, 0) == 1 + fun useGooglePlaces(): Boolean = getIntegerFromString(R.string.p_place_provider, 0) == 1 fun getPrefs(c: Class): Map { val result: MutableMap = HashMap() diff --git a/app/src/main/java/org/tasks/preferences/fragments/LocationPreferences.kt b/app/src/main/java/org/tasks/preferences/fragments/LocationPreferences.kt new file mode 100644 index 000000000..42a46b438 --- /dev/null +++ b/app/src/main/java/org/tasks/preferences/fragments/LocationPreferences.kt @@ -0,0 +1,48 @@ +package org.tasks.preferences.fragments + +import android.os.Bundle +import androidx.preference.Preference +import dagger.hilt.android.AndroidEntryPoint +import org.tasks.R +import org.tasks.Tasks.Companion.IS_GOOGLE_PLAY +import org.tasks.billing.Inventory +import org.tasks.gtasks.PlayServices +import org.tasks.injection.InjectingPreferenceFragment +import org.tasks.ui.Toaster +import javax.inject.Inject + +@AndroidEntryPoint +class LocationPreferences : InjectingPreferenceFragment() { + + @Inject lateinit var playServices: PlayServices + @Inject lateinit var inventory: Inventory + @Inject lateinit var toaster: Toaster + + override fun getPreferenceXml() = R.xml.preferences_location + + override suspend fun setupPreferences(savedInstanceState: Bundle?) { + if (IS_GOOGLE_PLAY) { + findPreference(R.string.p_place_provider) + .setOnPreferenceChangeListener(this::onPlaceSearchChanged) + } else { + disable( + R.string.p_place_provider, + ) + } + } + + private fun onPlaceSearchChanged(preference: Preference, newValue: Any): Boolean = + if (newValue.toString().toIntOrNull() ?: 0 == 1) { + if (!playServices.refreshAndCheck()) { + playServices.resolve(activity) + false + } else if (!inventory.hasPro) { + toaster.longToast(R.string.requires_pro_subscription) + false + } else { + true + } + } else { + true + } +} \ No newline at end of file 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 2aa314e94..156aea46b 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -2,7 +2,6 @@ package org.tasks.preferences.fragments import android.app.Activity.RESULT_OK import android.content.ComponentName -import android.content.DialogInterface import android.content.Intent import android.content.pm.PackageManager import android.content.res.Configuration @@ -15,7 +14,6 @@ import androidx.preference.SwitchPreferenceCompat import com.todoroo.astrid.api.Filter import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch -import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.Strings.isNullOrEmpty @@ -29,7 +27,6 @@ import org.tasks.dialogs.ColorPickerAdapter import org.tasks.dialogs.ColorWheelPicker import org.tasks.dialogs.ThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog -import org.tasks.gtasks.PlayServices import org.tasks.injection.InjectingPreferenceFragment import org.tasks.locale.Locale import org.tasks.locale.LocalePickerDialog @@ -43,8 +40,6 @@ import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor.getLauncherColor import org.tasks.ui.ChipProvider import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE -import org.tasks.ui.SingleCheckedArrayAdapter -import org.tasks.ui.Toaster import javax.inject.Inject private const val REQUEST_THEME_PICKER = 10001 @@ -67,9 +62,7 @@ class LookAndFeel : InjectingPreferenceFragment() { @Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var locale: Locale @Inject lateinit var defaultFilterProvider: DefaultFilterProvider - @Inject lateinit var playServices: PlayServices @Inject lateinit var inventory: Inventory - @Inject lateinit var toaster: Toaster @Inject lateinit var chipProvider: ChipProvider override fun getPreferenceXml() = R.xml.preferences_look_and_feel @@ -132,11 +125,6 @@ class LookAndFeel : InjectingPreferenceFragment() { dialog.show(parentFragmentManager, FRAG_TAG_LOCALE_PICKER) false } - - @Suppress("ConstantConditionIf") - if (BuildConfig.FLAVOR != "googleplay") { - removeGroup(R.string.TEA_control_location) - } } override fun onResume() { @@ -155,11 +143,6 @@ class LookAndFeel : InjectingPreferenceFragment() { REQUEST_ACCENT_PICKER ) updateLauncherPreference() - - @Suppress("ConstantConditionIf") - if (BuildConfig.FLAVOR == "googleplay") { - setupLocationPickers() - } } private fun updateLauncherPreference() { @@ -172,51 +155,6 @@ class LookAndFeel : InjectingPreferenceFragment() { ) } - private fun setupLocationPickers() { - val choices = - listOf(getString(R.string.map_provider_mapbox), getString(R.string.map_provider_google)) - val singleCheckedArrayAdapter = SingleCheckedArrayAdapter(requireContext(), choices) - - val placeProviderPreference = findPreference(R.string.p_place_provider) - placeProviderPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { - dialogBuilder - .newDialog() - .setSingleChoiceItems( - singleCheckedArrayAdapter, - getPlaceProvider() - ) { dialog: DialogInterface, which: Int -> - if (which == 1) { - if (!playServices.refreshAndCheck()) { - playServices.resolve(activity) - dialog.dismiss() - return@setSingleChoiceItems - } - if (!inventory.hasPro) { - toaster.longToast(R.string.requires_pro_subscription) - dialog.dismiss() - return@setSingleChoiceItems - } - } - preferences.setInt(R.string.p_place_provider, which) - placeProviderPreference.summary = choices[which] - dialog.dismiss() - } - .setNegativeButton(R.string.cancel, null) - .show() - false - } - val placeProvider: Int = getPlaceProvider() - placeProviderPreference.summary = choices[placeProvider] - } - - private fun getPlaceProvider(): Int = - if (playServices.isPlayServicesAvailable && inventory.hasPro) - preferences.getInt( - R.string.p_place_provider, - 0 - ) - else 0 - private fun setBaseTheme(index: Int) { activity?.intent?.removeExtra(EXTRA_THEME_OVERRIDE) preferences.setInt(R.string.p_theme, index) diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 0769267eb..b2794520f 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -257,4 +257,14 @@ @drawable/ic_google @drawable/ic_octocat + + + @string/mapbox + @string/map_search_google_places + + + + 0 + 1 + \ No newline at end of file diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 96367fbf7..eb22381f0 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -397,8 +397,8 @@ linkify_task_list linkify_task_edit Mapbox - Google - place_provider + Google Places + place_provider_v2 preference_screen google_tasks_add_to_top google_tasks_position_hack diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 46b086861..730143ee4 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -23,6 +23,11 @@ app:icon="@drawable/ic_outline_edit_24px" app:title="@string/task_defaults" /> + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/preferences_look_and_feel.xml b/app/src/main/res/xml/preferences_look_and_feel.xml index ef7ec2361..37d1f7c67 100644 --- a/app/src/main/res/xml/preferences_look_and_feel.xml +++ b/app/src/main/res/xml/preferences_look_and_feel.xml @@ -187,17 +187,6 @@ - - - - - -