Fix: Handle system-level language management for Android 13+ (API 33)

- Added a check in `prepareAppLanguages()` to skip manual UI language selection for Android 13+ where the system manages app language.
- Updated logic to ensure that the language selection dialog is shown only for devices running Android versions below API 33.
- Retained existing logic for description and secondary language preferences.
This commit is contained in:
Mincheng 2024-10-15 16:57:13 +11:00
parent 952ed1d700
commit 5690942025
3 changed files with 38 additions and 2 deletions

View file

@ -136,7 +136,33 @@ public class SettingsFragment extends PreferenceFragmentCompat {
// Gets current language code from shared preferences
String languageCode;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
// **Added:** Disable the app's UI language preference for Android 13 and above
appUiLanguageListPreference.setEnabled(false);
appUiLanguageListPreference.setSummary(getString(R.string.use_system_language));
} else {
// **Existing code remains for older Android versions**
keyLanguageListPreference = appUiLanguageListPreference.getKey();
languageCode = getCurrentLanguageCode(keyLanguageListPreference);
assert languageCode != null;
if (languageCode.equals("")) {
// If current language code is empty, means none selected by user yet so use phone local
appUiLanguageListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
} else {
// If any language is selected by user previously, use it
Locale defLocale = createLocale(languageCode);
appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
}
appUiLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// **No change:** Existing method call
prepareAppLanguages(appUiLanguageListPreference.getKey());
return true;
}
});
}
/*
appUiLanguageListPreference = findPreference("appUiDefaultLanguagePref");
assert appUiLanguageListPreference != null;
keyLanguageListPreference = appUiLanguageListPreference.getKey();
@ -159,6 +185,9 @@ public class SettingsFragment extends PreferenceFragmentCompat {
}
});
*/
// Continue with other preferences
descriptionLanguageListPreference = findPreference("descriptionDefaultLanguagePref");
assert descriptionLanguageListPreference != null;
keyLanguageListPreference = descriptionLanguageListPreference.getKey();
@ -311,6 +340,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
HashMap<Integer, String> selectedLanguages = new HashMap<>();
if (keyListPreference.equals("appUiDefaultLanguagePref")) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
// For Android 13+, the system manages language, so we skip manual selection
return;
}
assert languageCode != null;
if (languageCode.equals("")) {

View file

@ -22,6 +22,7 @@
<string name="nearby_filter_search">Search View</string>
<string name="nearby_filter_state">Place State</string>
<string name="appwidget_img">Pic of the Day</string>
<string name="use_system_language">Using system language</string>
<!--Other strings-->
<plurals name="uploads_pending_notification_indicator">

View file

@ -12,7 +12,9 @@
android:entries="@array/pref_theme_entries"
android:entryValues="@array/pref_theme_entries_values"
app:useSimpleSummaryProvider="true"
android:defaultValue="0" />
android:dependency="is_below_android_13"
android:defaultValue="0" />
</PreferenceCategory>