diff --git a/app/src/main/java/org/lsposed/manager/ConfigManager.java b/app/src/main/java/org/lsposed/manager/ConfigManager.java
index 3e68f629..99ac291b 100644
--- a/app/src/main/java/org/lsposed/manager/ConfigManager.java
+++ b/app/src/main/java/org/lsposed/manager/ConfigManager.java
@@ -156,6 +156,25 @@ public class ConfigManager {
}
}
+ public static boolean isAddShortcut() {
+ try {
+ return LSPManagerServiceHolder.getService().isAddShortcut();
+ } catch (RemoteException e) {
+ Log.e(App.TAG, Log.getStackTraceString(e));
+ return false;
+ }
+ }
+
+ public static boolean setAddShortcut(boolean enabled) {
+ try {
+ LSPManagerServiceHolder.getService().setAddShortcut(enabled);
+ return true;
+ } catch (RemoteException e) {
+ Log.e(App.TAG, Log.getStackTraceString(e));
+ return false;
+ }
+ }
+
public static boolean isVerboseLogEnabled() {
try {
return LSPManagerServiceHolder.getService().isVerboseLog();
diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java
index 79132d17..5ea78caa 100644
--- a/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java
+++ b/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java
@@ -160,6 +160,14 @@ public class SettingsFragment extends BaseFragment {
prefEnableResources.setOnPreferenceChangeListener((preference, newValue) -> ConfigManager.setResourceHookEnabled((boolean) newValue));
}
+ SwitchPreference prefEnableShortcut = findPreference("enable_auto_add_shortcut");
+ if (prefEnableShortcut != null) {
+ prefEnableShortcut.setEnabled(installed);
+ prefEnableShortcut.setVisible(!App.isParasitic());
+ prefEnableShortcut.setChecked(installed && ConfigManager.isAddShortcut());
+ prefEnableShortcut.setOnPreferenceChangeListener((preference, newValue) -> ConfigManager.setAddShortcut((boolean) newValue));
+ }
+
Preference backup = findPreference("backup");
if (backup != null) {
backup.setEnabled(installed);
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 031c2e38..472c74ef 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -164,6 +164,8 @@
翻译贡献者
参与翻译
帮助我们把 %s 翻译到你的语言
+ 自动新增快捷方式
+ 在非寄生的管理器中禁用后将不会新增快捷
自述文件
版本
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d531776a..b41d6dc1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -172,6 +172,8 @@
Translation contributors
Participate in translation
Help us translate %s into your language
+ Automatically add a shortcut
+ No new shortcuts will be added when disabled in the non-parasitic manager
Readme
diff --git a/app/src/main/res/xml-v29/prefs.xml b/app/src/main/res/xml-v29/prefs.xml
index f46537d2..cdcaac18 100644
--- a/app/src/main/res/xml-v29/prefs.xml
+++ b/app/src/main/res/xml-v29/prefs.xml
@@ -35,8 +35,8 @@
android:defaultValue="SYSTEM"
android:entries="@array/language"
android:icon="@drawable/ic_baseline_translate_24"
- android:summary="%s"
android:key="language"
+ android:summary="%s"
android:title="@string/settings_language" />
+
+
+
+
createOrUpdateShortcutInternal(force));
+ workerHandler.post(() -> createOrUpdateShortcutInternal(force, true));
}
- private synchronized static void createOrUpdateShortcutInternal(boolean force) {
+ public static void createOrUpdateShortcut(boolean force, boolean shouldCreate) {
+ workerHandler.post(() -> createOrUpdateShortcutInternal(force, shouldCreate));
+ }
+
+ private synchronized static void createOrUpdateShortcutInternal(boolean force, boolean shouldCreate) {
try {
- if (!force && ConfigManager.getInstance().isManagerInstalled()) {
- Log.d(TAG, "Manager has installed, skip adding shortcut");
- return;
- }
while (!UserService.isUserUnlocked(0)) {
Log.d(TAG, "user is not yet unlocked, waiting for 1s...");
Thread.sleep(1000);
@@ -316,9 +314,18 @@ public class LSPManagerService extends ILSPManagerService.Stub {
return;
}
}
-
- sm.requestPinShortcut(shortcut, null);
- Log.d(TAG, "done add shortcut");
+ var configManager = ConfigManager.getInstance();
+ if (!force && configManager.isManagerInstalled()) {
+ Log.d(TAG, "Manager has installed, skip adding shortcut");
+ return;
+ }
+ // Only existing shortcuts are updated when system settings
+ // are changed and no new shortcuts are requested
+ if (!force && !shouldCreate) return;
+ if (configManager.isAddShortcut()) {
+ sm.requestPinShortcut(shortcut, null);
+ Log.d(TAG, "done add shortcut");
+ }
} catch (Throwable e) {
Log.e(TAG, "add shortcut", e);
}
@@ -544,6 +551,17 @@ public class LSPManagerService extends ILSPManagerService.Stub {
ConfigManager.getInstance().setResourceHook(enabled);
}
+ @Override
+ public boolean isAddShortcut() {
+ return ConfigManager.getInstance().isAddShortcut();
+ }
+
+ @Override
+ public void setAddShortcut(boolean enabled) {
+ ConfigManager.getInstance().setAddShortcut(enabled);
+ if (enabled) createOrUpdateShortcut(true);
+ }
+
@Override
public boolean isVerboseLog() {
return ConfigManager.getInstance().verboseLog();
@@ -683,5 +701,6 @@ public class LSPManagerService extends ILSPManagerService.Stub {
@Override
public void createShortcut() {
createOrUpdateShortcut(true);
+ setAddShortcut(true);
}
}
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 35d9f1f7..b973cbe9 100644
--- a/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java
+++ b/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java
@@ -180,7 +180,7 @@ public class LSPosedService extends ILSPosedService.Stub {
synchronized public void dispatchConfigurationChanged(Intent intent) {
try {
ConfigFileManager.reloadConfiguration();
- LSPManagerService.createOrUpdateShortcut(false);
+ LSPManagerService.createOrUpdateShortcut(false, false);
} catch (Throwable e) {
Log.e(TAG, "dispatch configuration changed", e);
}
diff --git a/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl b/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl
index cba181f0..c24d5c41 100644
--- a/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl
+++ b/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl
@@ -67,4 +67,8 @@ interface ILSPManagerService {
void restartFor(in Intent intent) = 35;
void createShortcut() = 36;
+
+ boolean isAddShortcut() = 37;
+
+ void setAddShortcut(boolean enabled) = 38;
}