Skip to content

Fixes #3465 Use AndroidX Pref #3521

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Mar 17, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Migrated to Androidx
  • Loading branch information
madhurgupta10 committed Mar 16, 2020
commit 6438e537752a963e3bddfdcb0ec73d3ec86a46e7
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.preference.PreferenceManager;
import androidx.preference.PreferenceManager;
import android.provider.MediaStore;
import android.text.TextUtils;

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

import android.content.Context;
import android.preference.PreferenceManager;
import androidx.preference.PreferenceManager;

public class FilePickerConfiguration implements Constants {

Expand Down
145 changes: 56 additions & 89 deletions app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,18 @@
import android.Manifest;
import android.net.Uri;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.MultiSelectListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.SwitchPreference;
import android.text.Editable;
import android.text.TextWatcher;

import android.text.InputFilter;
import android.text.InputType;
import androidx.preference.EditTextPreference;
import androidx.preference.ListPreference;
import androidx.preference.MultiSelectListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SwitchPreference;
import com.google.android.material.snackbar.Snackbar;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.single.BasePermissionListener;

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

import javax.inject.Inject;
import javax.inject.Named;

import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.di.ApplicationlessInjection;
Expand All @@ -33,10 +23,15 @@
import fr.free.nrw.commons.upload.Language;
import fr.free.nrw.commons.utils.PermissionUtils;
import fr.free.nrw.commons.utils.ViewUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import javax.inject.Inject;
import javax.inject.Named;

import static fr.free.nrw.commons.utils.SystemThemeUtils.THEME_MODE_DEFAULT;

public class SettingsFragment extends PreferenceFragment {
public class SettingsFragment extends PreferenceFragmentCompat {

@Inject
@Named("default_preferences")
Expand All @@ -49,29 +44,21 @@ public class SettingsFragment extends PreferenceFragment {
private ListPreference langListPreference;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
ApplicationlessInjection
.getInstance(getActivity().getApplicationContext())
.getCommonsApplicationComponent()
.inject(this);
.getInstance(getActivity().getApplicationContext())
.getCommonsApplicationComponent()
.inject(this);

// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
// Set the preferences from an XML resource
setPreferencesFromResource(R.xml.preferences, rootKey);

themeListPreference = (ListPreference) findPreference(Prefs.KEY_THEME_VALUE);
themeListPreference = findPreference(Prefs.KEY_THEME_VALUE);
prepareTheme();

//Check if the Author Name switch is enabled and appropriately handle the author name usage
SwitchPreference useAuthorName = (SwitchPreference) findPreference("useAuthorName");
EditTextPreference authorName = (EditTextPreference) findPreference("authorName");
authorName.setEnabled(defaultKvStore.getBoolean("useAuthorName", false));
useAuthorName.setOnPreferenceChangeListener((preference, newValue) -> {
authorName.setEnabled((Boolean)newValue);
return true;
});
SwitchPreference useAuthorName = findPreference("useAuthorName");

MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference(Prefs.MANAGED_EXIF_TAGS);
MultiSelectListPreference multiSelectListPref = findPreference(Prefs.MANAGED_EXIF_TAGS);
if (multiSelectListPref != null) {
multiSelectListPref.setOnPreferenceChangeListener((preference, newValue) -> {
if (newValue instanceof HashSet && !((HashSet) newValue).contains(getString(R.string.exif_tag_location))) {
Expand All @@ -81,42 +68,39 @@ public void onCreate(Bundle savedInstanceState) {
});
}

final EditTextPreference uploadLimit = (EditTextPreference) findPreference("uploads");
final EditTextPreference uploadLimit = findPreference("uploads");
int currentUploadLimit = defaultKvStore.getInt(Prefs.UPLOADS_SHOWING, 100);
uploadLimit.setText(Integer.toString(currentUploadLimit));
uploadLimit.setSummary(Integer.toString(currentUploadLimit));
uploadLimit.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

uploadLimit.setText(String.valueOf(currentUploadLimit));

uploadLimit.setOnPreferenceChangeListener((preference, newValue) -> {
int value = Integer.parseInt(newValue.toString());
if (value > 500) {
Snackbar error = Snackbar.make(getView(), R.string.maximum_limit_alert, Snackbar.LENGTH_LONG);
error.show();
return false;
} else if (value == 0) {
Snackbar error = Snackbar.make(getView(), R.string.cannot_be_zero, Snackbar.LENGTH_LONG);
error.show();
return false;
}
return true;
});

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
uploadLimit.setOnBindEditTextListener(editText -> {

@Override
public void afterTextChanged(Editable s) {
if (s.length() == 0) return;
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.selectAll();
int maxLength = 3; // set maxLength to 3
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});

int value = Integer.parseInt(s.toString());
int value = Integer.parseInt(editText.getText().toString());

if (value > 500) {
uploadLimit.getEditText().setError(getString(R.string.maximum_limit_alert));
value = 500;
} else if (value == 0) {
uploadLimit.getEditText().setError(getString(R.string.cannot_be_zero));
value = 100;
}

defaultKvStore.putInt(Prefs.UPLOADS_SHOWING, value);
defaultKvStore.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED, true);
uploadLimit.setText(Integer.toString(value));
uploadLimit.setSummary(Integer.toString(value));
}
defaultKvStore.putInt(Prefs.UPLOADS_SHOWING, value);
defaultKvStore.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED, true);
uploadLimit.setText(Integer.toString(value));
});

langListPreference = (ListPreference) findPreference("descriptionDefaultLanguagePref");
langListPreference = findPreference("descriptionDefaultLanguagePref");
prepareLanguages();
Preference betaTesterPreference = findPreference("becomeBetaTester");
betaTesterPreference.setOnPreferenceClickListener(preference -> {
Expand All @@ -130,10 +114,10 @@ public void afterTextChanged(Editable s) {
});
// Disable some settings when not logged in.
if (defaultKvStore.getBoolean("login_skipped", false)){
SwitchPreference useExternalStorage = (SwitchPreference) findPreference("useExternalStorage");
SwitchPreference displayNearbyCardView = (SwitchPreference) findPreference("displayNearbyCardView");
SwitchPreference displayLocationPermissionForCardView = (SwitchPreference) findPreference("displayLocationPermissionForCardView");
SwitchPreference displayCampaignsCardView = (SwitchPreference) findPreference("displayCampaignsCardView");
SwitchPreference useExternalStorage = findPreference("useExternalStorage");
SwitchPreference displayNearbyCardView = findPreference("displayNearbyCardView");
SwitchPreference displayLocationPermissionForCardView = findPreference("displayLocationPermissionForCardView");
SwitchPreference displayCampaignsCardView = findPreference("displayCampaignsCardView");
useExternalStorage.setEnabled(false);
uploadLimit.setEnabled(false);
useAuthorName.setEnabled(false);
Expand All @@ -144,27 +128,15 @@ public void afterTextChanged(Editable s) {
}

/**
* Uses previously saved theme if there is any, if not then uses default.
* Sets the theme pref
*/
private void prepareTheme() {

themeListPreference.setSummary(getThemeSummary(getCurrentTheme()));

themeListPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getActivity().recreate();
return true;
});
}

private CharSequence getThemeSummary(String value) {
int prefIndex = themeListPreference.findIndexOfValue(value);
return themeListPreference.getEntries()[prefIndex];
}

private String getCurrentTheme() {
return defaultKvStore.getString(Prefs.KEY_THEME_VALUE, THEME_MODE_DEFAULT);
}

/**
* 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.
Expand Down Expand Up @@ -195,19 +167,14 @@ private void prepareLanguages() {
String languageCode = getCurrentLanguageCode();
if (languageCode.equals("")){
// If current language code is empty, means none selected by user yet so use phone local
langListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
langListPreference.setValue(Locale.getDefault().getLanguage());
} else {
// If any language is selected by user previously, use it
int prefIndex = langListPreference.findIndexOfValue(languageCode);
langListPreference.setSummary(langListPreference.getEntries()[prefIndex]);
langListPreference.setValue(languageCode);
}

langListPreference.setOnPreferenceChangeListener((preference, newValue) -> {
String userSelectedValue = (String) newValue;
int prefIndex = langListPreference.findIndexOfValue(userSelectedValue);
langListPreference.setSummary(langListPreference.getEntries()[prefIndex]);
saveLanguageValue(userSelectedValue);
return true;
});
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/res/xml/preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,14 @@

<EditTextPreference
android:defaultValue="100"
android:inputType="number"
android:key="uploads"
android:maxLength="3"
app:useSimpleSummaryProvider="true"
app:singleLineTitle="false"
android:title="@string/set_limit" />

<ListPreference
android:key="descriptionDefaultLanguagePref"
android:summary="English"
app:useSimpleSummaryProvider="true"
app:singleLineTitle="false"
android:title="@string/default_description_language" />

Expand All @@ -49,6 +48,7 @@
<EditTextPreference
android:key="authorName"
app:singleLineTitle="false"
app:dependency="useAuthorName"
android:summary="@string/preference_author_name_summary"
android:title="@string/preference_author_name" />

Expand Down