Add a switch to control adding shortcuts. (#1238)

* Add a switch to control adding shortcuts.

* Hide Shortcut Setting if it is unavailable

* Request a new shortcut when enabled
This commit is contained in:
Howard Wu 2021-10-08 18:00:50 +08:00 committed by GitHub
parent 3486a6d004
commit ec56d45492
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 99 additions and 14 deletions

View File

@ -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();

View File

@ -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);

View File

@ -164,6 +164,8 @@
<string name="settings_translation_contributors">翻译贡献者</string>
<string name="settings_translation">参与翻译</string>
<string name="settings_translation_summary">帮助我们把 %s 翻译到你的语言</string>
<string name="pref_title_enable_auto_add_shortcut">自动新增快捷方式</string>
<string name="settings_enable_auto_add_shortcut_summary">在非寄生的管理器中禁用后将不会新增快捷</string>
<!-- Module Repo -->
<string name="module_readme">自述文件</string>
<string name="module_releases">版本</string>

View File

@ -172,6 +172,8 @@
<string name="settings_translation_contributors">Translation contributors</string>
<string name="settings_translation">Participate in translation</string>
<string name="settings_translation_summary">Help us translate %s into your language</string>
<string name="pref_title_enable_auto_add_shortcut">Automatically add a shortcut</string>
<string name="settings_enable_auto_add_shortcut_summary">No new shortcuts will be added when disabled in the non-parasitic manager</string>
<!-- Module Repo -->
<string name="module_readme">Readme</string>

View File

@ -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" />
<Preference
@ -92,6 +92,13 @@
android:key="disable_verbose_log"
android:persistent="false"
android:title="@string/pref_title_disable_verbose_log" />
<SwitchPreference
android:defaultValue="false"
android:key="enable_auto_add_shortcut"
android:persistent="false"
android:summary="@string/settings_enable_auto_add_shortcut_summary"
android:title="@string/pref_title_enable_auto_add_shortcut" />
</com.takisoft.preferencex.PreferenceCategory>
<com.takisoft.preferencex.PreferenceCategory

View File

@ -36,8 +36,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" />
<Preference
@ -93,6 +93,13 @@
android:key="disable_verbose_log"
android:persistent="false"
android:title="@string/pref_title_disable_verbose_log" />
<SwitchPreference
android:defaultValue="false"
android:key="enable_auto_add_shortcut"
android:persistent="false"
android:summary="@string/settings_enable_auto_add_shortcut_summary"
android:title="@string/pref_title_enable_auto_add_shortcut" />
</com.takisoft.preferencex.PreferenceCategory>
<com.takisoft.preferencex.PreferenceCategory

View File

@ -83,6 +83,7 @@ public class ConfigManager {
private boolean resourceHook = false;
private boolean verboseLog = true;
private boolean autoAddShortcut = true;
private String miscPath = null;
private int managerUid = -1;
@ -211,6 +212,13 @@ public class ConfigManager {
bool = config.get("enable_verbose_log");
verboseLog = bool == null || (boolean) bool;
bool = config.get("enable_auto_add_shortcut");
if (bool == null) {
updateModulePrefs("lspd", 0, "config", "enable_auto_add_shortcut", true);
bool = true;
}
autoAddShortcut = (boolean) bool;
// Don't migrate to ConfigFileManager, as XSharedPreferences will be restored soon
String string = (String) config.get("misc_path");
if (string == null) {
@ -791,6 +799,15 @@ public class ConfigManager {
verboseLog = on;
}
public boolean isAddShortcut() {
return autoAddShortcut;
}
public void setAddShortcut(boolean on) {
updateModulePrefs("lspd", 0, "config", "enable_auto_add_shortcut", on);
this.autoAddShortcut = on;
}
public boolean resourceHook() {
return resourceHook;
}

View File

@ -87,7 +87,6 @@ public class LSPManagerService extends ILSPManagerService.Stub {
private static final HandlerThread worker = new HandlerThread("manager worker");
private static final Handler workerHandler;
private static Intent managerIntent = null;
static {
@ -276,17 +275,16 @@ public class LSPManagerService extends ILSPManagerService.Stub {
}
}
public static void createOrUpdateShortcut(boolean force) {
workerHandler.post(() -> createOrUpdateShortcutInternal(force));
workerHandler.post(() -> createOrUpdateShortcutInternal(force, true));
}
private synchronized static void createOrUpdateShortcutInternal(boolean force) {
try {
if (!force && ConfigManager.getInstance().isManagerInstalled()) {
Log.d(TAG, "Manager has installed, skip adding shortcut");
return;
public static void createOrUpdateShortcut(boolean force, boolean shouldCreate) {
workerHandler.post(() -> createOrUpdateShortcutInternal(force, shouldCreate));
}
private synchronized static void createOrUpdateShortcutInternal(boolean force, boolean shouldCreate) {
try {
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;
}
}
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);
}
}

View File

@ -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);
}

View File

@ -67,4 +67,8 @@ interface ILSPManagerService {
void restartFor(in Intent intent) = 35;
void createShortcut() = 36;
boolean isAddShortcut() = 37;
void setAddShortcut(boolean enabled) = 38;
}