Fix list sorting

This commit is contained in:
tehcneko 2021-01-29 19:01:17 +08:00
parent 2600f407ce
commit b4bdb44db5
3 changed files with 67 additions and 151 deletions

View File

@ -45,13 +45,11 @@ import io.github.lsposed.manager.util.GlideApp;
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> implements Filterable {
protected AppListActivity activity;
private final ApplicationInfo.DisplayNameComparator displayNameComparator;
protected List<PackageInfo> fullList, showList;
private final DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
public List<String> checkedList;
private final PackageManager pm;
private final ApplicationFilter filter;
private Comparator<PackageInfo> cmp;
private final SharedPreferences preferences;
AppAdapter(AppListActivity activity) {
@ -61,7 +59,6 @@ public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> impl
checkedList = Collections.emptyList();
filter = new ApplicationFilter();
pm = activity.getPackageManager();
displayNameComparator = new ApplicationInfo.DisplayNameComparator(pm);
refresh();
}
@ -123,33 +120,7 @@ public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> impl
}
private void sortApps() {
switch (preferences.getInt("list_sort", 0)) {
case 7:
cmp = Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime));
break;
case 6:
cmp = (PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime);
break;
case 5:
cmp = Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime));
break;
case 4:
cmp = (PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime);
break;
case 3:
cmp = Collections.reverseOrder((a, b) -> a.packageName.compareTo(b.packageName));
break;
case 2:
cmp = (a, b) -> a.packageName.compareTo(b.packageName);
break;
case 1:
cmp = Collections.reverseOrder((PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo));
break;
case 0:
default:
cmp = (PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo);
break;
}
Comparator<PackageInfo> cmp = AppHelper.getAppListComparator(preferences.getInt("list_sort", 0), pm);
fullList.sort((a, b) -> {
boolean aChecked = checkedList.contains(a.packageName);
boolean bChecked = checkedList.contains(b.packageName);
@ -173,31 +144,7 @@ public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> impl
} else if (itemId == R.id.item_show_modules) {
item.setChecked(!item.isChecked());
preferences.edit().putBoolean("show_modules", item.isChecked()).apply();
} else if (itemId == R.id.item_sort_by_name) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 0).apply();
} else if (itemId == R.id.item_sort_by_name_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 1).apply();
} else if (itemId == R.id.item_sort_by_package_name) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 2).apply();
} else if (itemId == R.id.item_sort_by_package_name_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 3).apply();
} else if (itemId == R.id.item_sort_by_install_time) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 4).apply();
} else if (itemId == R.id.item_sort_by_install_time_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 5).apply();
} else if (itemId == R.id.item_sort_by_update_time) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 6).apply();
} else if (itemId == R.id.item_sort_by_update_time_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 7).apply();
} else {
} else if (!AppHelper.onOptionsItemSelected(item, preferences)) {
return false;
}
refresh();

View File

