1
1
package com .nutomic .syncthingandroid .activities ;
2
2
3
3
import android .Manifest ;
4
+ import android .app .Activity ;
4
5
import android .app .AlertDialog ;
5
6
import android .app .Dialog ;
6
7
import android .content .ClipData ;
51
52
import com .nutomic .syncthingandroid .service .RestApi ;
52
53
import com .nutomic .syncthingandroid .service .SyncthingService ;
53
54
import com .nutomic .syncthingandroid .service .SyncthingServiceBinder ;
55
+ import com .nutomic .syncthingandroid .util .ConfigRouter ;
54
56
import com .nutomic .syncthingandroid .util .FileUtils ;
55
57
import com .nutomic .syncthingandroid .util .Languages ;
56
58
import com .nutomic .syncthingandroid .util .Util ;
@@ -170,11 +172,13 @@ public static class SettingsFragment extends PreferenceFragment
170
172
private WifiSsidPreference mWifiSsidWhitelist ;
171
173
private CheckBoxPreference mRunInFlightMode ;
172
174
175
+ /* User Interface */
176
+ private Languages mLanguages ;
177
+
173
178
/* Behaviour */
174
179
private CheckBoxPreference mStartServiceOnBoot ;
175
180
private CheckBoxPreference mUseRoot ;
176
181
private ListPreference mSuggestNewFolderRoot ;
177
- private Languages mLanguages ;
178
182
179
183
/* Syncthing Options */
180
184
private PreferenceScreen mCategorySyncthingOptions ;
@@ -259,9 +263,9 @@ public void onActivityCreated(Bundle savedInstanceState) {
259
263
mPreferences = PreferenceManager .getDefaultSharedPreferences (getActivity ());
260
264
261
265
ListPreference languagePref = (ListPreference ) findPreference (Languages .PREFERENCE_LANGUAGE );
262
- PreferenceScreen categoryBehaviour = (PreferenceScreen ) findPreference ("category_behaviour " );
266
+ PreferenceScreen categoryUserInterface = (PreferenceScreen ) findPreference ("category_user_interface " );
263
267
if (Build .VERSION .SDK_INT >= 24 ) {
264
- categoryBehaviour .removePreference (languagePref );
268
+ categoryUserInterface .removePreference (languagePref );
265
269
} else {
266
270
mLanguages = new Languages (getActivity ());
267
271
languagePref .setDefaultValue (mLanguages .USE_SYSTEM_DEFAULT );
@@ -305,7 +309,11 @@ public void onActivityCreated(Bundle savedInstanceState) {
305
309
}
306
310
setPreferenceCategoryChangeListener (mCategoryRunConditions , this ::onRunConditionPreferenceChange );
307
311
312
+ /* User Interface */
313
+ setPreferenceCategoryChangeListener (categoryUserInterface , this ::onUserInterfacePreferenceChange );
314
+
308
315
/* Behaviour */
316
+ PreferenceScreen categoryBehaviour = (PreferenceScreen ) findPreference ("category_behaviour" );
309
317
mStartServiceOnBoot =
310
318
(CheckBoxPreference ) findPreference (Constants .PREF_START_SERVICE_ON_BOOT );
311
319
mUseRoot =
@@ -587,6 +595,27 @@ public boolean onRunConditionPreferenceChange(Preference preference, Object o) {
587
595
return true ;
588
596
}
589
597
598
+ public boolean onUserInterfacePreferenceChange (Preference preference , Object o ) {
599
+ switch (preference .getKey ()) {
600
+ case Constants .PREF_APP_THEME :
601
+ String newTheme = (String ) o ;
602
+ String prevTheme = mPreferences .getString (Constants .PREF_APP_THEME , Constants .APP_THEME_LIGHT );
603
+ if (!newTheme .equals (prevTheme )) {
604
+ ConfigRouter config = new ConfigRouter (getActivity ());
605
+ Gui gui = config .getGui (mRestApi );
606
+ gui .theme = newTheme .equals (Constants .APP_THEME_LIGHT ) ? "default" : "dark" ;
607
+ config .updateGui (mRestApi , gui );
608
+ getAppRestartConfirmationDialog (getActivity ())
609
+ .show ();
610
+ }
611
+ break ;
612
+ case Languages .PREFERENCE_LANGUAGE :
613
+ mLanguages .forceChangeLanguage (getActivity (), (String ) o );
614
+ return false ;
615
+ }
616
+ return true ;
617
+ }
618
+
590
619
public boolean onBehaviourPreferenceChange (Preference preference , Object o ) {
591
620
switch (preference .getKey ()) {
592
621
case Constants .PREF_USE_ROOT :
@@ -601,9 +630,6 @@ public boolean onBehaviourPreferenceChange(Preference preference, Object o) {
601
630
mSuggestNewFolderRoot .setValue (o .toString ());
602
631
preference .setSummary (mSuggestNewFolderRoot .getEntry ());
603
632
break ;
604
- case Languages .PREFERENCE_LANGUAGE :
605
- mLanguages .forceChangeLanguage (getActivity (), (String ) o );
606
- return false ;
607
633
}
608
634
return true ;
609
635
}
@@ -773,13 +799,7 @@ public boolean onPreferenceClick(Preference preference) {
773
799
final Intent intent ;
774
800
switch (preference .getKey ()) {
775
801
case Constants .PREF_VERBOSE_LOG :
776
- new AlertDialog .Builder (getActivity ())
777
- .setTitle (R .string .dialog_settings_restart_app_title )
778
- .setMessage (R .string .dialog_settings_restart_app_question )
779
- .setPositiveButton (android .R .string .ok , (dialogInterface , i ) -> {
780
- getActivity ().setResult (RESULT_RESTART_APP );
781
- getActivity ().finish ();
782
- })
802
+ getAppRestartConfirmationDialog (getActivity ())
783
803
.setNegativeButton (android .R .string .no , (dialogInterface , i ) -> {
784
804
// Revert.
785
805
((CheckBoxPreference ) preference ).setChecked (!((CheckBoxPreference ) preference ).isChecked ());
@@ -900,6 +920,22 @@ private void onDownloadSupportBundleClick() {
900
920
});
901
921
}
902
922
923
+ /**
924
+ * Provides a template for an AlertDialog which quits and restarts the
925
+ * whole app including all of its activities and services.
926
+ * Use rarely as it's annoying for a user having to restart the whole app.
927
+ */
928
+ private static AlertDialog .Builder getAppRestartConfirmationDialog (Activity activity ) {
929
+ return new AlertDialog .Builder (activity )
930
+ .setTitle (R .string .dialog_settings_restart_app_title )
931
+ .setMessage (R .string .dialog_settings_restart_app_question )
932
+ .setPositiveButton (android .R .string .ok , (dialogInterface , i ) -> {
933
+ activity .setResult (RESULT_RESTART_APP );
934
+ activity .finish ();
935
+ })
936
+ .setNegativeButton (android .R .string .no , (dialogInterface , i ) -> {});
937
+ }
938
+
903
939
/**
904
940
* Enables or disables {@link #mUseRoot} preference depending whether root is available.
905
941
*/
0 commit comments