[core] Dispatch uninstall event to manager as well (#884)
This commit is contained in:
parent
00e8c69ad1
commit
09e50460cd
|
|
@ -112,6 +112,7 @@ public final class ModuleUtil {
|
|||
} catch (NameNotFoundException e) {
|
||||
InstalledModule old = installedModules.remove(Pair.create(packageName, userId));
|
||||
if (old != null) {
|
||||
enabledModules.remove(packageName);
|
||||
for (ModuleListener listener : listeners) {
|
||||
listener.onSingleInstalledModuleReloaded();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -772,11 +772,13 @@ public class ConfigManager {
|
|||
}
|
||||
}
|
||||
|
||||
public void removeModule(String packageName) {
|
||||
public boolean removeModule(String packageName) {
|
||||
if (removeModuleWithoutCache(packageName)) {
|
||||
// called by oneway binder
|
||||
updateCaches(true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean removeModuleWithoutCache(String packageName) {
|
||||
|
|
@ -936,11 +938,11 @@ public class ConfigManager {
|
|||
}
|
||||
|
||||
// this is slow, avoid using it
|
||||
public boolean isModule(int uid) {
|
||||
public String getModule(int uid) {
|
||||
for (var module : cachedModule.values()) {
|
||||
if (module.appId == uid % PER_USER_RANGE) return true;
|
||||
if (module.appId == uid % PER_USER_RANGE) return module.packageName;
|
||||
}
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isModule(int uid, String name) {
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ public class LSPosedService extends ILSPosedService.Stub {
|
|||
if (userId == USER_NULL) userId = uid % PER_USER_RANGE;
|
||||
|
||||
Uri uri = intent.getData();
|
||||
String moduleName = (uri != null) ? uri.getSchemeSpecificPart() : null;
|
||||
String moduleName = (uri != null) ? uri.getSchemeSpecificPart() : ConfigManager.getInstance().getModule(uid);
|
||||
|
||||
ApplicationInfo applicationInfo = null;
|
||||
if (moduleName != null) {
|
||||
|
|
@ -100,7 +100,8 @@ public class LSPosedService extends ILSPosedService.Stub {
|
|||
// for module, remove module
|
||||
// because we only care about when the apk is gone
|
||||
if (moduleName != null)
|
||||
ConfigManager.getInstance().removeModule(moduleName);
|
||||
if (ConfigManager.getInstance().removeModule(moduleName))
|
||||
isXposedModule = true;
|
||||
break;
|
||||
}
|
||||
case Intent.ACTION_PACKAGE_ADDED:
|
||||
|
|
@ -123,7 +124,7 @@ public class LSPosedService extends ILSPosedService.Stub {
|
|||
case Intent.ACTION_UID_REMOVED: {
|
||||
// when a package is removed (rather than hide) for a single user
|
||||
// (apk may still be there because of multi-user)
|
||||
if (ConfigManager.getInstance().isModule(uid)) {
|
||||
if (isXposedModule) {
|
||||
// it will automatically remove obsolete scope from database
|
||||
ConfigManager.getInstance().updateCache();
|
||||
} else if (ConfigManager.getInstance().isUidHooked(uid)) {
|
||||
|
|
@ -134,8 +135,10 @@ public class LSPosedService extends ILSPosedService.Stub {
|
|||
}
|
||||
}
|
||||
if (isXposedModule) {
|
||||
Log.d(TAG, "module " + moduleName + " changed, dispatching to manager");
|
||||
boolean enabled = Arrays.asList(ConfigManager.getInstance().enabledModules()).contains(moduleName);
|
||||
Intent broadcastIntent = new Intent(enabled ? "org.lsposed.action.MODULE_UPDATED" : "org.lsposed.action.MODULE_NOT_ACTIVATAED");
|
||||
boolean removed = intent.getAction().equals(Intent.ACTION_PACKAGE_FULLY_REMOVED) || intent.getAction().equals(Intent.ACTION_UID_REMOVED);
|
||||
Intent broadcastIntent = new Intent(enabled || removed ? "org.lsposed.action.MODULE_UPDATED" : "org.lsposed.action.MODULE_NOT_ACTIVATAED");
|
||||
broadcastIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
|
||||
broadcastIntent.addFlags(0x01000000);
|
||||
broadcastIntent.addFlags(0x00400000);
|
||||
|
|
|
|||
Loading…
Reference in New Issue