@@ -39,7 +39,7 @@ public void onCreate(Bundle savedInstanceState) {
3939 @ Override
4040 public boolean onPreferenceChange (Preference preference , Object value ) {
4141 if (preference instanceof ListPreference ) {
42- ListPreference listPreference = (ListPreference ) preference ;
42+ final ListPreference listPreference = (ListPreference ) preference ;
4343 int index = listPreference .findIndexOfValue ((String ) value );
4444
4545 PreferenceScreen disallow = (PreferenceScreen ) findPreference (VPN_DISALLOWED_APPLICATION_LIST );
@@ -102,11 +102,12 @@ private void transitionFragment(PreferenceFragment nextPreferenceFragment) {
102102
103103 @ TargetApi (Build .VERSION_CODES .HONEYCOMB )
104104 public static class PackageListPreferenceFragment extends PreferenceFragment implements SearchView .OnQueryTextListener , SearchView .OnCloseListener {
105- private MyApplication .VPNMode mode ;
105+ private MyApplication .VPNMode mode = MyApplication .VPNMode .DISALLOW ;
106+ private MyApplication .AppSortBy appSortBy = MyApplication .AppSortBy .APPNAME ;
106107 private PreferenceScreen mRootPreferenceScreen ;
107108
108109 public static PackageListPreferenceFragment newInstance (MyApplication .VPNMode mode ) {
109- PackageListPreferenceFragment fragment = new PackageListPreferenceFragment ();
110+ final PackageListPreferenceFragment fragment = new PackageListPreferenceFragment ();
110111 fragment .mode = mode ;
111112 return fragment ;
112113 }
@@ -123,14 +124,18 @@ public void onCreate(Bundle savedInstanceState) {
123124 private SearchView searchView ;
124125
125126 protected void filter (String filter ) {
127+ this .filter (filter , this .appSortBy );
128+ }
129+
130+ protected void filter (String filter , final MyApplication .AppSortBy sortBy ) {
126131 if (filter == null ) {
127132 filter = searchFilter ;
128133 }
129134 else {
130135 searchFilter = filter ;
131136 }
132137 removeAllPreferenceScreen ();
133- buildPackagesPreferences (filter );
138+ buildPackagesPreferences (filter , sortBy );
134139 loadSelectedPackage ();
135140 }
136141
@@ -140,7 +145,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
140145 // Menuの設定
141146 inflater .inflate (R .menu .menu_search , menu );
142147
143- MenuItem menuItem = menu .findItem (R .id .search_menu_item );
148+ final MenuItem menuItem = menu .findItem (R .id .menu_search_item );
144149
145150 this .searchView = (SearchView )menuItem .getActionView ();
146151 this .searchView .setOnQueryTextListener (this );
@@ -164,16 +169,23 @@ private void removeAllPreferenceScreen() {
164169 mRootPreferenceScreen .removeAll ();
165170 }
166171
167- private void buildPackagesPreferences (String filter ) {
172+ private void buildPackagesPreferences (String filter , final MyApplication . AppSortBy sortBy ) {
168173 final Context context = MyApplication .getInstance ().getApplicationContext ();
169174 final PackageManager pm = context .getPackageManager ();
170175 final List <PackageInfo > installedPackages = pm .getInstalledPackages (PackageManager .GET_META_DATA );
171176 Collections .sort (installedPackages , new Comparator <PackageInfo >() {
172177 @ Override
173178 public int compare (PackageInfo o1 , PackageInfo o2 ) {
174- String t1 = o1 .applicationInfo .loadLabel (pm ).toString ();
175- String t2 = o2 .applicationInfo .loadLabel (pm ).toString ();
176- return t1 .compareTo (t2 );
179+ if (sortBy == MyApplication .AppSortBy .APPNAME ) {
180+ String t1 = o1 .applicationInfo .loadLabel (pm ).toString ();
181+ String t2 = o2 .applicationInfo .loadLabel (pm ).toString ();
182+ return t1 .compareTo (t2 );
183+ }
184+ else {
185+ String t1 = o1 .packageName ;
186+ String t2 = o2 .packageName ;
187+ return t1 .compareTo (t2 );
188+ }
177189 }
178190 });
179191 for (final PackageInfo pi : installedPackages ) {
@@ -234,9 +246,20 @@ private void storeSelectedPackageSet(final Set<String> set) {
234246 @ Override
235247 public boolean onOptionsItemSelected (MenuItem item ) {
236248 int id = item .getItemId ();
237- if (id == android .R .id .home ) {
238- startActivity (new Intent (getActivity (), SimplePreferenceActivity .class ));
239- return true ;
249+ switch (id ) {
250+ case android .R .id .home :
251+ startActivity (new Intent (getActivity (), SimplePreferenceActivity .class ));
252+ return true ;
253+ case R .id .menu_sort_app_name :
254+ item .setChecked (!item .isChecked ());
255+ this .appSortBy = MyApplication .AppSortBy .APPNAME ;
256+ filter (null , this .appSortBy );
257+ break ;
258+ case R .id .menu_sort_pkg_name :
259+ item .setChecked (!item .isChecked ());
260+ this .appSortBy = MyApplication .AppSortBy .PKGNAME ;
261+ filter (null , this .appSortBy );
262+ break ;
240263 }
241264 return super .onOptionsItemSelected (item );
242265 }
0 commit comments