3
3
import android .Manifest ;
4
4
import android .net .Uri ;
5
5
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 ;
15
14
import com .karumi .dexter .Dexter ;
16
15
import com .karumi .dexter .listener .PermissionGrantedResponse ;
17
16
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
-
28
17
import fr .free .nrw .commons .R ;
29
18
import fr .free .nrw .commons .Utils ;
30
19
import fr .free .nrw .commons .di .ApplicationlessInjection ;
33
22
import fr .free .nrw .commons .upload .Language ;
34
23
import fr .free .nrw .commons .utils .PermissionUtils ;
35
24
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 ;
36
32
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 {
40
34
41
35
@ Inject
42
36
@ Named ("default_preferences" )
@@ -49,29 +43,19 @@ public class SettingsFragment extends PreferenceFragment {
49
43
private ListPreference langListPreference ;
50
44
51
45
@ Override
52
- public void onCreate (Bundle savedInstanceState ) {
53
- super .onCreate (savedInstanceState );
46
+ public void onCreatePreferences (Bundle savedInstanceState , String rootKey ) {
54
47
ApplicationlessInjection
55
- .getInstance (getActivity ().getApplicationContext ())
56
- .getCommonsApplicationComponent ()
57
- .inject (this );
48
+ .getInstance (getActivity ().getApplicationContext ())
49
+ .getCommonsApplicationComponent ()
50
+ .inject (this );
58
51
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 );
61
54
62
- themeListPreference = ( ListPreference ) findPreference (Prefs .KEY_THEME_VALUE );
55
+ themeListPreference = findPreference (Prefs .KEY_THEME_VALUE );
63
56
prepareTheme ();
64
57
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 );
75
59
if (multiSelectListPref != null ) {
76
60
multiSelectListPref .setOnPreferenceChangeListener ((preference , newValue ) -> {
77
61
if (newValue instanceof HashSet && !((HashSet ) newValue ).contains (getString (R .string .exif_tag_location ))) {
@@ -81,42 +65,44 @@ public void onCreate(Bundle savedInstanceState) {
81
65
});
82
66
}
83
67
84
- final EditTextPreference uploadLimit = ( EditTextPreference ) findPreference ("uploads" );
68
+ final EditTextPreference uploadLimit = findPreference ("uploads" );
85
69
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 ) -> {
91
73
74
+ if (newValue .toString ().length () == 0 ) {
75
+ return false ;
92
76
}
93
77
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 ;
96
87
}
88
+ return true ;
89
+ });
97
90
98
- @ Override
99
- public void afterTextChanged (Editable s ) {
100
- if (s .length () == 0 ) return ;
91
+ uploadLimit .setOnBindEditTextListener (editText -> {
101
92
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 )});
103
97
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 ());
111
99
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 ));
117
103
});
118
104
119
- langListPreference = ( ListPreference ) findPreference ("descriptionDefaultLanguagePref" );
105
+ langListPreference = findPreference ("descriptionDefaultLanguagePref" );
120
106
prepareLanguages ();
121
107
Preference betaTesterPreference = findPreference ("becomeBetaTester" );
122
108
betaTesterPreference .setOnPreferenceClickListener (preference -> {
@@ -129,42 +115,26 @@ public void afterTextChanged(Editable s) {
129
115
return true ;
130
116
});
131
117
// 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 );
138
124
uploadLimit .setEnabled (false );
139
- useAuthorName .setEnabled (false );
140
- displayNearbyCardView .setEnabled (false );
141
- displayLocationPermissionForCardView .setEnabled (false );
142
- displayCampaignsCardView .setEnabled (false );
143
125
}
144
126
}
145
127
146
128
/**
147
- * Uses previously saved theme if there is any, if not then uses default.
129
+ * Sets the theme pref
148
130
*/
149
131
private void prepareTheme () {
150
-
151
- themeListPreference .setSummary (getThemeSummary (getCurrentTheme ()));
152
-
153
132
themeListPreference .setOnPreferenceChangeListener ((preference , newValue ) -> {
154
133
getActivity ().recreate ();
155
134
return true ;
156
135
});
157
136
}
158
137
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
-
168
138
/**
169
139
* Prepares language summary and language codes list and adds them to list preference as pairs.
170
140
* Uses previously saved language if there is any, if not uses phone local as initial language.
@@ -195,19 +165,14 @@ private void prepareLanguages() {
195
165
String languageCode = getCurrentLanguageCode ();
196
166
if (languageCode .equals ("" )){
197
167
// If current language code is empty, means none selected by user yet so use phone local
198
- langListPreference .setSummary (Locale .getDefault ().getDisplayLanguage ());
199
168
langListPreference .setValue (Locale .getDefault ().getLanguage ());
200
169
} else {
201
170
// If any language is selected by user previously, use it
202
- int prefIndex = langListPreference .findIndexOfValue (languageCode );
203
- langListPreference .setSummary (langListPreference .getEntries ()[prefIndex ]);
204
171
langListPreference .setValue (languageCode );
205
172
}
206
173
207
174
langListPreference .setOnPreferenceChangeListener ((preference , newValue ) -> {
208
175
String userSelectedValue = (String ) newValue ;
209
- int prefIndex = langListPreference .findIndexOfValue (userSelectedValue );
210
- langListPreference .setSummary (langListPreference .getEntries ()[prefIndex ]);
211
176
saveLanguageValue (userSelectedValue );
212
177
return true ;
213
178
});
0 commit comments