From 26dd523fa00f10beadf32dff14026001008ca50f Mon Sep 17 00:00:00 2001 From: vvb2060 Date: Sun, 4 Dec 2022 23:20:28 +0800 Subject: [PATCH] Local get launch intent --- .../org/lsposed/manager/ConfigManager.java | 9 ---- .../lsposed/manager/util/ShortcutUtil.java | 44 ++++++++++++++++--- .../lspd/service/LSPManagerService.java | 5 --- .../org/lsposed/lspd/ILSPManagerService.aidl | 2 - 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/lsposed/manager/ConfigManager.java b/app/src/main/java/org/lsposed/manager/ConfigManager.java index a25e43dc..2034ab52 100644 --- a/app/src/main/java/org/lsposed/manager/ConfigManager.java +++ b/app/src/main/java/org/lsposed/manager/ConfigManager.java @@ -134,15 +134,6 @@ public class ConfigManager { return list; } - public static Intent getLaunchIntentForManager() { - try { - return LSPManagerServiceHolder.getService().getLaunchIntentForManager(); - } catch (RemoteException e) { - Log.e(App.TAG, Log.getStackTraceString(e)); - return null; - } - } - public static boolean enableStatusNotification() { try { return LSPManagerServiceHolder.getService().enableStatusNotification(); diff --git a/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java b/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java index 42a136fe..5b63336d 100644 --- a/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java +++ b/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java @@ -1,6 +1,9 @@ package org.lsposed.manager.util; +import android.content.ComponentName; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.graphics.Bitmap; @@ -12,7 +15,6 @@ import android.graphics.drawable.Icon; import android.graphics.drawable.LayerDrawable; import org.lsposed.manager.App; -import org.lsposed.manager.ConfigManager; import org.lsposed.manager.R; public class ShortcutUtil { @@ -38,12 +40,44 @@ public class ShortcutUtil { } } + private static Intent getLaunchIntent(Context context) { + var pm = context.getPackageManager(); + var pkg = context.getPackageName(); + var intent = pm.getLaunchIntentForPackage(pkg); + if (intent == null) { + try { + var pkgInfo = pm.getPackageInfo(pkg, PackageManager.GET_ACTIVITIES); + if (pkgInfo.activities != null) { + for (var activityInfo : pkgInfo.activities) { + if (activityInfo.processName.equals(activityInfo.packageName)) { + intent = new Intent(Intent.ACTION_MAIN); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setComponent(new ComponentName(pkg, activityInfo.name)); + break; + } + } + } + } catch (PackageManager.NameNotFoundException ignored) { + } + } + if (intent != null) { + var categories = intent.getCategories(); + if (categories != null) { + categories.clear(); + } + intent.addCategory("org.lsposed.manager.LAUNCH_MANAGER"); + intent.setPackage(pkg); + } + return intent; + } + public static void requestPinLaunchShortcut() { - var context= App.getInstance(); - var intent = ConfigManager.getLaunchIntentForManager(); + if (!App.isParasitic()) throw new RuntimeException(); + var context = App.getInstance(); var info = new ShortcutInfo.Builder(context, SHORTCUT_ID) .setShortLabel(context.getString(R.string.app_name)) - .setIntent(intent) + .setIntent(getLaunchIntent(context)) + .setActivity(new ComponentName(context.getPackageName(), "android.__dummy__")) .setIcon(Icon.createWithAdaptiveBitmap(getBitmap(context, R.drawable.ic_launcher))) .build(); var sm = context.getSystemService(ShortcutManager.class); @@ -51,7 +85,7 @@ public class ShortcutUtil { } public static boolean isLaunchShortcutPinned() { - var context= App.getInstance(); + var context = App.getInstance(); var sm = context.getSystemService(ShortcutManager.class); boolean pinned = false; for (var info : sm.getPinnedShortcuts()) { diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index 76ea3d82..9e11d82b 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -599,11 +599,6 @@ public class LSPManagerService extends ILSPManagerService.Stub { PackageService.clearApplicationProfileData(packageName); } - @Override - public Intent getLaunchIntentForManager() { - return getManagerIntent(); - } - @Override public boolean enableStatusNotification() { return ConfigManager.getInstance().enableStatusNotification(); diff --git a/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl b/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl index 282835c6..75d2017d 100644 --- a/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl +++ b/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl @@ -84,8 +84,6 @@ interface ILSPManagerService { void clearApplicationProfileData(in String packageName) = 45; - Intent getLaunchIntentForManager() = 46; - boolean enableStatusNotification() = 47; void setEnableStatusNotification(boolean enable) = 48;