From bd436422dcf5a7a533dcd5a6991640e4d5d0ffef Mon Sep 17 00:00:00 2001 From: Adith Date: Wed, 16 Oct 2024 01:26:00 +1100 Subject: [PATCH 1/4] UI fully functional and persistant --- .../recentlanguages/SavedLanguagesAdapter.kt | 77 ++++++++++ .../commons/settings/SettingsFragment.java | 143 +++++++++++++++++- .../dialog_select_secondary_language.xml | 76 ++++++++++ app/src/main/res/values/arrays.xml | 11 ++ 4 files changed, 303 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/recentlanguages/SavedLanguagesAdapter.kt create mode 100644 app/src/main/res/layout/dialog_select_secondary_language.xml diff --git a/app/src/main/java/fr/free/nrw/commons/recentlanguages/SavedLanguagesAdapter.kt b/app/src/main/java/fr/free/nrw/commons/recentlanguages/SavedLanguagesAdapter.kt new file mode 100644 index 000000000..c067a6e49 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/recentlanguages/SavedLanguagesAdapter.kt @@ -0,0 +1,77 @@ +package fr.free.nrw.commons.recentlanguages + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import fr.free.nrw.commons.R +import fr.free.nrw.commons.databinding.RowItemLanguagesSpinnerBinding +import fr.free.nrw.commons.utils.LangCodeUtils +import org.apache.commons.lang3.StringUtils +import java.util.HashMap + +/** + * Array adapter for saved languages + */ +class SavedLanguagesAdapter constructor( + context: Context, + var savedLanguages: List, // List of saved languages + private val selectedLanguages: HashMap<*, String>, // Selected languages map +) : ArrayAdapter(context, R.layout.row_item_languages_spinner) { + /** + * Selected language code in SavedLanguagesAdapter + * Used for marking selected ones + */ + var selectedLangCode = "" + + override fun isEnabled(position: Int) = + savedLanguages[position].languageCode.let { + it.isNotEmpty() && !selectedLanguages.containsValue(it) && it != selectedLangCode + } + + override fun getCount() = savedLanguages.size + + override fun getView( + position: Int, + convertView: View?, + parent: ViewGroup, + ): View { + val binding: RowItemLanguagesSpinnerBinding + var rowView = convertView + + if (rowView == null) { + val layoutInflater = + context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + binding = RowItemLanguagesSpinnerBinding.inflate(layoutInflater, parent, false) + rowView = binding.root + } else { + binding = RowItemLanguagesSpinnerBinding.bind(rowView) + } + + val languageCode = savedLanguages[position].languageCode + val languageName = savedLanguages[position].languageName + binding.tvLanguage.let { + it.isEnabled = isEnabled(position) + if (languageCode.isEmpty()) { + it.text = StringUtils.capitalize(languageName) + it.textAlignment = View.TEXT_ALIGNMENT_CENTER + } else { + it.text = + "${StringUtils.capitalize(languageName)}" + + " [${LangCodeUtils.fixLanguageCode(languageCode)}]" + } + } + return rowView + } + + /** + * Provides code of a language from saved languages for a specific position + */ + fun getLanguageCode(position: Int): String = savedLanguages[position].languageCode + + /** + * Provides name of a language from saved languages for a specific position + */ + fun getLanguageName(position: Int): String = savedLanguages[position].languageName +} 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 fee322644..4ed2594b8 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 @@ -18,6 +18,8 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; +import android.widget.ArrayAdapter; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; @@ -47,10 +49,13 @@ import fr.free.nrw.commons.logging.CommonsLogSender; 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.recentlanguages.SavedLanguagesAdapter; import fr.free.nrw.commons.upload.LanguagesAdapter; import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.PermissionUtils; import fr.free.nrw.commons.utils.ViewUtil; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -153,7 +158,6 @@ public class SettingsFragment extends PreferenceFragmentCompat { appUiLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - System.out.println("Clicked appui"); prepareAppLanguages(appUiLanguageListPreference.getKey()); return true; } @@ -180,6 +184,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { } }); + descriptionSecondaryLanguageListPreference = findPreference("descriptionSecondaryLanguagePref"); assert descriptionSecondaryLanguageListPreference != null; keyLanguageListPreference = descriptionSecondaryLanguageListPreference.getKey(); @@ -196,8 +201,8 @@ public class SettingsFragment extends PreferenceFragmentCompat { descriptionSecondaryLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - System.out.println("clickedseco"); - prepareAppLanguages(descriptionSecondaryLanguageListPreference.getKey()); + System.out.println("click recieved"); + prepareSecondaryLanguageDialog(); return true; } }); @@ -292,6 +297,136 @@ public class SettingsFragment extends PreferenceFragmentCompat { }); } + private void updateSavedLanguages(ListView savedLanguageListView, List savedLanguages, HashMap selectedLanguages) { + // Use SavedLanguagesAdapter to display saved languages + SavedLanguagesAdapter savedLanguagesAdapter = new SavedLanguagesAdapter( + getActivity(), + savedLanguages, // List of saved Language objects + selectedLanguages // Pass the map of selected languages + ); + + // Set the adapter to the ListView to display the saved languages + savedLanguageListView.setAdapter(savedLanguagesAdapter); + } + + private ArrayList deSerialise(String languageCodes) { + // Check if the stored string is empty or null + if (languageCodes == null || languageCodes.isEmpty()) { + return new ArrayList<>(); // Return an empty list if there's no data + } + + // Split the string by commas and store it in a list + String[] languageArray = languageCodes.split(",\\s*"); // Split by comma and optional space + return new ArrayList<>(Arrays.asList(languageArray)); // Convert array to ArrayList and return + } + + + private void prepareSecondaryLanguageDialog() { + final String languageCode = getCurrentLanguageCode("descriptionSecondaryLanguagePref"); + System.out.println("before"); + System.out.println(languageCode); + HashMap selectedLanguages = new HashMap<>(); + assert languageCode != null; + selectedLanguages.put(0, Locale.getDefault().getLanguage()); + + // Deserializing saved language codes to Language objects + ArrayList Saved_Languages = new ArrayList<>(); + for (String code : deSerialise(languageCode)) { + Locale locale = new Locale(code); + Saved_Languages.add(new Language(locale.getDisplayLanguage(locale), code)); + } + + // Create the new dialog for secondary language + Dialog dialog = new Dialog(getActivity()); + dialog.setContentView(R.layout.dialog_select_secondary_language); + dialog.setCanceledOnTouchOutside(true); + dialog.getWindow().setLayout( + (int) (getActivity().getResources().getDisplayMetrics().widthPixels * 0.90), + (int) (getActivity().getResources().getDisplayMetrics().heightPixels * 0.90) + ); + dialog.show(); + + // Bind UI elements + EditText editText = dialog.findViewById(R.id.search_language); + ListView listView = dialog.findViewById(R.id.language_list); + ListView savedLanguageListView = dialog.findViewById(R.id.language_history_list); + View separator = dialog.findViewById(R.id.separator); + + // Setup saved languages with the new SavedLanguagesAdapter + updateSavedLanguages(savedLanguageListView, Saved_Languages, selectedLanguages); + + // Set an onItemClickListener to remove a language when clicked + savedLanguageListView.setOnItemClickListener((adapterView, view, position, id) -> { + // Remove the clicked language from Saved_Languages + Saved_Languages.remove(position); + + // Update the saved language list view after removing the language + updateSavedLanguages(savedLanguageListView, Saved_Languages, selectedLanguages); + + // Update the shared preferences to reflect the removal + String updatedLanguageCodes = ""; + for (Language language : Saved_Languages) { + updatedLanguageCodes += language.getLanguageCode() + ", "; + } + // Remove the trailing comma and space if present + if (!updatedLanguageCodes.isEmpty()) { + updatedLanguageCodes = updatedLanguageCodes.substring(0, updatedLanguageCodes.length() - 2); + } + + saveLanguageValue(updatedLanguageCodes, "descriptionSecondaryLanguagePref"); + System.out.println("after removal"); + System.out.println(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); + }); + + // Set up the adapter for new languages using the selectedLanguages map + LanguagesAdapter languagesAdapter = new LanguagesAdapter(getActivity(), selectedLanguages); + listView.setAdapter(languagesAdapter); + + // Add search functionality + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + hideRecentLanguagesSection(); + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + languagesAdapter.getFilter().filter(charSequence); + } + + @Override + public void afterTextChanged(Editable editable) { + } + }); + + // Handle item click for language selection in the main list + listView.setOnItemClickListener((adapterView, view, i, l) -> { + String selectedLanguageCode = languagesAdapter.getLanguageCode(i); + String selectedLanguageName = languagesAdapter.getLanguageName(i); + + if (deSerialise(getCurrentLanguageCode("descriptionSecondaryLanguagePref")).contains(selectedLanguageCode)) { + Toast.makeText(getActivity(), "Language already selected", Toast.LENGTH_SHORT).show(); + return; + } + + Saved_Languages.add(new Language(selectedLanguageName, selectedLanguageCode)); + updateSavedLanguages(savedLanguageListView, Saved_Languages, selectedLanguages); + + + // Save the language + if (getCurrentLanguageCode("descriptionSecondaryLanguagePref").isEmpty()) { + saveLanguageValue(selectedLanguageCode, "descriptionSecondaryLanguagePref"); + } else { + saveLanguageValue(getCurrentLanguageCode("descriptionSecondaryLanguagePref") + ", " + + selectedLanguageCode, "descriptionSecondaryLanguagePref"); + } + descriptionSecondaryLanguageListPreference.setSummary(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); + }); + } + + + + /** * Prepare and Show language selection dialog box * Uses previously saved language if there is any, if not uses phone locale as initial language. @@ -303,7 +438,6 @@ public class SettingsFragment extends PreferenceFragmentCompat { */ private void prepareAppLanguages(final String keyListPreference) { - System.out.println("gets to prepare app languages"); // Gets current language code from shared preferences final String languageCode = getCurrentLanguageCode(keyListPreference); @@ -345,6 +479,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { Dialog dialog = new Dialog(getActivity()); dialog.setContentView(R.layout.dialog_select_language); + dialog.setCanceledOnTouchOutside(true); dialog.getWindow().setLayout((int)(getActivity().getResources().getDisplayMetrics().widthPixels*0.90), (int)(getActivity().getResources().getDisplayMetrics().heightPixels*0.90)); diff --git a/app/src/main/res/layout/dialog_select_secondary_language.xml b/app/src/main/res/layout/dialog_select_secondary_language.xml new file mode 100644 index 000000000..06de2b01f --- /dev/null +++ b/app/src/main/res/layout/dialog_select_secondary_language.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index c09853373..7c105feab 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -25,6 +25,17 @@ @string/exif_tag_name_serialNumbers @string/exif_tag_name_software + + + @string/exif_tag_name_author + @string/exif_tag_name_copyright + @string/exif_tag_name_location + @string/exif_tag_name_cameraModel + @string/exif_tag_name_lensModel + @string/exif_tag_name_serialNumbers + @string/exif_tag_name_software + + @string/exif_tag_author @string/exif_tag_copyright From bdda18223e94de30583987c0f64503717ee58b81 Mon Sep 17 00:00:00 2001 From: Adith Date: Wed, 16 Oct 2024 15:39:14 +1100 Subject: [PATCH 2/4] init --- .../free/nrw/commons/auth/LoginActivity.java | 4 +- .../commons/contributions/MainActivity.java | 2 +- .../free/nrw/commons/di/NetworkingModule.java | 4 +- .../commons/media/MediaDetailFragment.java | 3 +- .../nrw/commons/nearby/NearbyController.java | 2 + .../commons/repository/UploadRepository.java | 4 +- .../commons/settings/SettingsFragment.java | 50 ++++++++++++++++--- 7 files changed, 57 insertions(+), 12 deletions(-) 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(); From 7f537f2ccdbef1cdbd8a556590753d32ad76f4f3 Mon Sep 17 00:00:00 2001 From: Adith Date: Thu, 17 Oct 2024 16:59:30 +1100 Subject: [PATCH 3/4] localeFix --- .../free/nrw/commons/media/MediaDetailFragment.java | 4 +++- .../free/nrw/commons/mwapi/OkHttpJsonApiClient.java | 6 +++++- .../fr/free/nrw/commons/nearby/NearbyController.java | 11 ++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) 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 384e7f1a9..52dec9ae1 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 @@ -1367,8 +1367,10 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements } private String chooseDescription(Media media) { + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; final Map descriptions = media.getDescriptions(); - final String multilingualDesc = descriptions.get(Locale.getDefault().getLanguage()); + final String multilingualDesc = descriptions.get(mainCode); if (multilingualDesc != null) { return multilingualDesc; } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java index 8d6b74231..b1563cef8 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java @@ -640,13 +640,17 @@ public class OkHttpJsonApiClient { } }).doOnError(Timber::e)); } + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; @NotNull private Request sparqlQuery(String qid, int startPosition, int limit, String fileName) throws IOException { + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; String query = FileUtils.readFromResource(fileName) .replace("${QID}", qid) - .replace("${LANG}", "\"" + Locale.getDefault().getLanguage() + "\"") + .replace("${LANG}", "\"" + mainCode + "\"") .replace("${LIMIT}", "" + limit) .replace("${OFFSET}", "" + startPosition); HttpUrl.Builder urlBuilder = HttpUrl 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 368c4e510..d86e99226 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 @@ -59,7 +59,7 @@ public class NearbyController extends MapController { 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, + .radiusExpander(searchLatLng, mainCode, returnClosestResult, customQuery); if (null != places && places.size() > 0) { @@ -141,7 +141,9 @@ public class NearbyController extends MapController { * @throws Exception If an error occurs during the retrieval process. */ public List getPlaces(List placeList) throws Exception { - return nearbyPlaces.getPlaces(placeList, Locale.getDefault().getLanguage()); + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + return nearbyPlaces.getPlaces(placeList, mainCode); } public static LatLng calculateNorthEast(double latitude, double longitude, double distance) { @@ -198,8 +200,11 @@ public class NearbyController extends MapController { return null; } + String fullCode = Locale.getDefault().getLanguage(); + String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; + List places = nearbyPlaces.getFromWikidataQuery(screenTopRight, screenBottomLeft, - Locale.getDefault().getLanguage(), shouldQueryForMonuments, customQuery); + mainCode, shouldQueryForMonuments, customQuery); if (null != places && places.size() > 0) { LatLng[] boundaryCoordinates = { From 1dd633d9b9272ef75371e8633f4a977711222571 Mon Sep 17 00:00:00 2001 From: Adith Date: Mon, 21 Oct 2024 02:31:46 +1100 Subject: [PATCH 4/4] Finished Issue 1 --- .../free/nrw/commons/auth/LoginActivity.java | 4 +- .../commons/contributions/MainActivity.java | 2 +- .../free/nrw/commons/di/NetworkingModule.java | 4 +- .../commons/media/MediaDetailFragment.java | 4 +- .../commons/mwapi/OkHttpJsonApiClient.java | 50 +++++- .../nrw/commons/nearby/NearbyController.java | 23 +-- .../free/nrw/commons/nearby/NearbyPlaces.java | 4 +- .../commons/repository/UploadRepository.java | 4 +- .../commons/settings/SettingsFragment.java | 145 +++++++++--------- .../main/resources/queries/query_for_item.rq | 5 +- 10 files changed, 142 insertions(+), 103 deletions(-) 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 1a0a915bc..0b6d1831c 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,9 +223,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { final String twoFactorCode = Objects.requireNonNull(binding.loginTwoFactor.getText()).toString(); showLoggingProgressBar(); - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - loginClient.doLogin(username, password, twoFactorCode, mainCode, + loginClient.doLogin(username, password, twoFactorCode, Locale.getDefault().getLanguage(), 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 4e9aa2a67..54d3e9681 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, true); + settingsFragment.setLocale(this, language); } 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 a49a65340..6aef8d323 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,8 +345,6 @@ public class NetworkingModule { @Singleton @Named(NAMED_LANGUAGE_WIKI_PEDIA_WIKI_SITE) public WikiSite provideLanguageWikipediaSite() { - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - return WikiSite.forLanguageCode(mainCode); + return WikiSite.forLanguageCode(Locale.getDefault().getLanguage()); } } 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 52dec9ae1..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 @@ -1367,10 +1367,8 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements } private String chooseDescription(Media media) { - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; final Map descriptions = media.getDescriptions(); - final String multilingualDesc = descriptions.get(mainCode); + final String multilingualDesc = descriptions.get(Locale.getDefault().getLanguage()); if (multilingualDesc != null) { return multilingualDesc; } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java index b1563cef8..dd041d8bc 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java @@ -409,15 +409,55 @@ public class OkHttpJsonApiClient { */ @Nullable public List getPlaces( - final List placeList, final String language) throws IOException { + final List placeList, final String language, final String secondaryLanguages) throws IOException { final String wikidataQuery = FileUtils.readFromResource("/queries/query_for_item.rq"); + final String[] secondaryLanguageArray = secondaryLanguages.split(",\\s*"); // could be used to generate backup SparQL Queries + String qids = ""; for (final Place place : placeList) { qids += "\n" + ("wd:" + place.getWikiDataEntityId()); } + + StringBuilder fallBackDescription = new StringBuilder(); + for (int i = 0; i < secondaryLanguageArray.length; i++) { + fallBackDescription.append("OPTIONAL {?item schema:description ?itemDescriptionPreferredLanguage_") + .append(i + 1) + .append(". FILTER (lang(?itemDescriptionPreferredLanguage_") + .append(i + 1) + .append(") = \"") + .append(secondaryLanguageArray[i]) + .append("\")}\n"); + } + + StringBuilder fallbackLabel = new StringBuilder(); + for (int i = 0; i < secondaryLanguageArray.length; i++) { + fallbackLabel.append("OPTIONAL {?item rdfs:label ?itemLabelPreferredLanguage_") + .append(i + 1) + .append(". FILTER (lang(?itemLabelPreferredLanguage_") + .append(i + 1) + .append(") = \"") + .append(secondaryLanguageArray[i]) + .append("\")}\n"); + } + + StringBuilder fallbackClassLabel = new StringBuilder(); + for (int i = 0; i < secondaryLanguageArray.length; i++) { + fallbackClassLabel.append("OPTIONAL {?class rdfs:label ?classLabelPreferredLanguage_") + .append(i + 1) + .append(". FILTER (lang(?classLabelPreferredLanguage_") + .append(i + 1) + .append(") = \"") + .append(secondaryLanguageArray[i]) + .append("\")}\n"); + } + final String query = wikidataQuery .replace("${ENTITY}", qids) - .replace("${LANG}", language); + .replace("${LANG}", language) + .replace("${SECONDARYDESCRIPTION}", fallBackDescription.toString()) + .replace("${SECONDARYLABEL}", fallbackLabel.toString()) + .replace("${SECONDARYCLASSLABEL}", fallbackClassLabel.toString()); + final HttpUrl.Builder urlBuilder = HttpUrl .parse(sparqlQueryUrl) .newBuilder() @@ -640,17 +680,13 @@ public class OkHttpJsonApiClient { } }).doOnError(Timber::e)); } - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; @NotNull private Request sparqlQuery(String qid, int startPosition, int limit, String fileName) throws IOException { - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; String query = FileUtils.readFromResource(fileName) .replace("${QID}", qid) - .replace("${LANG}", "\"" + mainCode + "\"") + .replace("${LANG}", "\"" + Locale.getDefault().getLanguage() + "\"") .replace("${LIMIT}", "" + limit) .replace("${OFFSET}", "" + startPosition); HttpUrl.Builder urlBuilder = HttpUrl 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 d86e99226..d5f551e27 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 @@ -8,6 +8,8 @@ import androidx.annotation.Nullable; import fr.free.nrw.commons.BaseMarker; import fr.free.nrw.commons.MapController; import fr.free.nrw.commons.location.LatLng; +import fr.free.nrw.commons.kvstore.JsonKvStore; +import fr.free.nrw.commons.settings.Prefs; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -16,6 +18,7 @@ import java.util.ListIterator; import java.util.Locale; import java.util.Map; import javax.inject.Inject; +import javax.inject.Named; import timber.log.Timber; public class NearbyController extends MapController { @@ -34,6 +37,9 @@ public class NearbyController extends MapController { this.nearbyPlaces = nearbyPlaces; } + @Inject + @Named("default_preferences") + JsonKvStore defaultKvStore; /** * Prepares Place list to make their distance information update later. @@ -56,10 +62,9 @@ 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, mainCode, returnClosestResult, + .radiusExpander(searchLatLng, Locale.getDefault().getLanguage(), returnClosestResult, customQuery); if (null != places && places.size() > 0) { @@ -141,9 +146,10 @@ public class NearbyController extends MapController { * @throws Exception If an error occurs during the retrieval process. */ public List getPlaces(List placeList) throws Exception { - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - return nearbyPlaces.getPlaces(placeList, mainCode); + + String secondaryLanguages = defaultKvStore.getString(Prefs.SECONDARY_LANGUAGE, ""); + + return nearbyPlaces.getPlaces(placeList, Locale.getDefault().getLanguage(), secondaryLanguages); } public static LatLng calculateNorthEast(double latitude, double longitude, double distance) { @@ -200,11 +206,8 @@ public class NearbyController extends MapController { return null; } - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - List places = nearbyPlaces.getFromWikidataQuery(screenTopRight, screenBottomLeft, - mainCode, shouldQueryForMonuments, customQuery); + Locale.getDefault().getLanguage(), shouldQueryForMonuments, customQuery); if (null != places && places.size() > 0) { LatLng[] boundaryCoordinates = { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 46f0a2a9e..cfc45945e 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -131,9 +131,9 @@ public class NearbyPlaces { * @throws Exception If an error occurs during the retrieval process. */ public List getPlaces(final List placeList, - final String lang) throws Exception { + final String lang, final String lang2) throws Exception { return okHttpJsonApiClient - .getPlaces(placeList, lang); + .getPlaces(placeList, lang, lang2); } /** 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 cf3d257ab..de0154947 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,11 +373,9 @@ 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), - mainCode, + Locale.getDefault().getLanguage(), 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 8fb7e04a9..01224b22c 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 @@ -190,18 +190,11 @@ public class SettingsFragment extends PreferenceFragmentCompat { keyLanguageListPreference = descriptionSecondaryLanguageListPreference.getKey(); languageCode = getCurrentLanguageCode(keyLanguageListPreference); assert languageCode != null; - if (languageCode.equals("")) { - // If current language code is empty, means none selected by user yet so use phone local - descriptionSecondaryLanguageListPreference.setSummary(Locale.getDefault().getDisplayLanguage()); - } else { - // If any language is selected by user previously, use it - Locale defLocale = createLocale(languageCode); - descriptionSecondaryLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); - } + descriptionSecondaryLanguageListPreference.setSummary("List additional languages."); + descriptionSecondaryLanguageListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - System.out.println("click recieved"); prepareSecondaryLanguageDialog(); return true; } @@ -323,19 +316,22 @@ public class SettingsFragment extends PreferenceFragmentCompat { private void prepareSecondaryLanguageDialog() { final String languageCode = getCurrentLanguageCode("descriptionSecondaryLanguagePref"); - System.out.println("before"); - System.out.println(languageCode); HashMap selectedLanguages = new HashMap<>(); assert languageCode != null; - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - selectedLanguages.put(0, mainCode); + selectedLanguages.put(0, Locale.getDefault().getLanguage()); + System.out.println(Locale.getDefault().getLanguage()); + System.out.println(languageCode); // Deserializing saved language codes to Language objects - ArrayList Saved_Languages = new ArrayList<>(); + ArrayList savedLanguages = new ArrayList<>(); for (String code : deSerialise(languageCode)) { + System.out.println(code); + if(code.equals(Locale.getDefault().getLanguage())){ + System.out.println("match"); + continue; + } Locale locale = new Locale(code); - Saved_Languages.add(new Language(locale.getDisplayLanguage(locale), code)); + savedLanguages.add(new Language(locale.getDisplayLanguage(locale), code)); } // Create the new dialog for secondary language @@ -355,29 +351,27 @@ public class SettingsFragment extends PreferenceFragmentCompat { View separator = dialog.findViewById(R.id.separator); // Setup saved languages with the new SavedLanguagesAdapter - updateSavedLanguages(savedLanguageListView, Saved_Languages, selectedLanguages); + updateSavedLanguages(savedLanguageListView, savedLanguages, selectedLanguages); // Set an onItemClickListener to remove a language when clicked savedLanguageListView.setOnItemClickListener((adapterView, view, position, id) -> { // Remove the clicked language from Saved_Languages - Saved_Languages.remove(position); + savedLanguages.remove(position); // Update the saved language list view after removing the language - updateSavedLanguages(savedLanguageListView, Saved_Languages, selectedLanguages); + updateSavedLanguages(savedLanguageListView, savedLanguages, selectedLanguages); // Update the shared preferences to reflect the removal String updatedLanguageCodes = ""; - for (Language language : Saved_Languages) { + for (Language language : savedLanguages) { updatedLanguageCodes += language.getLanguageCode() + ", "; } // Remove the trailing comma and space if present if (!updatedLanguageCodes.isEmpty()) { updatedLanguageCodes = updatedLanguageCodes.substring(0, updatedLanguageCodes.length() - 2); } - saveLanguageValue(updatedLanguageCodes, "descriptionSecondaryLanguagePref"); - System.out.println("after removal"); - System.out.println(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); +// descriptionSecondaryLanguageListPreference.setSummary(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); }); // Set up the adapter for new languages using the selectedLanguages map @@ -411,22 +405,36 @@ public class SettingsFragment extends PreferenceFragmentCompat { return; } - Saved_Languages.add(new Language(selectedLanguageName, selectedLanguageCode)); - updateSavedLanguages(savedLanguageListView, Saved_Languages, selectedLanguages); + savedLanguages.add(new Language(selectedLanguageName, selectedLanguageCode)); + updateSavedLanguages(savedLanguageListView, savedLanguages, selectedLanguages); - - // Save the language - if (getCurrentLanguageCode("descriptionSecondaryLanguagePref").isEmpty()) { - saveLanguageValue(selectedLanguageCode, "descriptionSecondaryLanguagePref"); - } else { - saveLanguageValue(getCurrentLanguageCode("descriptionSecondaryLanguagePref") + ", " - + selectedLanguageCode, "descriptionSecondaryLanguagePref"); + // Update the shared preferences to reflect the addition + String updatedLanguageCodes = ""; + for (Language language : savedLanguages) { + updatedLanguageCodes += language.getLanguageCode() + ", "; } - descriptionSecondaryLanguageListPreference.setSummary(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); + // Remove the trailing comma and space if present + if (!updatedLanguageCodes.isEmpty()) { + updatedLanguageCodes = updatedLanguageCodes.substring(0, updatedLanguageCodes.length() - 2); + } + + saveLanguageValue(updatedLanguageCodes, "descriptionSecondaryLanguagePref"); + +// descriptionSecondaryLanguageListPreference.setSummary(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); }); dialog.setOnDismissListener(dialogInterface -> { - setLocale(requireActivity(), languageCode, false); + // Update the shared preferences to reflect changes + String updatedLanguageCodes = ""; + for (Language language : savedLanguages) { + updatedLanguageCodes += language.getLanguageCode() + ", "; + } + // Remove the trailing comma and space if present + if (!updatedLanguageCodes.isEmpty()) { + updatedLanguageCodes = updatedLanguageCodes.substring(0, updatedLanguageCodes.length() - 2); + } + saveLanguageValue(updatedLanguageCodes, "descriptionSecondaryLanguagePref"); + }); } @@ -454,9 +462,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { assert languageCode != null; if (languageCode.equals("")) { - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - selectedLanguages.put(0, mainCode); + selectedLanguages.put(0, Locale.getDefault().getLanguage()); } else { selectedLanguages.put(0, languageCode); } @@ -464,9 +470,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { assert languageCode != null; if (languageCode.equals("")) { - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - selectedLanguages.put(0, mainCode); + selectedLanguages.put(0, Locale.getDefault().getLanguage()); } else { selectedLanguages.put(0, languageCode); @@ -475,9 +479,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { assert languageCode != null; if (languageCode.equals("")) { - String fullCode = Locale.getDefault().getLanguage(); - String mainCode = fullCode.contains(",") ? fullCode.substring(0, fullCode.indexOf(',')).trim() : fullCode; - selectedLanguages.put(0, mainCode); + selectedLanguages.put(0, Locale.getDefault().getLanguage()); } else { selectedLanguages.put(0, languageCode); @@ -547,16 +549,13 @@ public class SettingsFragment extends PreferenceFragmentCompat { Locale defLocale = createLocale(languageCode); if(keyListPreference.equals("appUiDefaultLanguagePref")) { appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); - setLocale(requireActivity(), languageCode, true); + setLocale(requireActivity(), languageCode); getActivity().recreate(); final Intent intent = new Intent(getActivity(), MainActivity.class); startActivity(intent); }else if(keyListPreference.equals("descriptionDefaultLanguagePref")){ descriptionLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); } - else{ - descriptionSecondaryLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); - } dialog.dismiss(); } }); @@ -615,7 +614,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { final Locale defLocale = createLocale(recentLanguageCode); if (keyListPreference.equals("appUiDefaultLanguagePref")) { appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale)); - setLocale(requireActivity(), recentLanguageCode, true); + setLocale(requireActivity(), recentLanguageCode); getActivity().recreate(); final Intent intent = new Intent(getActivity(), MainActivity.class); startActivity(intent); @@ -642,28 +641,34 @@ public class SettingsFragment extends PreferenceFragmentCompat { /** * Changing the default app language with selected one and save it to SharedPreferences */ - 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); - } + public void setLocale(final Activity activity, String userSelectedValue) { +// 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); +// } +// +// System.out.println("Final locale"); +// System.out.println(userSelectedValue); +// +// System.out.println("vs"); +// System.out.println(getCurrentLanguageCode("appUiDefaultLanguagePref")); +// System.out.println(getCurrentLanguageCode("descriptionSecondaryLanguagePref")); final Locale locale = createLocale(userSelectedValue); Locale.setDefault(locale); diff --git a/app/src/main/resources/queries/query_for_item.rq b/app/src/main/resources/queries/query_for_item.rq index 1a5210e04..563f3d084 100644 --- a/app/src/main/resources/queries/query_for_item.rq +++ b/app/src/main/resources/queries/query_for_item.rq @@ -18,12 +18,14 @@ WHERE { } # Get the label in the preferred language of the user, or any other language if no label is available in that language. - OPTIONAL {?item rdfs:label ?itemLabelPreferredLanguage. FILTER (lang(?itemLabelPreferredLanguage) = "en")} + OPTIONAL {?item rdfs:label ?itemLabelPreferredLanguage. FILTER (lang(?itemLabelPreferredLanguage) = "${LANG}")} + ${SECONDARYLABEL} OPTIONAL {?item rdfs:label ?itemLabelAnyLanguage} BIND(COALESCE(?itemLabelPreferredLanguage, ?itemLabelAnyLanguage, "?") as ?label) # Get the description in the preferred language of the user, or any other language if no description is available in that language. OPTIONAL {?item schema:description ?itemDescriptionPreferredLanguage. FILTER (lang(?itemDescriptionPreferredLanguage) = "${LANG}")} + ${SECONDARYDESCRIPTION} OPTIONAL {?item schema:description ?itemDescriptionAnyLanguage} BIND(COALESCE(?itemDescriptionPreferredLanguage, ?itemDescriptionAnyLanguage, "?") as ?description) @@ -31,6 +33,7 @@ WHERE { OPTIONAL { ?item p:P31/ps:P31 ?class. OPTIONAL {?class rdfs:label ?classLabelPreferredLanguage. FILTER (lang(?classLabelPreferredLanguage) = "${LANG}")} + ${SECONDARYCLASSLABEL} OPTIONAL {?class rdfs:label ?classLabelAnyLanguage} BIND(COALESCE(?classLabelPreferredLanguage, ?classLabelAnyLanguage, "?") as ?classLabel) }