Update locale injections to use language setting

pull/1917/head
Alex Baker 2 years ago
parent 6f73765fd2
commit 9ea490572a

@ -2,6 +2,7 @@ package org.tasks.injection
import android.app.NotificationManager import android.app.NotificationManager
import android.content.Context import android.content.Context
import androidx.appcompat.app.AppCompatDelegate
import com.todoroo.astrid.dao.Database import com.todoroo.astrid.dao.Database
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
@ -24,9 +25,15 @@ import javax.inject.Singleton
@Module @Module
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
class ApplicationModule { class ApplicationModule {
@Provides @Provides
fun getLocale(): Locale = Locale.getDefault() fun getLocale(): Locale {
return AppCompatDelegate.getApplicationLocales()
.toLanguageTags()
.split(",")
.firstOrNull()
?.let { Locale.forLanguageTag(it) }
?: Locale.getDefault()
}
@Provides @Provides
@Singleton @Singleton

@ -4,41 +4,33 @@ import android.app.Activity
import android.app.Dialog import android.app.Dialog
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.xmlpull.v1.XmlPullParser import org.xmlpull.v1.XmlPullParser
import java.util.*
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class LocalePickerDialog : DialogFragment() { class LocalePickerDialog : DialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var locale: Locale
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val locales = ArrayList<Locale>()
val locales = ArrayList<java.util.Locale>()
val selected =
AppCompatDelegate.getApplicationLocales().let { java.util.Locale.forLanguageTag(it.toLanguageTags()) }
val default = java.util.Locale.getDefault()
locales.add(default) // device locale
val tags = ArrayList<String>()
val xrp = resources.getXml(R.xml.locales_config) val xrp = resources.getXml(R.xml.locales_config)
var event = xrp.eventType var event = xrp.eventType
while (event != XmlPullParser.END_DOCUMENT) { while (event != XmlPullParser.END_DOCUMENT) {
if (event == XmlPullParser.START_TAG && xrp.name == "locale") { if (event == XmlPullParser.START_TAG && xrp.name == "locale") {
tags.add(xrp.getAttributeValue(0)) locales.add(Locale.forLanguageTag(xrp.getAttributeValue(0)))
} }
event = xrp.next() event = xrp.next()
} }
for (override in tags) {
locales.add(java.util.Locale.forLanguageTag(override))
}
val display = locales.map { it.getDisplayName(it) } val display = locales.map { it.getDisplayName(it) }
return dialogBuilder return dialogBuilder
.newDialog() .newDialog()
.setSingleChoiceItems(display, display.indexOf(selected.getDisplayName(selected))) { dialog, which -> .setSingleChoiceItems(display, display.indexOf(locale.getDisplayName(locale))) { dialog, which ->
val locale = locales[which].toLanguageTag() val locale = locales[which].toLanguageTag()
val data = Intent().putExtra(EXTRA_LOCALE, locale) val data = Intent().putExtra(EXTRA_LOCALE, locale)
dialog.dismiss() dialog.dismiss()

@ -61,6 +61,7 @@ class LookAndFeel : InjectingPreferenceFragment() {
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var inventory: Inventory @Inject lateinit var inventory: Inventory
@Inject lateinit var locale: Locale
override fun getPreferenceXml() = R.xml.preferences_look_and_feel override fun getPreferenceXml() = R.xml.preferences_look_and_feel
@ -98,8 +99,6 @@ class LookAndFeel : InjectingPreferenceFragment() {
} }
val languagePreference = findPreference(R.string.p_language) val languagePreference = findPreference(R.string.p_language)
val locale =
Locale.forLanguageTag(AppCompatDelegate.getApplicationLocales().toLanguageTags())
languagePreference.summary = locale.getDisplayName(locale) languagePreference.summary = locale.getDisplayName(locale)
languagePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { languagePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val dialog = LocalePickerDialog.newLocalePickerDialog() val dialog = LocalePickerDialog.newLocalePickerDialog()

Loading…
Cancel
Save