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());
|
appUiLanguageListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
|
||||||
} else {
|
} else {
|
||||||
// If any language is selected by user previously, use it
|
// 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.setSummary((defLocale).getDisplayLanguage(defLocale));
|
||||||
}
|
}
|
||||||
appUiLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
appUiLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
|
|
@ -167,7 +167,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
descriptionLanguageListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
|
descriptionLanguageListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
|
||||||
} else {
|
} else {
|
||||||
// If any language is selected by user previously, use it
|
// 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.setSummary(defLocale.getDisplayLanguage(defLocale));
|
||||||
}
|
}
|
||||||
descriptionLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
descriptionLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
|
|
@ -361,7 +361,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
}
|
}
|
||||||
recentLanguagesDao.addRecentLanguage(new Language(languageName, languageCode));
|
recentLanguagesDao.addRecentLanguage(new Language(languageName, languageCode));
|
||||||
saveLanguageValue(languageCode, keyListPreference);
|
saveLanguageValue(languageCode, keyListPreference);
|
||||||
Locale defLocale = new Locale(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);
|
setLocale(requireActivity(), languageCode);
|
||||||
|
|
@ -426,7 +426,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
recentLanguagesDao.addRecentLanguage(
|
recentLanguagesDao.addRecentLanguage(
|
||||||
new Language(recentLanguageName, recentLanguageCode));
|
new Language(recentLanguageName, recentLanguageCode));
|
||||||
saveLanguageValue(recentLanguageCode, keyListPreference);
|
saveLanguageValue(recentLanguageCode, keyListPreference);
|
||||||
final Locale defLocale = new Locale(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);
|
setLocale(requireActivity(), recentLanguageCode);
|
||||||
|
|
@ -455,7 +455,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
if (userSelectedValue.equals("")) {
|
if (userSelectedValue.equals("")) {
|
||||||
userSelectedValue = Locale.getDefault().getLanguage();
|
userSelectedValue = Locale.getDefault().getLanguage();
|
||||||
}
|
}
|
||||||
final Locale locale = new Locale(userSelectedValue);
|
final Locale locale = createLocale(userSelectedValue);
|
||||||
Locale.setDefault(locale);
|
Locale.setDefault(locale);
|
||||||
final Configuration configuration = new Configuration();
|
final Configuration configuration = new Configuration();
|
||||||
configuration.locale = locale;
|
configuration.locale = locale;
|
||||||
|
|
@ -467,6 +467,25 @@ public class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
editor.apply();
|
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
|
* Save userselected language in List Preference
|
||||||
* @param userSelectedValue
|
* @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.Language
|
||||||
import fr.free.nrw.commons.recentlanguages.RecentLanguagesAdapter
|
import fr.free.nrw.commons.recentlanguages.RecentLanguagesAdapter
|
||||||
import fr.free.nrw.commons.recentlanguages.RecentLanguagesDao
|
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
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertNull
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
@ -34,6 +36,8 @@ import org.robolectric.Shadows
|
||||||
import org.robolectric.annotation.Config
|
import org.robolectric.annotation.Config
|
||||||
import org.robolectric.annotation.LooperMode
|
import org.robolectric.annotation.LooperMode
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner::class)
|
@RunWith(RobolectricTestRunner::class)
|
||||||
@Config(sdk = [21], application = TestCommonsApplication::class)
|
@Config(sdk = [21], application = TestCommonsApplication::class)
|
||||||
|
|
@ -255,4 +259,30 @@ class SettingsFragmentUnitTests {
|
||||||
verify(recentLanguagesTextView, times(1)).visibility = View.VISIBLE
|
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