@ -3,8 +3,12 @@ package io.github.lsposed.manager.adapters;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
@ -17,6 +21,8 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@ -133,6 +139,61 @@ public class AppHelper {
});
appMenu.show();
}
public static boolean onOptionsItemSelected(MenuItem item, SharedPreferences preferences) {
int itemId = item.getItemId();
if (itemId == R.id.item_sort_by_name) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 0).apply();
} else if (itemId == R.id.item_sort_by_name_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 1).apply();
} else if (itemId == R.id.item_sort_by_package_name) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 2).apply();
} else if (itemId == R.id.item_sort_by_package_name_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 3).apply();
} else if (itemId == R.id.item_sort_by_install_time) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 4).apply();
} else if (itemId == R.id.item_sort_by_install_time_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 5).apply();
} else if (itemId == R.id.item_sort_by_update_time) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 6).apply();
} else if (itemId == R.id.item_sort_by_update_time_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 7).apply();
} else {
return false;
}
return true;
}
public static Comparator<PackageInfo> getAppListComparator(int sort, PackageManager pm) {
ApplicationInfo.DisplayNameComparator displayNameComparator = new ApplicationInfo.DisplayNameComparator(pm);
switch (sort) {
case 7:
return Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime));
case 6:
return (PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime);
case 5:
return Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime));
case 4:
return (PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime);
case 3:
return Collections.reverseOrder((a, b) -> a.packageName.compareTo(b.packageName));
case 2:
return (a, b) -> a.packageName.compareTo(b.packageName);
case 1:
return Collections.reverseOrder((PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo));
case 0:
default:
return (PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo);
}
}
public static List<String> getEnabledModuleList() {
Path path = Paths.get(Constants.getEnabledModulesListFile());

View File

@ -1,7 +1,7 @@
package io.github.lsposed.manager.ui.activity;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
@ -34,7 +34,6 @@ import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
@ -65,10 +64,8 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
private int installedXposedVersion;
private ApplicationFilter filter;
private SearchView searchView;
private ApplicationInfo.DisplayNameComparator displayNameComparator;
private SearchView.OnQueryTextListener mSearchListener;
private PackageManager pm;
private Comparator<ApplicationInfo> cmp;
private final DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
private ModuleUtil moduleUtil;
private ModuleAdapter adapter = null;
@ -89,66 +86,12 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
}
}
}
switch (preferences.getInt("list_sort", 0)) {
case 7:
cmp = Collections.reverseOrder((ApplicationInfo a, ApplicationInfo b) -> {
try {
return Long.compare(pm.getPackageInfo(a.packageName, 0).lastUpdateTime, pm.getPackageInfo(b.packageName, 0).lastUpdateTime);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return displayNameComparator.compare(a, b);
}
});
break;
case 6:
cmp = (ApplicationInfo a, ApplicationInfo b) -> {
try {
return Long.compare(pm.getPackageInfo(a.packageName, 0).lastUpdateTime, pm.getPackageInfo(b.packageName, 0).lastUpdateTime);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return displayNameComparator.compare(a, b);
}
};
break;
case 5:
cmp = Collections.reverseOrder((ApplicationInfo a, ApplicationInfo b) -> {
try {
return Long.compare(pm.getPackageInfo(a.packageName, 0).firstInstallTime, pm.getPackageInfo(b.packageName, 0).firstInstallTime);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return displayNameComparator.compare(a, b);
}
});
break;
case 4:
cmp = (ApplicationInfo a, ApplicationInfo b) -> {
try {
return Long.compare(pm.getPackageInfo(a.packageName, 0).firstInstallTime, pm.getPackageInfo(b.packageName, 0).firstInstallTime);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return displayNameComparator.compare(a, b);
}
};
break;
case 3:
cmp = Collections.reverseOrder((a, b) -> a.packageName.compareTo(b.packageName));
break;
case 2:
cmp = (a, b) -> a.packageName.compareTo(b.packageName);
break;
case 1:
cmp = Collections.reverseOrder(displayNameComparator);
break;
case 0:
default:
cmp = displayNameComparator;
break;
}
Comparator<PackageInfo> cmp = AppHelper.getAppListComparator(preferences.getInt("list_sort", 0), pm);
fullList.sort((a, b) -> {
boolean aChecked = moduleUtil.isModuleEnabled(a.packageName);
boolean bChecked = moduleUtil.isModuleEnabled(b.packageName);
if (aChecked == bChecked) {
return cmp.compare(a.app, b.app);
return cmp.compare(a.pkg, b.pkg);
} else if (aChecked) {
return -1;
} else {
@ -181,8 +124,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
filter = new ApplicationFilter();
moduleUtil = ModuleUtil.getInstance();
pm = getPackageManager();
displayNameComparator = new ApplicationInfo.DisplayNameComparator(pm);
cmp = displayNameComparator;
installedXposedVersion = Constants.getXposedApiVersion();
if (installedXposedVersion <= 0) {
Snackbar.make(binding.snackbar, R.string.xposed_not_active, Snackbar.LENGTH_LONG).setAction(R.string.Settings, v -> {
@ -291,7 +232,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
Intent intent;
int itemId = item.getItemId();
boolean reload = false;
if (itemId == R.id.export_enabled_modules) {
if (ModuleUtil.getInstance().getEnabledModules().isEmpty()) {
Snackbar.make(binding.snackbar, R.string.no_enabled_modules, Snackbar.LENGTH_SHORT).show();
@ -316,40 +256,8 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
intent.putExtra(Intent.EXTRA_TITLE, "installed_modules.list");
startActivityForResult(intent, 43);
return true;
} else if (itemId == R.id.item_sort_by_name) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 0).apply();
reload = true;
} else if (itemId == R.id.item_sort_by_name_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 1).apply();
reload = true;
} else if (itemId == R.id.item_sort_by_package_name) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 2).apply();
reload = true;
} else if (itemId == R.id.item_sort_by_package_name_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 3).apply();
reload = true;
} else if (itemId == R.id.item_sort_by_install_time) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 4).apply();
reload = true;
} else if (itemId == R.id.item_sort_by_install_time_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 5).apply();
reload = true;
} else if (itemId == R.id.item_sort_by_update_time) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 6).apply();
reload = true;
} else if (itemId == R.id.item_sort_by_update_time_reverse) {
item.setChecked(true);
preferences.edit().putInt("list_sort", 7).apply();
reload = true;
}
if (reload) {
if (AppHelper.onOptionsItemSelected(item, preferences)) {
moduleUtil.updateModulesList(false, null);
reloadModules.run();
}