Skip to content

Commit 15bccdf

Browse files
Fixes commons-app#3465 Use AndroidX Pref (commons-app#3521)
* [WIP] Fixes commons-app#3465 Use AndroidX Pref * Deleted Unused Files * Added singleLineTitle * Updated Gradle Properties * Migrated to Androidx * Inline Variable change * optimise imports * Fixed Crash on empty input
1 parent e55b549 commit 15bccdf

12 files changed

+165
-398
lines changed

app/build.gradle

+9-4
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,17 @@ dependencies {
106106
implementation 'com.daimajia.swipelayout:library:1.2.0@aar'
107107

108108
//Room
109-
def room_version= '2.2.3'
110-
implementation "androidx.room:room-runtime:$room_version"
111-
kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
109+
implementation "androidx.room:room-runtime:$ROOM_VERSION"
110+
kapt "androidx.room:room-compiler:$ROOM_VERSION" // For Kotlin use kapt instead of annotationProcessor
112111
implementation 'com.squareup.retrofit2:retrofit:2.7.1'
113-
implementation "androidx.room:room-rxjava2:$room_version"
112+
implementation "androidx.room:room-rxjava2:$ROOM_VERSION"
114113
testImplementation "androidx.arch.core:core-testing:2.1.0"
114+
115+
// Pref
116+
// Java language implementation
117+
implementation "androidx.preference:preference:$PREFERENCE_VERSION"
118+
// Kotlin
119+
implementation "androidx.preference:preference-ktx:$PREFERENCE_VERSION"
115120
}
116121

