Skip to content

Commit

Permalink
Merge branch 'master' into 2.11-release
Browse files Browse the repository at this point in the history
  • Loading branch information
maskaravivek authored Jun 26, 2019
2 parents 5dc45a5 + 4ec92c2 commit 31b5179
Show file tree
Hide file tree
Showing 24 changed files with 299 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ private void inflateAchievements(Achievements achievements) {
imagesUsedByWikiProgressBar.setProgressTextFormatPattern
(achievements.getUniqueUsedImages() + "/" + levelInfo.getMaxUniqueImages());
imagesFeatured.setText(String.valueOf(achievements.getFeaturedImages()));
String levelUpInfoString = getString(R.string.level);
String levelUpInfoString = getString(R.string.level).toUpperCase();
levelUpInfoString += " " + levelInfo.getLevelNumber();
levelNumber.setText(levelUpInfoString);
imageView.setImageDrawable(VectorDrawableCompat.create(getResources(), R.drawable.badge,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ public void setTabs() {
searchImageFragment = new SearchImageFragment();
searchCategoryFragment= new SearchCategoryFragment();
fragmentList.add(searchImageFragment);
titleList.add(getResources().getString(R.string.search_tab_title_media));
titleList.add(getResources().getString(R.string.search_tab_title_media).toUpperCase());
fragmentList.add(searchCategoryFragment);
titleList.add(getResources().getString(R.string.search_tab_title_categories));
titleList.add(getResources().getString(R.string.search_tab_title_categories).toUpperCase());

viewPagerAdapter.setTabData(fragmentList, titleList);
viewPagerAdapter.notifyDataSetChanged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,14 @@ public void setTabs() {
featuredArguments.putString("categoryName", FEATURED_IMAGES_CATEGORY);
featuredImagesListFragment.setArguments(featuredArguments);
fragmentList.add(featuredImagesListFragment);
titleList.add(getString(R.string.explore_tab_title_featured));
titleList.add(getString(R.string.explore_tab_title_featured).toUpperCase());

mobileImagesListFragment = new CategoryImagesListFragment();
Bundle mobileArguments = new Bundle();
mobileArguments.putString("categoryName", MOBILE_UPLOADS_CATEGORY);
mobileImagesListFragment.setArguments(mobileArguments);
fragmentList.add(mobileImagesListFragment);
titleList.add(getString(R.string.explore_tab_title_mobile));
titleList.add(getString(R.string.explore_tab_title_mobile).toUpperCase());

viewPagerAdapter.setTabData(fragmentList, titleList);
viewPagerAdapter.notifyDataSetChanged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
recentSearchesList.setOnItemLongClickListener((parent, view, position, id) -> {
new AlertDialog.Builder(getContext())
.setMessage(R.string.delete_search_dialog)
.setPositiveButton(R.string.delete,((dialog, which) -> {
.setPositiveButton(getString(R.string.delete).toUpperCase(),((dialog, which) -> {
recentSearchesDao.delete(recentSearchesDao.find(recentSearches.get(position)));
recentSearches = recentSearchesDao.recentSearches(10);
adapter = new ArrayAdapter<>(getContext(), R.layout.item_recent_searches, recentSearches);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ public void onDestroy() {

public void showSkipImageInfo(){
DialogUtil.showAlertDialog(ReviewActivity.this,
getString(R.string.skip_image),
getString(R.string.skip_image).toUpperCase(),
getString(R.string.skip_image_explanation),
getString(android.R.string.ok),
"",
Expand Down
1 change: 1 addition & 0 deletions app/src/main/java/fr/free/nrw/commons/settings/Prefs.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public class Prefs {
public static final String UPLOADS_SHOWING = "uploadsshowing";
public static final String IS_CONTRIBUTION_COUNT_CHANGED = "ccontributionCountChanged";
public static final String MANAGED_EXIF_TAGS = "managedExifTags";
public static final String KEY_LANGUAGE_VALUE = "languageDescription";

public static class Licenses {
public static final String CC_BY_SA_3 = "CC BY-SA 3.0";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package fr.free.nrw.commons.settings;

import android.Manifest;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.MultiSelectListPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.SwitchPreference;
import android.text.Editable;
import android.text.TextWatcher;
Expand All @@ -15,10 +18,10 @@
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.single.BasePermissionListener;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.inject.Inject;
import javax.inject.Named;
Expand All @@ -30,6 +33,7 @@
import fr.free.nrw.commons.logging.CommonsLogSender;
import fr.free.nrw.commons.utils.PermissionUtils;
import fr.free.nrw.commons.utils.ViewUtil;
import fr.free.nrw.commons.upload.Language;

public class SettingsFragment extends PreferenceFragment {

Expand All @@ -38,6 +42,7 @@ public class SettingsFragment extends PreferenceFragment {
JsonKvStore defaultKvStore;
@Inject
CommonsLogSender commonsLogSender;
private ListPreference listPreference;

@Override
public void onCreate(Bundle savedInstanceState) {
Expand Down Expand Up @@ -108,6 +113,8 @@ public void afterTextChanged(Editable s) {
}
});

listPreference = (ListPreference) findPreference("descriptionDefaultLanguagePref");
prepareLanguages();
Preference betaTesterPreference = findPreference("becomeBetaTester");
betaTesterPreference.setOnPreferenceClickListener(preference -> {
Utils.handleWebUrl(getActivity(), Uri.parse(getResources().getString(R.string.beta_opt_in_link)));
Expand All @@ -133,6 +140,74 @@ public void afterTextChanged(Editable s) {
}
}

/**
* Prepares language summary and language codes list and adds them to list preference as pairs.
* Uses previously saved language if there is any, if not uses phone local as initial language.
* Adds preference changed listener and saves value choosen by user to shared preferences
* to remember later
*/
private void prepareLanguages() {
List<String> languageNamesList = new ArrayList<>();
List<String> languageCodesList = new ArrayList<>();
List<Language> languages = getLanguagesSupportedByDevice();

for(Language language: languages) {
// Go through all languages and add them to lists
if(!languageCodesList.contains(language.getLocale().getLanguage())) {
// This if prevents us from adding same language twice
languageNamesList.add(language.getLocale().getDisplayName());
languageCodesList.add(language.getLocale().getLanguage());
}
}

CharSequence[] languageNames = languageNamesList.toArray(new CharSequence[0]);
CharSequence[] languageCodes = languageCodesList.toArray(new CharSequence[0]);
// Add all languages and languages codes to lists preference as pair
listPreference.setEntries(languageNames);
listPreference.setEntryValues(languageCodes);

// Gets current language code from shared preferences
String languageCode = getCurrentLanguageCode();
if(languageCode.equals("")){
// If current language code is empty, means none selected by user yet so use phone local
listPreference.setSummary(Locale.getDefault().getDisplayLanguage());
listPreference.setValue(Locale.getDefault().getLanguage());
} else {
// If any language is selected by user previously, use it
int prefIndex = listPreference.findIndexOfValue(languageCode);
listPreference.setSummary(listPreference.getEntries()[prefIndex]);
listPreference.setValue(languageCode);
}

listPreference.setOnPreferenceChangeListener((preference, newValue) -> {
String userSelectedValue = (String) newValue;
int prefIndex = listPreference.findIndexOfValue(userSelectedValue);
listPreference.setSummary(listPreference.getEntries()[prefIndex]);
saveLanguageValue(userSelectedValue);
return true;
});
}

private void saveLanguageValue(String userSelectedValue) {
defaultKvStore.putString(Prefs.KEY_LANGUAGE_VALUE, userSelectedValue);
}

private String getCurrentLanguageCode() {
return defaultKvStore.getString(Prefs.KEY_LANGUAGE_VALUE, "");
}

private List<Language> getLanguagesSupportedByDevice() {
List<Language> languages = new ArrayList<>();
Locale[] localesArray = Locale.getAvailableLocales();
for (Locale locale : localesArray) {
languages.add(new Language(locale));
}

Collections.sort(languages, (language, t1) -> language.getLocale().getDisplayName()
.compareTo(t1.getLocale().getDisplayName()));
return languages;
}

/**
* First checks for external storage permissions and then sends logs via email
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ public class DescriptionsAdapter extends RecyclerView.Adapter<DescriptionsAdapte
private Callback callback;

private BiMap<AdapterView, String> selectedLanguages;
private String savedLanguageValue;

public DescriptionsAdapter() {
public DescriptionsAdapter(String savedLanguageValue) {
descriptions = new ArrayList<>();
selectedLanguages = new BiMap<>();
this.savedLanguageValue = savedLanguageValue;
}

public void setCallback(Callback callback) {
Expand Down Expand Up @@ -143,14 +145,15 @@ public void init(int position) {
private void initLanguageSpinner(int position, Description description) {
SpinnerLanguagesAdapter languagesAdapter = new SpinnerLanguagesAdapter(
spinnerDescriptionLanguages.getContext(),
R.layout.row_item_languages_spinner, selectedLanguages);
R.layout.row_item_languages_spinner, selectedLanguages,
savedLanguageValue);
languagesAdapter.notifyDataSetChanged();
spinnerDescriptionLanguages.setAdapter(languagesAdapter);

spinnerDescriptionLanguages.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position,
long l) {
long l) {
description.setSelectedLanguageIndex(position);
String languageCode = ((SpinnerLanguagesAdapter) adapterView.getAdapter())
.getLanguageCode(position);
Expand All @@ -159,22 +162,28 @@ public void onItemSelected(AdapterView<?> adapterView, View view, int position,
selectedLanguages.put(adapterView, languageCode);
((SpinnerLanguagesAdapter) adapterView
.getAdapter()).selectedLangCode = languageCode;
Timber.d("Description language code is: "+languageCode);
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
});

if (description.getSelectedLanguageIndex() == -1) {
if (position == 0) {
int defaultLocaleIndex = languagesAdapter
.getIndexOfUserDefaultLocale(spinnerDescriptionLanguages.getContext());
spinnerDescriptionLanguages.setSelection(defaultLocaleIndex, true);
if (savedLanguageValue != null) {
// If user has chosen a default language from settings activity savedLanguageValue is not null
spinnerDescriptionLanguages.setSelection(languagesAdapter.getIndexOfLanguageCode(savedLanguageValue));
} else {
spinnerDescriptionLanguages.setSelection(0);
if (position == 0) {
int defaultLocaleIndex = languagesAdapter
.getIndexOfUserDefaultLocale(spinnerDescriptionLanguages.getContext());
spinnerDescriptionLanguages.setSelection(defaultLocaleIndex, true);
} else {
spinnerDescriptionLanguages.setSelection(0);
}
}

} else {
spinnerDescriptionLanguages.setSelection(description.getSelectedLanguageIndex());
selectedLanguages.put(spinnerDescriptionLanguages, description.getLanguageCode());
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/fr/free/nrw/commons/upload/Language.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.Locale;

class Language {
public class Language {
private Locale locale;
private boolean isSet = false;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package fr.free.nrw.commons.upload;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand All @@ -16,15 +18,16 @@

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.apache.commons.lang3.StringUtils;

import butterknife.BindView;
import butterknife.ButterKnife;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.utils.BiMap;
import fr.free.nrw.commons.utils.LangCodeUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;


public class SpinnerLanguagesAdapter extends ArrayAdapter {

Expand All @@ -34,18 +37,26 @@ public class SpinnerLanguagesAdapter extends ArrayAdapter {
private List<String> languageCodesList;
private final BiMap<AdapterView, String> selectedLanguages;
public String selectedLangCode="";
private Context context;
private boolean dropDownClicked;
private String savedLanguageValue;



public SpinnerLanguagesAdapter(@NonNull Context context,
int resource, BiMap<AdapterView, String> selectedLanguages) {
int resource,
BiMap<AdapterView, String> selectedLanguages,
String savedLanguageValue) {
super(context, resource);
this.resource = resource;
this.layoutInflater = LayoutInflater.from(context);
languageNamesList = new ArrayList<>();
languageCodesList = new ArrayList<>();
prepareLanguages();
this.selectedLanguages = selectedLanguages;
this.context = context;
this.dropDownClicked = false;
this.savedLanguageValue = savedLanguageValue;
}

private void prepareLanguages() {
Expand Down Expand Up @@ -90,7 +101,9 @@ public View getDropDownView(int position, @Nullable View convertView,
convertView = layoutInflater.inflate(resource, parent, false);
}
ViewHolder holder = new ViewHolder(convertView);
holder.init(position, true);
holder.init(position, true, savedLanguageValue);

dropDownClicked = true;
return convertView;
}

Expand All @@ -105,7 +118,7 @@ View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.init(position, false);
holder.init(position, false, savedLanguageValue);
return convertView;
}

Expand All @@ -122,17 +135,23 @@ public ViewHolder(View itemView) {
ButterKnife.bind(this, itemView);
}

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));
public void init(int position, boolean isDropDownView, String savedLanguageValue) {
String languageCode = LangCodeUtils.fixLanguageCode(languageCodesList.get(position));
final String languageName = StringUtils.capitalize(languageNamesList.get(position));

if(savedLanguageValue.equals("")){
savedLanguageValue = Locale.getDefault().getLanguage();
}

if (!isDropDownView) {
if( !dropDownClicked){
languageCode = LangCodeUtils.fixLanguageCode(savedLanguageValue);
}
view.setVisibility(View.GONE);
if(languageCode.length()>2)
tvLanguage.setText(languageCode.subSequence(0,2));
if (languageCode.length() > 2)
tvLanguage.setText(languageCode.substring(0, 2));
else
tvLanguage.setText(languageCode);

} else {
view.setVisibility(View.VISIBLE);
if (languageCodesList.get(position).isEmpty()) {
Expand All @@ -141,7 +160,7 @@ public void init(int position, boolean isDropDownView) {
} else {
tvLanguage.setText(
String.format("%s [%s]", languageName, languageCode));
if(selectedLanguages.containsKey(languageCodesList.get(position))&&
if (selectedLanguages.containsKey(languageCodesList.get(position)) &&
!languageCodesList.get(position).equals(selectedLangCode)) {
tvLanguage.setTextColor(Color.GRAY);
}
Expand All @@ -158,4 +177,7 @@ int getIndexOfUserDefaultLocale(Context context) {
return languageCodesList.indexOf(context.getResources().getConfiguration().locale.getLanguage());
}

int getIndexOfLanguageCode(String languageCode) {
return languageCodesList.indexOf(languageCode);
}
}
Loading

0 comments on commit 31b5179

Please sign in to comment.