33import android .Manifest ;
44import android .net .Uri ;
55import 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 ;
1514import com .karumi .dexter .Dexter ;
1615import com .karumi .dexter .listener .PermissionGrantedResponse ;
1716import 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-
2817import fr .free .nrw .commons .R ;
2918import fr .free .nrw .commons .Utils ;
3019import fr .free .nrw .commons .di .ApplicationlessInjection ;
3322import fr .free .nrw .commons .upload .Language ;
3423import fr .free .nrw .commons .utils .PermissionUtils ;
3524import 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 });
0 commit comments