diff --git a/app/src/main/java/org/lsposed/manager/App.java b/app/src/main/java/org/lsposed/manager/App.java index 578a5c20..74cc2081 100644 --- a/app/src/main/java/org/lsposed/manager/App.java +++ b/app/src/main/java/org/lsposed/manager/App.java @@ -21,7 +21,10 @@ package org.lsposed.manager; import android.app.Application; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Build; import android.os.Process; @@ -38,6 +41,7 @@ import org.lsposed.hiddenapibypass.HiddenApiBypass; import org.lsposed.manager.repo.RepoLoader; import org.lsposed.manager.ui.activity.CrashReportActivity; import org.lsposed.manager.util.DoHDNS; +import org.lsposed.manager.util.ModuleUtil; import org.lsposed.manager.util.theme.ThemeUtil; import java.io.ByteArrayOutputStream; @@ -136,7 +140,7 @@ public class App extends Application { @Override public void onCreate() { super.onCreate(); - if (!BuildConfig.DEBUG) { + if (!BuildConfig.DEBUG && Process.isApplicationUid(Process.myUid())) { setCrashReport(); } @@ -154,6 +158,17 @@ public class App extends Application { DayNightDelegate.setDefaultNightMode(ThemeUtil.getDarkTheme()); LocaleDelegate.setDefaultLocale(getLocale()); + registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + int userId = intent.getIntExtra(Intent.EXTRA_USER, 0); + String packageName = intent.getStringExtra("android.intent.extra.PACKAGES"); + if (packageName != null) { + ModuleUtil.getInstance().reloadSingleModule(packageName, userId); + } + } + }, new IntentFilter(Intent.ACTION_PACKAGE_CHANGED)); + loadRemoteVersion(); RepoLoader.getInstance().loadRemoteData(); diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index 1372b714..c88156a1 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -45,7 +45,6 @@ import android.os.Bundle; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; -import android.os.ResultReceiver; import android.os.SELinux; import android.os.SystemProperties; import android.util.Log; @@ -60,7 +59,6 @@ import org.lsposed.lspd.util.FakeContext; import org.lsposed.lspd.util.Utils; import java.io.File; -import java.io.FileDescriptor; import java.lang.reflect.InvocationTargetException; import java.util.Collections; import java.util.LinkedList; @@ -241,6 +239,28 @@ public class LSPManagerService extends ILSPManagerService.Stub { } } + public static void broadcastIntent(String modulePackageName, int moduleUserId) { + Intent intent = new Intent(Intent.ACTION_PACKAGE_CHANGED); + intent.addFlags(0x01000000); //Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND + intent.addFlags(0x00400000); //Intent.FLAG_RECEIVER_FROM_SHELL + intent.putExtra("android.intent.extra.PACKAGES", modulePackageName); + intent.putExtra(Intent.EXTRA_USER, moduleUserId); + intent.setPackage(BuildConfig.MANAGER_INJECTED_PKG_NAME); + try { + ActivityManagerService.broadcastIntentWithFeature(null, intent, + null, null, 0, null, null, + null, -1, null, true, false, + 0); + intent.setPackage(BuildConfig.DEFAULT_MANAGER_PACKAGE_NAME); + ActivityManagerService.broadcastIntentWithFeature(null, intent, + null, null, 0, null, null, + null, -1, null, true, false, + 0); + } catch (Throwable t) { + Log.e(TAG, "Broadcast to manager failed: ", t); + } + } + public static void createOrUpdateShortcut() { try { while (!UserService.isUserUnlocked(0)) { diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java b/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java index c9ca9611..cb69698d 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java @@ -32,7 +32,6 @@ import android.net.Uri; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; -import android.util.DisplayMetrics; import android.util.Log; import java.util.Arrays; @@ -144,7 +143,10 @@ public class LSPosedService extends ILSPosedService.Stub { boolean enabled = Arrays.asList(enabledModules).contains(moduleName); boolean removed = intent.getAction().equals(Intent.ACTION_PACKAGE_FULLY_REMOVED) || intent.getAction().equals(Intent.ACTION_UID_REMOVED); - LSPManagerService.showNotification(moduleName, userId, enabled || removed, systemModule); + if (!removed) { + LSPManagerService.showNotification(moduleName, userId, enabled, systemModule); + } + LSPManagerService.broadcastIntent(moduleName, userId); } if (moduleName != null && ConfigManager.getInstance().isManager(moduleName) && userId == 0) {