Send broadcast to manager when updated module list
This commit is contained in:
parent
f1461be83a
commit
54098c1dbc
|
|
@ -269,9 +269,13 @@ namespace edxp {
|
|||
if (LIKELY(service_class)) {
|
||||
jfieldID path_fid = JNI_GetStaticFieldID(env, service_class, "CONFIG_PATH",
|
||||
"Ljava/lang/String;");
|
||||
if (LIKELY(path_fid)) {
|
||||
jfieldID pn_fid = JNI_GetStaticFieldID(env, service_class, "INSTALLER_PACKAGE_NAME",
|
||||
"Ljava/lang/String;");
|
||||
if (LIKELY(path_fid) && LIKELY(pn_fid)) {
|
||||
env->SetStaticObjectField(service_class, path_fid, env->NewStringUTF(
|
||||
ConfigManager::GetMiscPath().c_str()));
|
||||
env->SetStaticObjectField(service_class, pn_fid, env->NewStringUTF(
|
||||
ConfigManager::GetInstance()->GetInstallerPackageName().c_str()));
|
||||
jmethodID install_mid = JNI_GetStaticMethodID(env, service_class,
|
||||
"install", "()V");
|
||||
if (LIKELY(install_mid)) {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ import java.util.Map;
|
|||
import java.util.Objects;
|
||||
import java.util.Scanner;
|
||||
|
||||
import de.robv.android.xposed.XposedHelpers;
|
||||
|
||||
import static com.elderdrivers.riru.edxp.service.ServiceProxy.CONFIG_PATH;
|
||||
|
||||
public class PackageReceiver {
|
||||
|
|
@ -37,6 +39,8 @@ public class PackageReceiver {
|
|||
|
||||
private final String MODULES_LIST_FILENAME = "conf/modules.list";
|
||||
private final String ENABLED_MODULES_LIST_FILENAME = "conf/enabled_modules.list";
|
||||
private final String MODULE_UPDATED = "io.github.lsposed.action.MODULE_UPDATED";
|
||||
private final String MODULE_NOT_ACTIVATAED = "io.github.lsposed.action.MODULE_NOT_ACTIVATAED";
|
||||
|
||||
private String getPackageName(Intent intent) {
|
||||
Uri uri = intent.getData();
|
||||
|
|
@ -137,6 +141,7 @@ public class PackageReceiver {
|
|||
return true;
|
||||
}
|
||||
|
||||
@SuppressLint("WrongConstant")
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_PACKAGE_REMOVED) && intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))
|
||||
|
|
@ -172,14 +177,32 @@ public class PackageReceiver {
|
|||
@SuppressLint("DiscouragedPrivateApi")
|
||||
Method m = UserManager.class.getDeclaredMethod("getUsers");
|
||||
m.setAccessible(true);
|
||||
boolean res = false;
|
||||
for (Object uh : (List<Object>) m.invoke(um)) {
|
||||
int uid = (int) uh.getClass().getDeclaredField("id").get(uh);
|
||||
Utils.logI("updating uid: " + uid);
|
||||
res = updateModuleList(uid, packageName) || res;
|
||||
boolean activated = updateModuleList(uid, packageName);
|
||||
UserHandle userHandle = null;
|
||||
try {
|
||||
userHandle = (UserHandle) XposedHelpers.callStaticMethod(UserHandle.class, "of", uid);
|
||||
} catch (Throwable t) {
|
||||
Utils.logW("get user handle failed", t);
|
||||
}
|
||||
if (userHandle != null) {
|
||||
try {
|
||||
Intent broadCast = new Intent(activated ? MODULE_UPDATED : MODULE_NOT_ACTIVATAED);
|
||||
broadCast.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES | 0x01000000);
|
||||
broadCast.setData(intent.getData());
|
||||
broadCast.setPackage(ServiceProxy.INSTALLER_PACKAGE_NAME);
|
||||
XposedHelpers.callMethod(context, "sendBroadcastAsUser", broadCast, userHandle);
|
||||
Utils.logI("broadcast to " + ServiceProxy.INSTALLER_PACKAGE_NAME);
|
||||
} catch (Throwable t) {
|
||||
Utils.logW("send broadcast failed", t);
|
||||
Toast.makeText(context, "EdXposed: Updated " + packageName, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
} else if (activated) {
|
||||
Toast.makeText(context, "EdXposed: Updated " + packageName, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
if (res)
|
||||
Toast.makeText(context, "EdXposed: Updated " + packageName, Toast.LENGTH_SHORT).show();
|
||||
} catch (Throwable e) {
|
||||
Utils.logW("update failed", e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import java.lang.reflect.Proxy;
|
|||
public class ServiceProxy implements InvocationHandler, KeepAll {
|
||||
|
||||
public static String CONFIG_PATH = null;
|
||||
public static String INSTALLER_PACKAGE_NAME = null;
|
||||
|
||||
private static IServiceManager original;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue