Fix wrong language codes displaying to user (#2880) (#2930)

* Updated language codes displayed for Hebrew, Indonesian and Yiddish (#2880)

* Function 'fixLanguageCode' encapsulated with unit tests (#2880)

* Renaming class "StringUtils" as "LangCodeUtils" and small String formatting improvement in "SpinnerLanguagesAdapter"
This commit is contained in:
Cesar Villalobos 2019-04-26 22:55:12 -06:00 committed by neslihanturan
parent d22884f86a
commit ee3f4d4d30
3 changed files with 56 additions and 5 deletions

View file

@ -21,6 +21,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.utils.BiMap;
import fr.free.nrw.commons.utils.LangCodeUtils;
public class SpinnerLanguagesAdapter extends ArrayAdapter {
@ -114,21 +115,24 @@ public class SpinnerLanguagesAdapter extends ArrayAdapter {
}
public void init(int position, boolean isDropDownView) {
final String languageCode = LangCodeUtils.fixLanguageCode(languageCodesList.get(position));
final String languageName = String.format("%s%s", languageNamesList.get(position)
.substring(0, 1).toUpperCase(), languageNamesList.get(position).substring(1));
if (!isDropDownView) {
view.setVisibility(View.GONE);
if(languageCodesList.get(position).length()>2)
tvLanguage.setText(languageCodesList.get(position).subSequence(0,2));
if(languageCode.length()>2)
tvLanguage.setText(languageCode.subSequence(0,2));
else
tvLanguage.setText(languageCodesList.get(position));
tvLanguage.setText(languageCode);
} else {
view.setVisibility(View.VISIBLE);
if (languageCodesList.get(position).isEmpty()) {
tvLanguage.setText(languageNamesList.get(position));
tvLanguage.setText(languageName);
tvLanguage.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
} else {
tvLanguage.setText(
String.format("%s [%s]", languageNamesList.get(position), languageCodesList.get(position)));
String.format("%s [%s]", languageName, languageCode));
if(selectedLanguages.containsKey(languageCodesList.get(position))&&
!languageCodesList.get(position).equals(selectedLangCode)) {
tvLanguage.setTextColor(Color.GRAY);

View file

@ -0,0 +1,23 @@
package fr.free.nrw.commons.utils;
/**
* Utilities class for miscellaneous strings
*/
public class LangCodeUtils {
/**
* Replaces the deprecated ISO-639 language codes used by Android with the updated ISO-639-1.
* @param code Language code you want to update.
* @return Updated language code. If not in the "deprecated list" returns the same code.
*/
public static String fixLanguageCode(String code) {
if (code.equalsIgnoreCase("iw")) {
return "he";
} else if (code.equalsIgnoreCase("in")) {
return "id";
} else if (code.equalsIgnoreCase("ji")) {
return "yi";
} else {
return code;
}
}
}

View file

@ -0,0 +1,24 @@
package fr.free.nrw.commons.utils;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class LangCodeUtilsTest {
@Test
public void testFixLanguageCodeIw(){
assertTrue("Expected 'he' as result", LangCodeUtils.fixLanguageCode("iw").contentEquals("he"));
}
@Test
public void testFixLanguageCodeIn(){
assertTrue("Expected 'id' as result", LangCodeUtils.fixLanguageCode("in").contentEquals("id"));
}
@Test
public void testFixLanguageCodeJi(){
assertTrue("Expected 'yi' as result", LangCodeUtils.fixLanguageCode("ji").contentEquals("yi"));
}
@Test
public void testFixLanguageCodeDefault(){
assertTrue("Expected 'en' as result", LangCodeUtils.fixLanguageCode("en").contentEquals("en"));
}
}