Module list from manager should use match all flag (#1621)
This commit is contained in:
parent
a92b5999e2
commit
4955dcb542
|
|
@ -56,6 +56,10 @@ public final class ModuleUtil {
|
||||||
private Map<Pair<String, Integer>, InstalledModule> installedModules = new HashMap<>();
|
private Map<Pair<String, Integer>, InstalledModule> installedModules = new HashMap<>();
|
||||||
private boolean modulesLoaded = false;
|
private boolean modulesLoaded = false;
|
||||||
|
|
||||||
|
static final int MATCH_ANY_USER = 0x00400000; // PackageManager.MATCH_ANY_USER
|
||||||
|
|
||||||
|
static final int MATCH_ALL_FLAGS = PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE | PackageManager.MATCH_UNINSTALLED_PACKAGES | MATCH_ANY_USER;
|
||||||
|
|
||||||
private ModuleUtil() {
|
private ModuleUtil() {
|
||||||
pm = App.getInstance().getPackageManager();
|
pm = App.getInstance().getPackageManager();
|
||||||
}
|
}
|
||||||
|
|
@ -93,12 +97,11 @@ public final class ModuleUtil {
|
||||||
|
|
||||||
Map<Pair<String, Integer>, InstalledModule> modules = new HashMap<>();
|
Map<Pair<String, Integer>, InstalledModule> modules = new HashMap<>();
|
||||||
var users = ConfigManager.getUsers();
|
var users = ConfigManager.getUsers();
|
||||||
for (PackageInfo pkg : ConfigManager.getInstalledPackagesFromAllUsers(PackageManager.GET_META_DATA, false)) {
|
for (PackageInfo pkg : ConfigManager.getInstalledPackagesFromAllUsers(PackageManager.GET_META_DATA | MATCH_ALL_FLAGS, false)) {
|
||||||
ApplicationInfo app = pkg.applicationInfo;
|
ApplicationInfo app = pkg.applicationInfo;
|
||||||
|
|
||||||
if (app.metaData != null && app.metaData.containsKey("xposedminversion")) {
|
if (app.metaData != null && app.metaData.containsKey("xposedminversion")) {
|
||||||
InstalledModule installed = new InstalledModule(pkg);
|
modules.computeIfAbsent(Pair.create(pkg.packageName, app.uid / 100000), k -> new InstalledModule(pkg));
|
||||||
modules.put(Pair.create(pkg.packageName, app.uid / 100000), installed);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,13 +128,23 @@ public class PackageService {
|
||||||
return pm.getApplicationInfo(packageName, flags, userId);
|
return pm.getApplicationInfo(packageName, flags, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only for manager
|
||||||
public static ParceledListSlice<PackageInfo> getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) throws RemoteException {
|
public static ParceledListSlice<PackageInfo> getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) throws RemoteException {
|
||||||
List<PackageInfo> res = new ArrayList<>();
|
List<PackageInfo> res = new ArrayList<>();
|
||||||
IPackageManager pm = getPackageManager();
|
IPackageManager pm = getPackageManager();
|
||||||
if (pm == null) return ParceledListSlice.emptyList();
|
if (pm == null) return ParceledListSlice.emptyList();
|
||||||
for (var user : UserService.getUsers()) {
|
for (var user : UserService.getUsers()) {
|
||||||
// in case pkginfo of other users in primary user
|
// in case pkginfo of other users in primary user
|
||||||
res.addAll(pm.getInstalledPackages(flags, user.id).getList().parallelStream().filter(info -> info.applicationInfo != null && info.applicationInfo.uid / PER_USER_RANGE == user.id).collect(Collectors.toList()));
|
res.addAll(pm.getInstalledPackages(flags, user.id).getList().parallelStream()
|
||||||
|
.filter(info -> info.applicationInfo != null && info.applicationInfo.uid / PER_USER_RANGE == user.id)
|
||||||
|
.filter(info -> {
|
||||||
|
try {
|
||||||
|
return isPackageAvailable(info.packageName, user.id, true);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
if (filterNoProcess) {
|
if (filterNoProcess) {
|
||||||
return new ParceledListSlice<>(res.parallelStream().filter(packageInfo -> {
|
return new ParceledListSlice<>(res.parallelStream().filter(packageInfo -> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue