Skip to content

Commit 0d23e65

Browse files
fix:Setting Language list is not an language list which is supported by Commons for caption and description (commons-app#4325)
1 parent 049dd7c commit 0d23e65

File tree

1 file changed

+12
-25
lines changed

1 file changed

+12
-25
lines changed

app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.Locale;
3737
import javax.inject.Inject;
3838
import javax.inject.Named;
39+
import org.wikipedia.language.AppLanguageLookUpTable;
3940

4041
public class SettingsFragment extends PreferenceFragmentCompat {
4142

@@ -144,28 +145,26 @@ private void prepareTheme() {
144145
* to remember later
145146
*/
146147
private void prepareLanguages() {
147-
List<String> languageNamesList = new ArrayList<>();
148-
List<String> languageCodesList = new ArrayList<>();
149-
List<Language> languages = getLanguagesSupportedByDevice();
150-
151-
for(Language language: languages) {
152-
// Go through all languages and add them to lists
153-
if(!languageCodesList.contains(language.getLocale().getLanguage())) {
154-
// This if prevents us from adding same language twice
155-
languageNamesList.add(language.getLocale().getDisplayName());
156-
languageCodesList.add(language.getLocale().getLanguage());
157-
}
148+
List<String> languageNamesList;
149+
List<String> languageCodesList;
150+
AppLanguageLookUpTable appLanguageLookUpTable = new AppLanguageLookUpTable(getContext());
151+
languageNamesList = appLanguageLookUpTable.getLocalizedNames();
152+
languageCodesList = appLanguageLookUpTable.getCodes();
153+
List<String> languageNameWithCodeList = new ArrayList<>();
154+
155+
for (int i = 0; i < languageNamesList.size(); i++) {
156+
languageNameWithCodeList.add(languageNamesList.get(i) + "[" + languageCodesList.get(i) + "]");
158157
}
159158

160-
CharSequence[] languageNames = languageNamesList.toArray(new CharSequence[0]);
159+
CharSequence[] languageNames = languageNameWithCodeList.toArray(new CharSequence[0]);
161160
CharSequence[] languageCodes = languageCodesList.toArray(new CharSequence[0]);
162161
// Add all languages and languages codes to lists preference as pair
163162
langListPreference.setEntries(languageNames);
164163
langListPreference.setEntryValues(languageCodes);
165164

166165
// Gets current language code from shared preferences
167166
String languageCode = getCurrentLanguageCode();
168-
if (languageCode.equals("")){
167+
if (languageCode.equals("")) {
169168
// If current language code is empty, means none selected by user yet so use phone local
170169
langListPreference.setValue(Locale.getDefault().getLanguage());
171170
} else {
@@ -188,18 +187,6 @@ private String getCurrentLanguageCode() {
188187
return defaultKvStore.getString(Prefs.KEY_LANGUAGE_VALUE, "");
189188
}
190189

191-
private List<Language> getLanguagesSupportedByDevice() {
192-
List<Language> languages = new ArrayList<>();
193-
Locale[] localesArray = Locale.getAvailableLocales();
194-
for (Locale locale : localesArray) {
195-
languages.add(new Language(locale));
196-
}
197-
198-
Collections.sort(languages, (language, t1) -> language.getLocale().getDisplayName()
199-
.compareTo(t1.getLocale().getDisplayName()));
200-
return languages;
201-
}
202-
203190
/**
204191
* First checks for external storage permissions and then sends logs via email
205192
*/

0 commit comments

Comments
 (0)