From fc6f09f097a1f7954366153b0d0b294bbc6d65e1 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 14 Apr 2025 00:45:15 -0500 Subject: [PATCH] Use system language picker on Android 33+ --- .../tasks/preferences/fragments/LookAndFeel.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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 fec1f5511..bb51fc164 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -4,8 +4,10 @@ import android.app.Activity.RESULT_OK import android.content.ComponentName import android.content.Intent import android.content.pm.PackageManager +import android.net.Uri import android.os.Bundle import android.os.Handler +import android.provider.Settings import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatDelegate import androidx.core.os.LocaleListCompat @@ -13,6 +15,7 @@ import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.google.android.material.color.DynamicColors +import com.todoroo.andlib.utility.AndroidUtilities.atLeastTiramisu import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import org.tasks.LocalBroadcastManager @@ -84,9 +87,16 @@ class LookAndFeel : InjectingPreferenceFragment() { val languagePreference = findPreference(R.string.p_language) languagePreference.summary = locale.getDisplayName(locale) languagePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { - val dialog = LocalePickerDialog.newLocalePickerDialog() - dialog.setTargetFragment(this, REQUEST_LOCALE) - dialog.show(parentFragmentManager, FRAG_TAG_LOCALE_PICKER) + if (atLeastTiramisu()) { + startActivity( + Intent(Settings.ACTION_APP_LOCALE_SETTINGS) + .setData(Uri.fromParts("package", requireContext().packageName, null)) + ) + } else { + val dialog = LocalePickerDialog.newLocalePickerDialog() + dialog.setTargetFragment(this, REQUEST_LOCALE) + dialog.show(parentFragmentManager, FRAG_TAG_LOCALE_PICKER) + } false }