change the original logic of changing language in app, to adapt to google apl

This commit is contained in:
u7759158 2024-10-18 02:00:18 +11:00
parent 3dce3b189a
commit 8f25fda19a
2 changed files with 17 additions and 18 deletions

View file

@ -124,7 +124,7 @@ public class MainActivity extends BaseActivity
setContentView(binding.getRoot()); setContentView(binding.getRoot());
setSupportActionBar(binding.toolbarBinding.toolbar); setSupportActionBar(binding.toolbarBinding.toolbar);
tabLayout = binding.fragmentMainNavTabLayout; tabLayout = binding.fragmentMainNavTabLayout;
loadLocale(); // loadLocale();
binding.toolbarBinding.toolbar.setNavigationOnClickListener(view -> { binding.toolbarBinding.toolbar.setNavigationOnClickListener(view -> {
onSupportNavigateUp(); onSupportNavigateUp();
@ -485,13 +485,13 @@ public class MainActivity extends BaseActivity
/** /**
* Load default language in onCreate from SharedPreferences * Load default language in onCreate from SharedPreferences
*/ */
private void loadLocale() { // private void loadLocale() {
final SharedPreferences preferences = getSharedPreferences("Settings", // final SharedPreferences preferences = getSharedPreferences("Settings",
Activity.MODE_PRIVATE); // Activity.MODE_PRIVATE);
final String language = preferences.getString("language", ""); // final String language = preferences.getString("language", "");
final SettingsFragment settingsFragment = new SettingsFragment(); // final SettingsFragment settingsFragment = new SettingsFragment();
settingsFragment.setLocale(this, language); // settingsFragment.setLocale(this, language);
} // }
public NavTabLayout.OnNavigationItemSelectedListener getNavListener() { public NavTabLayout.OnNavigationItemSelectedListener getNavListener() {
return navListener; return navListener;

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons.settings;
import static android.content.Context.MODE_PRIVATE; import static android.content.Context.MODE_PRIVATE;
import android.Manifest.permission; import android.Manifest.permission;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.content.Intent; import android.content.Intent;
@ -21,6 +22,8 @@ import android.widget.TextView;
import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.os.LocaleListCompat;
import androidx.preference.ListPreference; import androidx.preference.ListPreference;
import androidx.preference.MultiSelectListPreference; import androidx.preference.MultiSelectListPreference;
import androidx.preference.Preference; import androidx.preference.Preference;
@ -267,6 +270,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
); );
} }
@SuppressLint("RestrictedApi")
@Override @Override
protected Adapter onCreateAdapter(final PreferenceScreen preferenceScreen) { protected Adapter onCreateAdapter(final PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) { return new PreferenceGroupAdapter(preferenceScreen) {
@ -314,7 +318,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
assert languageCode != null; assert languageCode != null;
if (languageCode.equals("")) { if (languageCode.equals("")) {
selectedLanguages.put(0, Locale.getDefault().getLanguage()); selectedLanguages.put(0, AppCompatDelegate.getApplicationLocales().toLanguageTags());
} else { } else {
selectedLanguages.put(0, languageCode); selectedLanguages.put(0, languageCode);
} }
@ -396,14 +400,11 @@ public class SettingsFragment extends PreferenceFragmentCompat {
recentLanguagesDao.deleteRecentLanguage(languageCode); recentLanguagesDao.deleteRecentLanguage(languageCode);
} }
recentLanguagesDao.addRecentLanguage(new Language(languageName, languageCode)); recentLanguagesDao.addRecentLanguage(new Language(languageName, languageCode));
saveLanguageValue(languageCode, keyListPreference);
Locale defLocale = createLocale(languageCode); Locale defLocale = createLocale(languageCode);
if(keyListPreference.equals("appUiDefaultLanguagePref")) { if(keyListPreference.equals("appUiDefaultLanguagePref")) {
appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
setLocale(requireActivity(), languageCode); LocaleListCompat appLocale = LocaleListCompat.forLanguageTags(languageCode);
getActivity().recreate(); AppCompatDelegate.setApplicationLocales(appLocale);
final Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
}else if(keyListPreference.equals("descriptionDefaultLanguagePref")){ }else if(keyListPreference.equals("descriptionDefaultLanguagePref")){
descriptionLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); descriptionLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
} }
@ -468,10 +469,8 @@ public class SettingsFragment extends PreferenceFragmentCompat {
final Locale defLocale = createLocale(recentLanguageCode); final Locale defLocale = createLocale(recentLanguageCode);
if (keyListPreference.equals("appUiDefaultLanguagePref")) { if (keyListPreference.equals("appUiDefaultLanguagePref")) {
appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
setLocale(requireActivity(), recentLanguageCode); LocaleListCompat appLocale = LocaleListCompat.forLanguageTags(recentLanguageCode);
getActivity().recreate(); AppCompatDelegate.setApplicationLocales(appLocale);
final Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
} else { } else {
descriptionLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); descriptionLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
} }