88import android .content .pm .PackageManager ;
99import android .os .Build ;
1010import android .os .Bundle ;
11- import android .preference .CheckBoxPreference ;
12- import android .preference .ListPreference ;
13- import android .preference .Preference ;
14- import android .preference .PreferenceFragment ;
15- import android .preference .PreferenceManager ;
16- import android .preference .PreferenceScreen ;
11+ import android .preference .*;
1712import android .view .MenuItem ;
1813
19- import java .util .ArrayList ;
20- import java .util .EnumSet ;
2114import java .util .HashSet ;
2215import java .util .List ;
23- import java .util .Map ;
2416import java .util .Set ;
2517
26- import tun .utils .CertificateUtil ;
27-
2818public class SimplePreferenceFragment extends PreferenceFragment implements Preference .OnPreferenceClickListener {
2919
20+ public static final String VPN_CONNECTION_MODE = "vpn_connection_mode" ;
21+ public static final String VPN_DISALLOWED_APPLICATION_LIST = "vpn_disallowed_application_list" ;
22+ public static final String VPN_ALLOWED_APPLICATION_LIST = "vpn_allowed_application_list" ;
23+
3024 @ Override
3125 public void onCreate (Bundle savedInstanceState ) {
3226 super .onCreate (savedInstanceState );
3327 addPreferencesFromResource (R .xml .preferences );
3428 setHasOptionsMenu (true );
3529
3630 /* Allowed / Disallowed Application */
37- final ListPreference pkg_selection = (ListPreference ) this .findPreference ("vpn_connection_mode" );
31+ final ListPreference pkg_selection = (ListPreference ) this .findPreference (VPN_CONNECTION_MODE );
3832 pkg_selection .setOnPreferenceChangeListener (new Preference .OnPreferenceChangeListener () {
3933 @ Override
4034 public boolean onPreferenceChange (Preference preference , Object value ) {
41- if (preference instanceof ListPreference ) {
42- ListPreference listPreference = (ListPreference ) preference ;
43- int index = listPreference .findIndexOfValue ((String ) value );
44-
45- PreferenceScreen disallow = (PreferenceScreen ) findPreference ("disallowed_application_list" );
46- PreferenceScreen allow = (PreferenceScreen ) findPreference ("allowed_application_list" );
47- disallow .setEnabled (index == 0 );
48- allow .setEnabled (index != 0 );
35+ if (preference instanceof ListPreference ) {
36+ ListPreference listPreference = (ListPreference ) preference ;
37+ int index = listPreference .findIndexOfValue ((String ) value );
4938
39+ PreferenceScreen disallow = (PreferenceScreen ) findPreference (VPN_DISALLOWED_APPLICATION_LIST );
40+ PreferenceScreen allow = (PreferenceScreen ) findPreference (VPN_ALLOWED_APPLICATION_LIST );
41+ disallow .setEnabled (index == 0 );
42+ allow .setEnabled (index != 0 );
5043
51- // Set the summary to reflect the new value.
52- preference .setSummary (index >= 0 ? listPreference .getEntries ()[index ] : null );
44+ // Set the summary to reflect the new value.
45+ preference .setSummary (index >= 0 ? listPreference .getEntries ()[index ] : null );
5346
54- }
55- return true ;
47+ }
48+ return true ;
5649 }
5750 });
5851 pkg_selection .setSummary (pkg_selection .getEntry ());
59- PreferenceScreen disallow = (PreferenceScreen ) findPreference ("disallowed_application_list" );
60- PreferenceScreen allow = (PreferenceScreen ) findPreference ("allowed_application_list" );
61- disallow .setEnabled (Integer . parseInt ( pkg_selection .getValue ()) == 0 );
62- allow .setEnabled (Integer . parseInt ( pkg_selection .getValue ()) != 0 );
52+ PreferenceScreen disallow = (PreferenceScreen ) findPreference (VPN_DISALLOWED_APPLICATION_LIST );
53+ PreferenceScreen allow = (PreferenceScreen ) findPreference (VPN_ALLOWED_APPLICATION_LIST );
54+ disallow .setEnabled (MyApplication . VPNMode . DISALLOW . name (). equals ( pkg_selection .getValue ()));
55+ allow .setEnabled (MyApplication . VPNMode . ALLOW . name (). equals ( pkg_selection .getValue ()));
6356
64- findPreference ("allowed_application_list" ).setOnPreferenceClickListener (this );
65- findPreference ("disallowed_application_list" ).setOnPreferenceClickListener (this );
57+ findPreference (VPN_DISALLOWED_APPLICATION_LIST ).setOnPreferenceClickListener (this );
58+ findPreference (VPN_ALLOWED_APPLICATION_LIST ).setOnPreferenceClickListener (this );
6659
6760 }
6861
@@ -81,11 +74,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
8174 public boolean onPreferenceClick (Preference preference ) {
8275 // keyを見てクリックされたPreferenceを特定
8376 switch (preference .getKey ()) {
84- case "allowed_application_list" :
85- transitionFragment (PackageListPreferenceFragment .newInstance (PackageListPreferenceFragment .VPNMode .ALLOW ));
77+ case VPN_DISALLOWED_APPLICATION_LIST :
78+ transitionFragment (PackageListPreferenceFragment .newInstance (MyApplication .VPNMode .DISALLOW ));
8679 break ;
87- case "disallowed_application_list" :
88- transitionFragment (PackageListPreferenceFragment .newInstance (PackageListPreferenceFragment .VPNMode .DISALLOW ));
80+ case VPN_ALLOWED_APPLICATION_LIST :
81+ transitionFragment (PackageListPreferenceFragment .newInstance (MyApplication .VPNMode .ALLOW ));
8982 break ;
9083 }
9184 return false ;
@@ -102,13 +95,11 @@ private void transitionFragment(PreferenceFragment nextPreferenceFragment) {
10295
10396 @ TargetApi (Build .VERSION_CODES .HONEYCOMB )
10497 public static class PackageListPreferenceFragment extends PreferenceFragment {
105- enum VPNMode {DISALLOW , ALLOW };
106- private VPNMode mode ;
98+ private MyApplication .VPNMode mode ;
10799 private PreferenceScreen mRootPreferenceScreen ;
108100
109- private String pref_key [] = {"vpn_disallowed_application" , "vpn_allowed_application" };
110101
111- public static PackageListPreferenceFragment newInstance (VPNMode mode ) {
102+ public static PackageListPreferenceFragment newInstance (MyApplication . VPNMode mode ) {
112103 PackageListPreferenceFragment fragment = new PackageListPreferenceFragment ();
113104 fragment .mode = mode ;
114105 return fragment ;
@@ -122,6 +113,12 @@ public void onCreate(Bundle savedInstanceState) {
122113 setPreferenceScreen (mRootPreferenceScreen );
123114 }
124115
116+ @ Override
117+ public void onPause () {
118+ super .onPause ();
119+ storeSelectedPackageSet (this .getSelectedPackageSet ());
120+ }
121+
125122 @ Override
126123 public void onResume () {
127124 super .onResume ();
@@ -135,7 +132,7 @@ private void removeAllPreferenceScreen() {
135132 }
136133
137134 private void buildPackagesPreferences () {
138- Context context = MyApplication .getContext ().getApplicationContext ();
135+ Context context = MyApplication .getInstance ().getApplicationContext ();
139136 PackageManager pm = context .getPackageManager ();
140137 List <PackageInfo > installedPackages = pm .getInstalledPackages (PackageManager .GET_META_DATA );
141138 for (final PackageInfo pi : installedPackages ) {
@@ -157,7 +154,8 @@ private Set<String> getSelectedPackageSet() {
157154 Preference pref = this .mRootPreferenceScreen .getPreference (i );
158155 if ((pref instanceof CheckBoxPreference )) {
159156 CheckBoxPreference pref_check = (CheckBoxPreference ) pref ;
160- if (pref_check .isChecked ()) selected .add (pref_check .getSummary ().toString ());
157+ if (pref_check .isChecked ())
158+ selected .add (pref_check .getSummary ().toString ());
161159 }
162160 }
163161 return selected ;
@@ -175,24 +173,21 @@ private void setSelectedPackageSet(Set<String> selected) {
175173 }
176174
177175 private void loadSelectedPackage () {
178- final SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences ( getActivity ());
179176 this .getArguments ();
180- Set <String > selected = prefs .getStringSet ( pref_key [mode .ordinal ()], new HashSet <String >());
177+ mode = MyApplication .getInstance ().loadVPNMode ();
178+ Set <String > selected = MyApplication .getInstance ().loadVPNApplication (mode );
181179 setSelectedPackageSet (selected );
182180 }
183181
184182 private void storeSelectedPackageSet (final Set <String > set ) {
185- final SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences (getActivity ());
186- final SharedPreferences .Editor editor = prefs .edit ();
187- editor .putStringSet (pref_key [mode .ordinal ()], set );
188- editor .commit ();
183+ MyApplication .getInstance ().storeVPNMode (mode );
184+ MyApplication .getInstance ().storeVPNApplication (mode , set );
189185 }
190186
191187 @ Override
192188 public boolean onOptionsItemSelected (MenuItem item ) {
193189 int id = item .getItemId ();
194190 if (id == android .R .id .home ) {
195- storeSelectedPackageSet (this .getSelectedPackageSet ());
196191 startActivity (new Intent (getActivity (), SimplePreferenceActivity .class ));
197192 return true ;
198193 }
0 commit comments