117122
android {

app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import android.content.pm.PackageManager;
99
import android.content.pm.ResolveInfo;
1010
import android.net.Uri;
11-
import android.preference.PreferenceManager;
11+
import androidx.preference.PreferenceManager;
1212
import android.provider.MediaStore;
1313
import android.text.TextUtils;
1414

app/src/main/java/fr/free/nrw/commons/filepicker/FilePickerConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package fr.free.nrw.commons.filepicker;
22

33
import android.content.Context;
4-
import android.preference.PreferenceManager;
4+
import androidx.preference.PreferenceManager;
55

66
public class FilePickerConfiguration implements Constants {
77

app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java

+58-93
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,17 @@
33
import android.Manifest;
44
import android.net.Uri;
55
import android.os.Bundle;
6-
import android.preference.EditTextPreference;
7-
import android.preference.ListPreference;
8-
import android.preference.MultiSelectListPreference;
9-
import android.preference.Preference;
10-
import android.preference.PreferenceFragment;
11-
import android.preference.SwitchPreference;
12-
import android.text.Editable;
13-
import android.text.TextWatcher;
14-
6+
import android.text.InputFilter;
7+
import android.text.InputType;
8+
import androidx.preference.EditTextPreference;
9+
import androidx.preference.ListPreference;
10+
import androidx.preference.MultiSelectListPreference;
11+
import androidx.preference.Preference;
12+
import androidx.preference.PreferenceFragmentCompat;
13+
import com.google.android.material.snackbar.Snackbar;
1514
import com.karumi.dexter.Dexter;
1615
import com.karumi.dexter.listener.PermissionGrantedResponse;
1716
import com.karumi.dexter.listener.single.BasePermissionListener;
18-
19-
import java.util.ArrayList;
20-
import java.util.Collections;
21-
import java.util.HashSet;
22-
import java.util.List;
23-
import java.util.Locale;
24-
25-
import javax.inject.Inject;
26-
import javax.inject.Named;
27-
2817
import fr.free.nrw.commons.R;
2918
import fr.free.nrw.commons.Utils;
3019
import fr.free.nrw.commons.di.ApplicationlessInjection;
@@ -33,10 +22,15 @@
3322
import fr.free.nrw.commons.upload.Language;
3423
import fr.free.nrw.commons.utils.PermissionUtils;
3524
import fr.free.nrw.commons.utils.ViewUtil;
25+
import java.util.ArrayList;
26+
import java.util.Collections;
27+
import java.util.HashSet;
28+
import java.util.List;
29+
import java.util.Locale;
30+
import javax.inject.Inject;
31+
import javax.inject.Named;
3632

37-
import static fr.free.nrw.commons.utils.SystemThemeUtils.THEME_MODE_DEFAULT;
38-
39-
public class SettingsFragment extends PreferenceFragment {
33+
public class SettingsFragment extends PreferenceFragmentCompat {
4034

4135
@Inject
4236
@Named("default_preferences")
@@ -49,29 +43,19 @@ public class SettingsFragment extends PreferenceFragment {
4943
private ListPreference langListPreference;
5044

5145
@Override
52-
public void onCreate(Bundle savedInstanceState) {
53-
super.onCreate(savedInstanceState);
46+
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
5447
ApplicationlessInjection
55-
.getInstance(getActivity().getApplicationContext())
56-
.getCommonsApplicationComponent()
57-
.inject(this);
48+
.getInstance(getActivity().getApplicationContext())
49+
.getCommonsApplicationComponent()
50+
.inject(this);
5851

59-
// Load the preferences from an XML resource
60-
addPreferencesFromResource(R.xml.preferences);
52+
// Set the preferences from an XML resource
53+
setPreferencesFromResource(R.xml.preferences, rootKey);
6154

62-
themeListPreference = (ListPreference) findPreference(Prefs.KEY_THEME_VALUE);
55+
themeListPreference = findPreference(Prefs.KEY_THEME_VALUE);
6356
prepareTheme();
6457

65-
//Check if the Author Name switch is enabled and appropriately handle the author name usage
66-
SwitchPreference useAuthorName = (SwitchPreference) findPreference("useAuthorName");
67-
EditTextPreference authorName = (EditTextPreference) findPreference("authorName");
68-
authorName.setEnabled(defaultKvStore.getBoolean("useAuthorName", false));
69-
useAuthorName.setOnPreferenceChangeListener((preference, newValue) -> {
70-
authorName.setEnabled((Boolean)newValue);
71-
return true;
72-
});
73-
74-
MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference(Prefs.MANAGED_EXIF_TAGS);
58+
MultiSelectListPreference multiSelectListPref = findPreference(Prefs.MANAGED_EXIF_TAGS);
7559
if (multiSelectListPref != null) {
7660
multiSelectListPref.setOnPreferenceChangeListener((preference, newValue) -> {
7761
if (newValue instanceof HashSet && !((HashSet) newValue).contains(getString(R.string.exif_tag_location))) {
@@ -81,42 +65,44 @@ public void onCreate(Bundle savedInstanceState) {
8165
});
8266
}
8367

84-
final EditTextPreference uploadLimit = (EditTextPreference) findPreference("uploads");
68+
final EditTextPreference uploadLimit = findPreference("uploads");
8569
int currentUploadLimit = defaultKvStore.getInt(Prefs.UPLOADS_SHOWING, 100);
86-
uploadLimit.setText(Integer.toString(currentUploadLimit));
87-
uploadLimit.setSummary(Integer.toString(currentUploadLimit));
88-
uploadLimit.getEditText().addTextChangedListener(new TextWatcher() {
89-
@Override
90-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
70+
uploadLimit.setText(String.valueOf(currentUploadLimit));
71+
72+
uploadLimit.setOnPreferenceChangeListener((preference, newValue) -> {
9173

74+
if (newValue.toString().length() == 0) {
75+
return false;
9276
}
9377

94-
@Override
95-
public void onTextChanged(CharSequence s, int start, int before, int count) {
78+
int value = Integer.parseInt(newValue.toString());
79+
if (value > 500) {
80+
Snackbar error = Snackbar.make(getView(), R.string.maximum_limit_alert, Snackbar.LENGTH_LONG);
81+
error.show();
82+
return false;
83+
} else if (value == 0) {
84+
Snackbar error = Snackbar.make(getView(), R.string.cannot_be_zero, Snackbar.LENGTH_LONG);
85+
error.show();
86+
return false;
9687
}
88+
return true;
89+
});
9790

98-
@Override
99-
public void afterTextChanged(Editable s) {
100-
if (s.length() == 0) return;
91+
uploadLimit.setOnBindEditTextListener(editText -> {
10192

102-
int value = Integer.parseInt(s.toString());
93+
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
94+
editText.selectAll();
95+
int maxLength = 3; // set maxLength to 3
96+
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
10397

104-
if (value > 500) {
105-
uploadLimit.getEditText().setError(getString(R.string.maximum_limit_alert));
106-
value = 500;
107-
} else if (value == 0) {
108-
uploadLimit.getEditText().setError(getString(R.string.cannot_be_zero));
109-
value = 100;
110-
}
98+
int value = Integer.parseInt(editText.getText().toString());
11199

112-
defaultKvStore.putInt(Prefs.UPLOADS_SHOWING, value);
113-
defaultKvStore.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED, true);
114-
uploadLimit.setText(Integer.toString(value));
115-
uploadLimit.setSummary(Integer.toString(value));
116-
}
100+
defaultKvStore.putInt(Prefs.UPLOADS_SHOWING, value);
101+
defaultKvStore.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED, true);
102+
uploadLimit.setText(Integer.toString(value));
117103
});
118104

119-
langListPreference = (ListPreference) findPreference("descriptionDefaultLanguagePref");
105+
langListPreference = findPreference("descriptionDefaultLanguagePref");
120106
prepareLanguages();
121107
Preference betaTesterPreference = findPreference("becomeBetaTester");
122108
betaTesterPreference.setOnPreferenceClickListener(preference -> {
@@ -129,42 +115,26 @@ public void afterTextChanged(Editable s) {
129115
return true;
130116
});
131117
// Disable some settings when not logged in.
132-
if (defaultKvStore.getBoolean("login_skipped", false)){
133-
SwitchPreference useExternalStorage = (SwitchPreference) findPreference("useExternalStorage");
134-
SwitchPreference displayNearbyCardView = (SwitchPreference) findPreference("displayNearbyCardView");
135-
SwitchPreference displayLocationPermissionForCardView = (SwitchPreference) findPreference("displayLocationPermissionForCardView");
136-
SwitchPreference displayCampaignsCardView = (SwitchPreference) findPreference("displayCampaignsCardView");
137-
useExternalStorage.setEnabled(false);
118+
if (defaultKvStore.getBoolean("login_skipped", false)) {
119+
findPreference("useExternalStorage").setEnabled(false);
120+
findPreference("useAuthorName").setEnabled(false);
121+
findPreference("displayNearbyCardView").setEnabled(false);
122+
findPreference("displayLocationPermissionForCardView").setEnabled(false);
123+
findPreference("displayCampaignsCardView").setEnabled(false);
138124
uploadLimit.setEnabled(false);
139-
useAuthorName.setEnabled(false);
140-
displayNearbyCardView.setEnabled(false);
141-
displayLocationPermissionForCardView.setEnabled(false);
142-
displayCampaignsCardView.setEnabled(false);
143125
}
144126
}
145127

146128
/**
147-
* Uses previously saved theme if there is any, if not then uses default.
129+
* Sets the theme pref
148130
*/
149131
private void prepareTheme() {
150-
151-
themeListPreference.setSummary(getThemeSummary(getCurrentTheme()));
152-
153132
themeListPreference.setOnPreferenceChangeListener((preference, newValue) -> {
154133
getActivity().recreate();
155134
return true;
156135
});
157136
}
158137

159-
private CharSequence getThemeSummary(String value) {
160-
int prefIndex = themeListPreference.findIndexOfValue(value);
161-
return themeListPreference.getEntries()[prefIndex];
162-
}
163-
164-
private String getCurrentTheme() {
165-
return defaultKvStore.getString(Prefs.KEY_THEME_VALUE, THEME_MODE_DEFAULT);
166-
}
167-
168138
/**
169139
* Prepares language summary and language codes list and adds them to list preference as pairs.
170140
* Uses previously saved language if there is any, if not uses phone local as initial language.
@@ -195,19 +165,14 @@ private void prepareLanguages() {
195165
String languageCode = getCurrentLanguageCode();
196166
if (languageCode.equals("")){
197167
// If current language code is empty, means none selected by user yet so use phone local
198-
langListPreference.setSummary(Locale.getDefault().getDisplayLanguage());
199168
langListPreference.setValue(Locale.getDefault().getLanguage());
200169
} else {
201170
// If any language is selected by user previously, use it
202-
int prefIndex = langListPreference.findIndexOfValue(languageCode);
203-
langListPreference.setSummary(langListPreference.getEntries()[prefIndex]);
204171
langListPreference.setValue(languageCode);
205172
}
206173

207174
langListPreference.setOnPreferenceChangeListener((preference, newValue) -> {
208175
String userSelectedValue = (String) newValue;
209-
int prefIndex = langListPreference.findIndexOfValue(userSelectedValue);
210-
langListPreference.setSummary(langListPreference.getEntries()[prefIndex]);
211176
saveLanguageValue(userSelectedValue);
212177
return true;
213178
});

app/src/main/java/fr/free/nrw/commons/ui/LongTitlePreferences/LongTitleEditTextPreference.java

-37
This file was deleted.

app/src/main/java/fr/free/nrw/commons/ui/LongTitlePreferences/LongTitleListPreference.java

-32
This file was deleted.

app/src/main/java/fr/free/nrw/commons/ui/LongTitlePreferences/LongTitleMultiSelectListPreference.java

-38
This file was deleted.

0 commit comments

Comments
 (0)