New location preferences menu

pull/1375/head
Alex Baker 3 years ago
parent 29c566a240
commit fc974bee08

@ -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"
}
}

@ -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

@ -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 <T> getPrefs(c: Class<T>): Map<String, T> {
val result: MutableMap<String, T> = HashMap()

@ -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
}
}

@ -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)

@ -257,4 +257,14 @@
<item>@drawable/ic_google</item>
<item>@drawable/ic_octocat</item>
</array>
<string-array name="map_search_provider_names">
<item>@string/mapbox</item>
<item>@string/map_search_google_places</item>
</string-array>
<string-array name="map_search_provider_values">
<item>0</item>
<item>1</item>
</string-array>
</resources>

@ -397,8 +397,8 @@
<string name="p_linkify_task_list">linkify_task_list</string>
<string name="p_linkify_task_edit">linkify_task_edit</string>
<string name="map_provider_mapbox">Mapbox</string>
<string name="map_provider_google">Google</string>
<string name="p_place_provider">place_provider</string>
<string name="map_search_google_places">Google Places</string>
<string name="p_place_provider">place_provider_v2</string>
<string name="preference_screen">preference_screen</string>
<string name="p_add_to_top">google_tasks_add_to_top</string>
<string name="p_google_tasks_position_hack">google_tasks_position_hack</string>

@ -23,6 +23,11 @@
app:icon="@drawable/ic_outline_edit_24px"
app:title="@string/task_defaults" />
<Preference
app:fragment="org.tasks.preferences.fragments.LocationPreferences"
app:icon="@drawable/ic_outline_place_24px"
app:title="@string/TEA_control_location" />
<Preference
app:fragment="org.tasks.preferences.fragments.DateAndTime"
app:icon="@drawable/ic_outline_schedule_24px"

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="@string/preference_screen">
<PreferenceCategory
android:key="@string/places"
android:title="@string/places">
<ListPreference
android:defaultValue="0"
android:key="@string/p_place_provider"
android:title="@string/map_search_provider"
android:entries="@array/map_search_provider_names"
android:entryValues="@array/map_search_provider_values"
android:summary="%s" />
</PreferenceCategory>
</PreferenceScreen>

@ -187,17 +187,6 @@
</PreferenceCategory>
<PreferenceCategory
android:key="@string/TEA_control_location"
android:title="@string/TEA_control_location">
<Preference
android:defaultValue="-1"
android:key="@string/p_place_provider"
android:title="@string/map_search_provider" />
</PreferenceCategory>
<PreferenceCategory
android:key="@string/settings_localization"
android:title="@string/settings_localization">

Loading…
Cancel
Save