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)) {
|
if (LIKELY(service_class)) {
|
||||||
jfieldID path_fid = JNI_GetStaticFieldID(env, service_class, "CONFIG_PATH",
|
jfieldID path_fid = JNI_GetStaticFieldID(env, service_class, "CONFIG_PATH",
|
||||||
"Ljava/lang/String;");
|
"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(
|
env->SetStaticObjectField(service_class, path_fid, env->NewStringUTF(
|
||||||
ConfigManager::GetMiscPath().c_str()));
|
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,
|
jmethodID install_mid = JNI_GetStaticMethodID(env, service_class,
|
||||||
"install", "()V");
|
"install", "()V");
|
||||||
if (LIKELY(install_mid)) {
|
if (LIKELY(install_mid)) {
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
import de.robv.android.xposed.XposedHelpers;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.service.ServiceProxy.CONFIG_PATH;
|
import static com.elderdrivers.riru.edxp.service.ServiceProxy.CONFIG_PATH;
|
||||||
|
|
||||||
public class PackageReceiver {
|
public class PackageReceiver {
|
||||||
|
|
@ -37,6 +39,8 @@ public class PackageReceiver {
|
||||||
|
|
||||||
private final String MODULES_LIST_FILENAME = "conf/modules.list";
|
private final String MODULES_LIST_FILENAME = "conf/modules.list";
|
||||||
private final String ENABLED_MODULES_LIST_FILENAME = "conf/enabled_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) {
|
private String getPackageName(Intent intent) {
|
||||||
Uri uri = intent.getData();
|
Uri uri = intent.getData();
|
||||||
|
|
@ -137,6 +141,7 @@ public class PackageReceiver {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("WrongConstant")
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
if (Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_PACKAGE_REMOVED) && intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))
|
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")
|
@SuppressLint("DiscouragedPrivateApi")
|
||||||
Method m = UserManager.class.getDeclaredMethod("getUsers");
|
Method m = UserManager.class.getDeclaredMethod("getUsers");
|
||||||
m.setAccessible(true);
|
m.setAccessible(true);
|
||||||
boolean res = false;
|
|
||||||
for (Object uh : (List<Object>) m.invoke(um)) {
|
for (Object uh : (List<Object>) m.invoke(um)) {
|
||||||
int uid = (int) uh.getClass().getDeclaredField("id").get(uh);
|
int uid = (int) uh.getClass().getDeclaredField("id").get(uh);
|
||||||
Utils.logI("updating uid: " + uid);
|
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) {
|
} catch (Throwable e) {
|
||||||
Utils.logW("update failed", e);
|
Utils.logW("update failed", e);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import java.lang.reflect.Proxy;
|
||||||
public class ServiceProxy implements InvocationHandler, KeepAll {
|
public class ServiceProxy implements InvocationHandler, KeepAll {
|
||||||
|
|
||||||
public static String CONFIG_PATH = null;
|
public static String CONFIG_PATH = null;
|
||||||
|
public static String INSTALLER_PACKAGE_NAME = null;
|
||||||
|
|
||||||
private static IServiceManager original;
|
private static IServiceManager original;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue