mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Resolve switching languages problem in settings fragment (#5560)
* SettingsFragment: add a method for creating locale * SettingsFragmentUnitTests: fix failing tests for createLocale
This commit is contained in:
parent
751bc6ce6b
commit
7e5789d539
2 changed files with 55 additions and 6 deletions
|
|
@ -146,7 +146,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
|||
appUiLanguageListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
|
||||
} else {
|
||||
// If any language is selected by user previously, use it
|
||||
Locale defLocale = new Locale(languageCode);
|
||||
Locale defLocale = createLocale(languageCode);
|
||||
appUiLanguageListPreference.setSummary((defLocale).getDisplayLanguage(defLocale));
|
||||
}
|
||||
appUiLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
|
|
@ -167,7 +167,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
|||
descriptionLanguageListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
|
||||
} else {
|
||||
// If any language is selected by user previously, use it
|
||||
Locale defLocale = new Locale(languageCode);
|
||||
Locale defLocale = createLocale(languageCode);
|
||||
descriptionLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
|
||||
}
|
||||
descriptionLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
|
|
@ -361,7 +361,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
|||
}
|
||||
recentLanguagesDao.addRecentLanguage(new Language(languageName, languageCode));
|
||||
saveLanguageValue(languageCode, keyListPreference);
|
||||
Locale defLocale = new Locale(languageCode);
|
||||
Locale defLocale = createLocale(languageCode);
|
||||
if(keyListPreference.equals("appUiDefaultLanguagePref")) {
|
||||
appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
|
||||
setLocale(requireActivity(), languageCode);
|
||||
|
|
@ -426,7 +426,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
|||
recentLanguagesDao.addRecentLanguage(
|
||||
new Language(recentLanguageName, recentLanguageCode));
|
||||
saveLanguageValue(recentLanguageCode, keyListPreference);
|
||||
final Locale defLocale = new Locale(recentLanguageCode);
|
||||
final Locale defLocale = createLocale(recentLanguageCode);
|
||||
if (keyListPreference.equals("appUiDefaultLanguagePref")) {
|
||||
appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
|
||||
setLocale(requireActivity(), recentLanguageCode);
|
||||
|
|
@ -455,7 +455,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
|||
if (userSelectedValue.equals("")) {
|
||||
userSelectedValue = Locale.getDefault().getLanguage();
|
||||
}
|
||||
final Locale locale = new Locale(userSelectedValue);
|
||||
final Locale locale = createLocale(userSelectedValue);
|
||||
Locale.setDefault(locale);
|
||||
final Configuration configuration = new Configuration();
|
||||
configuration.locale = locale;
|
||||
|
|
@ -467,6 +467,25 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
|||
editor.apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Locale based on different types of language codes
|
||||
* @param languageCode
|
||||
* @return Locale and throws error for invalid language codes
|
||||
*/
|
||||
public static Locale createLocale(String languageCode) {
|
||||
String[] parts = languageCode.split("-");
|
||||
switch (parts.length) {
|
||||
case 1:
|
||||
return new Locale(parts[0]);
|
||||
case 2:
|
||||
return new Locale(parts[0], parts[1]);
|
||||
case 3:
|
||||
return new Locale(parts[0], parts[1], parts[2]);
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid language code: " + languageCode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save userselected language in List Preference
|
||||
* @param userSelectedValue
|
||||
|
|
|
|||
|
|
@ -19,8 +19,10 @@ import fr.free.nrw.commons.TestCommonsApplication
|
|||
import fr.free.nrw.commons.recentlanguages.Language
|
||||
import fr.free.nrw.commons.recentlanguages.RecentLanguagesAdapter
|
||||
import fr.free.nrw.commons.recentlanguages.RecentLanguagesDao
|
||||
import fr.free.nrw.commons.upload.UploadMediaDetailAdapter
|
||||
import fr.free.nrw.commons.settings.SettingsFragment.createLocale
|
||||
import org.junit.Assert
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
|
@ -34,6 +36,8 @@ import org.robolectric.Shadows
|
|||
import org.robolectric.annotation.Config
|
||||
import org.robolectric.annotation.LooperMode
|
||||
import java.lang.reflect.Method
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
@Config(sdk = [21], application = TestCommonsApplication::class)
|
||||
|
|
@ -255,4 +259,30 @@ class SettingsFragmentUnitTests {
|
|||
verify(recentLanguagesTextView, times(1)).visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCreateLocaleWithLanguageCode() {
|
||||
val locale: Locale = createLocale("en")
|
||||
|
||||
assertEquals("en", locale.language)
|
||||
assertEquals("",locale.country)
|
||||
assertEquals("",locale.variant)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCreateLocaleWithLanguageAndCountryCode() {
|
||||
val locale: Locale = createLocale("zh-CN")
|
||||
|
||||
assertEquals("zh", locale.language)
|
||||
assertEquals("CN",locale.country)
|
||||
assertEquals("",locale.variant)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCreateLocaleWithLanguageCountryAndVariantCode() {
|
||||
val locale: Locale = createLocale("pt-BR-variant")
|
||||
|
||||
assertEquals("pt", locale.language)
|
||||
assertEquals("BR",locale.country)
|
||||
assertEquals("variant",locale.variant)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue