diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index 0b6d1831c..1a0a915bc 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -223,7 +223,9 @@ public class LoginActivity extends AccountAuthenticatorActivity { final String twoFactorCode = Objects.requireNonNull(binding.loginTwoFactor.getText()).toString(); showLoggingProgressBar(); - loginClient.doLogin(username, password, twoFactorCode, Locale.getDefault().getLanguage(), + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + loginClient.doLogin(username, password, twoFactorCode, mainCode, new LoginCallback() { @Override public void success(@NonNull LoginResult loginResult) { diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java index 54d3e9681..4e9aa2a67 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java @@ -490,7 +490,7 @@ public class MainActivity extends BaseActivity Activity.MODE_PRIVATE); final String language = preferences.getString("language", ""); final SettingsFragment settingsFragment = new SettingsFragment(); - settingsFragment.setLocale(this, language); + settingsFragment.setLocale(this, language, true); } public NavTabLayout.OnNavigationItemSelectedListener getNavListener() { diff --git a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java index 6aef8d323..a49a65340 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java @@ -345,6 +345,8 @@ public class NetworkingModule { @Singleton @Named(NAMED_LANGUAGE_WIKI_PEDIA_WIKI_SITE) public WikiSite provideLanguageWikipediaSite() { - return WikiSite.forLanguageCode(Locale.getDefault().getLanguage()); + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + return WikiSite.forLanguageCode(mainCode); } } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index 7336c1b40..384e7f1a9 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -707,7 +707,8 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements */ private void buildDepictionList(List idAndCaptions) { binding.mediaDetailDepictionContainer.removeAllViews(); - String locale = Locale.getDefault().getLanguage(); + String fullCode = Locale.getDefault().getLanguage(); + String locale = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; for (IdAndCaptions idAndCaption : idAndCaptions) { binding.mediaDetailDepictionContainer.addView(buildDepictLabel( getDepictionCaption(idAndCaption, locale), diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java index 7bb311961..368c4e510 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java @@ -56,6 +56,8 @@ public class NearbyController extends MapController { Timber.d("Loading attractions nearby, but currentLatLng is null"); return null; } + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; List places = nearbyPlaces .radiusExpander(searchLatLng, Locale.getDefault().getLanguage(), returnClosestResult, customQuery); diff --git a/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java b/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java index de0154947..cf3d257ab 100644 --- a/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java +++ b/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java @@ -373,9 +373,11 @@ public class UploadRepository { @Nullable public Place checkNearbyPlaces(final double decLatitude, final double decLongitude) { try { + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; final List fromWikidataQuery = nearbyPlaces.getFromWikidataQuery(new LatLng( decLatitude, decLongitude, 0.0f), - Locale.getDefault().getLanguage(), + mainCode, NEARBY_RADIUS_IN_KILO_METERS, null); return (fromWikidataQuery != null && fromWikidataQuery.size() > 0) ? fromWikidataQuery .get(0) : null; diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java index 4ed2594b8..8fb7e04a9 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java @@ -327,7 +327,9 @@ public class SettingsFragment extends PreferenceFragmentCompat { System.out.println(languageCode); HashMap selectedLanguages = new HashMap<>(); assert languageCode != null; - selectedLanguages.put(0, Locale.getDefault().getLanguage()); + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + selectedLanguages.put(0, mainCode); // Deserializing saved language codes to Language objects ArrayList Saved_Languages = new ArrayList<>(); @@ -422,6 +424,10 @@ public class SettingsFragment extends PreferenceFragmentCompat { } descriptionSecondaryLanguageListPreference.setSummary(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); }); + + dialog.setOnDismissListener(dialogInterface -> { + setLocale(requireActivity(), languageCode, false); + }); } @@ -448,7 +454,9 @@ public class SettingsFragment extends PreferenceFragmentCompat { assert languageCode != null; if (languageCode.equals("")) { - selectedLanguages.put(0, Locale.getDefault().getLanguage()); + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + selectedLanguages.put(0, mainCode); } else { selectedLanguages.put(0, languageCode); } @@ -456,7 +464,9 @@ public class SettingsFragment extends PreferenceFragmentCompat { assert languageCode != null; if (languageCode.equals("")) { - selectedLanguages.put(0, Locale.getDefault().getLanguage()); + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + selectedLanguages.put(0, mainCode); } else { selectedLanguages.put(0, languageCode); @@ -465,7 +475,9 @@ public class SettingsFragment extends PreferenceFragmentCompat { assert languageCode != null; if (languageCode.equals("")) { - selectedLanguages.put(0, Locale.getDefault().getLanguage()); + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + selectedLanguages.put(0, mainCode); } else { selectedLanguages.put(0, languageCode); @@ -535,7 +547,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { Locale defLocale = createLocale(languageCode); if(keyListPreference.equals("appUiDefaultLanguagePref")) { appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); - setLocale(requireActivity(), languageCode); + setLocale(requireActivity(), languageCode, true); getActivity().recreate(); final Intent intent = new Intent(getActivity(), MainActivity.class); startActivity(intent); @@ -603,7 +615,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { final Locale defLocale = createLocale(recentLanguageCode); if (keyListPreference.equals("appUiDefaultLanguagePref")) { appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); - setLocale(requireActivity(), recentLanguageCode); + setLocale(requireActivity(), recentLanguageCode, true); getActivity().recreate(); final Intent intent = new Intent(getActivity(), MainActivity.class); startActivity(intent); @@ -622,13 +634,37 @@ public class SettingsFragment extends PreferenceFragmentCompat { separator.setVisibility(View.GONE); } + private String reSerialise(ArrayList languageCodes) { + // Join the elements of the list into a single string, separated by a comma and a space + return String.join(", ", languageCodes); + } + /** * Changing the default app language with selected one and save it to SharedPreferences */ - public void setLocale(final Activity activity, String userSelectedValue) { + public void setLocale(final Activity activity, String userSelectedValue, boolean appUI) { + if (userSelectedValue.equals("")) { userSelectedValue = Locale.getDefault().getLanguage(); } + + String current = Locale.getDefault().getLanguage(); + ArrayList languageCodes = deSerialise(current); + if(appUI) { + languageCodes.set(0, userSelectedValue); + userSelectedValue = reSerialise(languageCodes); + } + else{ + ArrayList newLanguageCodes = new ArrayList<>(); + ArrayList userSelctedCode = deSerialise(userSelectedValue); + + newLanguageCodes.add(languageCodes.get(0)); + for(String code : userSelctedCode){ + newLanguageCodes.add(code); + } + userSelectedValue = reSerialise(newLanguageCodes); + } + final Locale locale = createLocale(userSelectedValue); Locale.setDefault(locale); final Configuration configuration = new Configuration();