Finished Issue 1

This commit is contained in:
Adith 2024-10-21 02:31:46 +11:00
parent 7f537f2ccd
commit 1dd633d9b9
10 changed files with 142 additions and 103 deletions

View file

@ -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) {

View file

@ -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() {

View file

@ -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());
}
}

View file

@ -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<String, String> descriptions = media.getDescriptions();
final String multilingualDesc = descriptions.get(mainCode);
final String multilingualDesc = descriptions.get(Locale.getDefault().getLanguage());
if (multilingualDesc != null) {
return multilingualDesc;
}

View file

@ -409,15 +409,55 @@ public class OkHttpJsonApiClient {
*/
@Nullable
public List<Place> getPlaces(
final List<Place> placeList, final String language) throws IOException {
final List<Place> 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

View file

@ -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<Place> 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<Place> getPlaces(List<Place> 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<Place> places = nearbyPlaces.getFromWikidataQuery(screenTopRight, screenBottomLeft,
mainCode, shouldQueryForMonuments, customQuery);
Locale.getDefault().getLanguage(), shouldQueryForMonuments, customQuery);
if (null != places && places.size() > 0) {
LatLng[] boundaryCoordinates = {

View file

@ -131,9 +131,9 @@ public class NearbyPlaces {
* @throws Exception If an error occurs during the retrieval process.
*/
public List<Place> getPlaces(final List<Place> placeList,
final String lang) throws Exception {
final String lang, final String lang2) throws Exception {
return okHttpJsonApiClient
.getPlaces(placeList, lang);
.getPlaces(placeList, lang, lang2);
}
/**

View file

@ -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<Place> 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;

View file

@ -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<Integer, String> 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<Language> Saved_Languages = new ArrayList<>();
ArrayList<Language> 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<String> languageCodes = deSerialise(current);
if(appUI) {
languageCodes.set(0, userSelectedValue);
userSelectedValue = reSerialise(languageCodes);
}
else{
ArrayList<String> newLanguageCodes = new ArrayList<>();
ArrayList<String> 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<String> languageCodes = deSerialise(current);
// if(appUI) {
// languageCodes.set(0, userSelectedValue);
// userSelectedValue = reSerialise(languageCodes);
// }
// else{
// ArrayList<String> newLanguageCodes = new ArrayList<>();
// ArrayList<String> 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);

View file

@ -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)
}