Fix list sorting
This commit is contained in:
parent
2600f407ce
commit
b4bdb44db5
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue