12
12
import android .text .Editable ;
13
13
import android .text .TextWatcher ;
14
14
15
- import com .google .gson .reflect .TypeToken ;
16
15
import com .karumi .dexter .Dexter ;
17
16
import com .karumi .dexter .listener .PermissionGrantedResponse ;
18
17
import com .karumi .dexter .listener .single .BasePermissionListener ;
19
18
20
- import java .lang .reflect .Type ;
21
- import java .util .Collections ;
22
19
import java .util .ArrayList ;
20
+ import java .util .Collections ;
23
21
import java .util .HashSet ;
24
22
import java .util .List ;
25
23
import java .util .Locale ;
26
- import java .util .Set ;
27
24
28
25
import javax .inject .Inject ;
29
26
import javax .inject .Named ;
37
34
import fr .free .nrw .commons .utils .PermissionUtils ;
38
35
import fr .free .nrw .commons .utils .ViewUtil ;
39
36
37
+ import static fr .free .nrw .commons .utils .SystemThemeUtils .THEME_MODE_DEFAULT ;
38
+
40
39
public class SettingsFragment extends PreferenceFragment {
41
40
42
41
@ Inject
43
42
@ Named ("default_preferences" )
44
43
JsonKvStore defaultKvStore ;
44
+
45
45
@ Inject
46
46
CommonsLogSender commonsLogSender ;
47
- private ListPreference listPreference ;
47
+
48
+ private ListPreference themeListPreference ;
49
+ private ListPreference langListPreference ;
48
50
49
51
@ Override
50
52
public void onCreate (Bundle savedInstanceState ) {
@@ -57,11 +59,8 @@ public void onCreate(Bundle savedInstanceState) {
57
59
// Load the preferences from an XML resource
58
60
addPreferencesFromResource (R .xml .preferences );
59
61
60
- SwitchPreference themePreference = (SwitchPreference ) findPreference ("theme" );
61
- themePreference .setOnPreferenceChangeListener ((preference , newValue ) -> {
62
- getActivity ().recreate ();
63
- return true ;
64
- });
62
+ themeListPreference = (ListPreference ) findPreference (Prefs .KEY_THEME_VALUE );
63
+ prepareTheme ();
65
64
66
65
//Check if the Author Name switch is enabled and appropriately handle the author name usage
67
66
SwitchPreference useAuthorName = (SwitchPreference ) findPreference ("useAuthorName" );
@@ -117,7 +116,7 @@ public void afterTextChanged(Editable s) {
117
116
}
118
117
});
119
118
120
- listPreference = (ListPreference ) findPreference ("descriptionDefaultLanguagePref" );
119
+ langListPreference = (ListPreference ) findPreference ("descriptionDefaultLanguagePref" );
121
120
prepareLanguages ();
122
121
Preference betaTesterPreference = findPreference ("becomeBetaTester" );
123
122
betaTesterPreference .setOnPreferenceClickListener (preference -> {
@@ -144,10 +143,32 @@ public void afterTextChanged(Editable s) {
144
143
}
145
144
}
146
145
146
+ /**
147
+ * Uses previously saved theme if there is any, if not then uses default.
148
+ */
149
+ private void prepareTheme () {
150
+
151
+ themeListPreference .setSummary (getThemeSummary (getCurrentTheme ()));
152
+
153
+ themeListPreference .setOnPreferenceChangeListener ((preference , newValue ) -> {
154
+ getActivity ().recreate ();
155
+ return true ;
156
+ });
157
+ }
158
+
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
+
147
168
/**
148
169
* Prepares language summary and language codes list and adds them to list preference as pairs.
149
170
* Uses previously saved language if there is any, if not uses phone local as initial language.
150
- * Adds preference changed listener and saves value choosen by user to shared preferences
171
+ * Adds preference changed listener and saves value chosen by user to shared preferences
151
172
* to remember later
152
173
*/
153
174
private void prepareLanguages () {
@@ -167,26 +188,26 @@ private void prepareLanguages() {
167
188
CharSequence [] languageNames = languageNamesList .toArray (new CharSequence [0 ]);
168
189
CharSequence [] languageCodes = languageCodesList .toArray (new CharSequence [0 ]);
169
190
// Add all languages and languages codes to lists preference as pair
170
- listPreference .setEntries (languageNames );
171
- listPreference .setEntryValues (languageCodes );
191
+ langListPreference .setEntries (languageNames );
192
+ langListPreference .setEntryValues (languageCodes );
172
193
173
194
// Gets current language code from shared preferences
174
195
String languageCode = getCurrentLanguageCode ();
175
- if (languageCode .equals ("" )){
196
+ if (languageCode .equals ("" )){
176
197
// If current language code is empty, means none selected by user yet so use phone local
177
- listPreference .setSummary (Locale .getDefault ().getDisplayLanguage ());
178
- listPreference .setValue (Locale .getDefault ().getLanguage ());
198
+ langListPreference .setSummary (Locale .getDefault ().getDisplayLanguage ());
199
+ langListPreference .setValue (Locale .getDefault ().getLanguage ());
179
200
} else {
180
201
// If any language is selected by user previously, use it
181
- int prefIndex = listPreference .findIndexOfValue (languageCode );
182
- listPreference .setSummary (listPreference .getEntries ()[prefIndex ]);
183
- listPreference .setValue (languageCode );
202
+ int prefIndex = langListPreference .findIndexOfValue (languageCode );
203
+ langListPreference .setSummary (langListPreference .getEntries ()[prefIndex ]);
204
+ langListPreference .setValue (languageCode );
184
205
}
185
206
186
- listPreference .setOnPreferenceChangeListener ((preference , newValue ) -> {
207
+ langListPreference .setOnPreferenceChangeListener ((preference , newValue ) -> {
187
208
String userSelectedValue = (String ) newValue ;
188
- int prefIndex = listPreference .findIndexOfValue (userSelectedValue );
189
- listPreference .setSummary (listPreference .getEntries ()[prefIndex ]);
209
+ int prefIndex = langListPreference .findIndexOfValue (userSelectedValue );
210
+ langListPreference .setSummary (langListPreference .getEntries ()[prefIndex ]);
190
211
saveLanguageValue (userSelectedValue );
191
212
return true ;
192
213
});
0 commit comments