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:
parent
3486a6d004
commit
ec56d45492
|
|
@ -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() {
|
public static boolean isVerboseLogEnabled() {
|
||||||
try {
|
try {
|
||||||
return LSPManagerServiceHolder.getService().isVerboseLog();
|
return LSPManagerServiceHolder.getService().isVerboseLog();
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,14 @@ public class SettingsFragment extends BaseFragment {
|
||||||
prefEnableResources.setOnPreferenceChangeListener((preference, newValue) -> ConfigManager.setResourceHookEnabled((boolean) newValue));
|
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");
|
Preference backup = findPreference("backup");
|
||||||
if (backup != null) {
|
if (backup != null) {
|
||||||
backup.setEnabled(installed);
|
backup.setEnabled(installed);
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,8 @@
|
||||||
<string name="settings_translation_contributors">翻译贡献者</string>
|
<string name="settings_translation_contributors">翻译贡献者</string>
|
||||||
<string name="settings_translation">参与翻译</string>
|
<string name="settings_translation">参与翻译</string>
|
||||||
<string name="settings_translation_summary">帮助我们把 %s 翻译到你的语言</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 -->
|
<!-- Module Repo -->
|
||||||
<string name="module_readme">自述文件</string>
|
<string name="module_readme">自述文件</string>
|
||||||
<string name="module_releases">版本</string>
|
<string name="module_releases">版本</string>
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,8 @@
|
||||||
<string name="settings_translation_contributors">Translation contributors</string>
|
<string name="settings_translation_contributors">Translation contributors</string>
|
||||||
<string name="settings_translation">Participate in translation</string>
|
<string name="settings_translation">Participate in translation</string>
|
||||||
<string name="settings_translation_summary">Help us translate %s into your language</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 -->
|
<!-- Module Repo -->
|
||||||
<string name="module_readme">Readme</string>
|
<string name="module_readme">Readme</string>
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@
|
||||||
android:defaultValue="SYSTEM"
|
android:defaultValue="SYSTEM"
|
||||||
android:entries="@array/language"
|
android:entries="@array/language"
|
||||||
android:icon="@drawable/ic_baseline_translate_24"
|
android:icon="@drawable/ic_baseline_translate_24"
|
||||||
android:summary="%s"
|
|
||||||
android:key="language"
|
android:key="language"
|
||||||
|
android:summary="%s"
|
||||||
android:title="@string/settings_language" />
|
android:title="@string/settings_language" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
|
|
@ -92,6 +92,13 @@
|
||||||
android:key="disable_verbose_log"
|
android:key="disable_verbose_log"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/pref_title_disable_verbose_log" />
|
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>
|
||||||
|
|
||||||
<com.takisoft.preferencex.PreferenceCategory
|
<com.takisoft.preferencex.PreferenceCategory
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@
|
||||||
android:defaultValue="SYSTEM"
|
android:defaultValue="SYSTEM"
|
||||||
android:entries="@array/language"
|
android:entries="@array/language"
|
||||||
android:icon="@drawable/ic_baseline_translate_24"
|
android:icon="@drawable/ic_baseline_translate_24"
|
||||||
android:summary="%s"
|
|
||||||
android:key="language"
|
android:key="language"
|
||||||
|
android:summary="%s"
|
||||||
android:title="@string/settings_language" />
|
android:title="@string/settings_language" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
|
|
@ -93,6 +93,13 @@
|
||||||
android:key="disable_verbose_log"
|
android:key="disable_verbose_log"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/pref_title_disable_verbose_log" />
|
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>
|
||||||
|
|
||||||
<com.takisoft.preferencex.PreferenceCategory
|
<com.takisoft.preferencex.PreferenceCategory
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ public class ConfigManager {
|
||||||
|
|
||||||
private boolean resourceHook = false;
|
private boolean resourceHook = false;
|
||||||
private boolean verboseLog = true;
|
private boolean verboseLog = true;
|
||||||
|
private boolean autoAddShortcut = true;
|
||||||
private String miscPath = null;
|
private String miscPath = null;
|
||||||
|
|
||||||
private int managerUid = -1;
|
private int managerUid = -1;
|
||||||
|
|
@ -211,6 +212,13 @@ public class ConfigManager {
|
||||||
bool = config.get("enable_verbose_log");
|
bool = config.get("enable_verbose_log");
|
||||||
verboseLog = bool == null || (boolean) bool;
|
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
|
// Don't migrate to ConfigFileManager, as XSharedPreferences will be restored soon
|
||||||
String string = (String) config.get("misc_path");
|
String string = (String) config.get("misc_path");
|
||||||
if (string == null) {
|
if (string == null) {
|
||||||
|
|
@ -791,6 +799,15 @@ public class ConfigManager {
|
||||||
verboseLog = on;
|
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() {
|
public boolean resourceHook() {
|
||||||
return resourceHook;
|
return resourceHook;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,6 @@ public class LSPManagerService extends ILSPManagerService.Stub {
|
||||||
|
|
||||||
private static final HandlerThread worker = new HandlerThread("manager worker");
|
private static final HandlerThread worker = new HandlerThread("manager worker");
|
||||||
private static final Handler workerHandler;
|
private static final Handler workerHandler;
|
||||||
|
|
||||||
private static Intent managerIntent = null;
|
private static Intent managerIntent = null;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
@ -276,17 +275,16 @@ public class LSPManagerService extends ILSPManagerService.Stub {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void createOrUpdateShortcut(boolean force) {
|
public static void createOrUpdateShortcut(boolean force) {
|
||||||
workerHandler.post(() -> 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 {
|
try {
|
||||||
if (!force && ConfigManager.getInstance().isManagerInstalled()) {
|
|
||||||
Log.d(TAG, "Manager has installed, skip adding shortcut");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while (!UserService.isUserUnlocked(0)) {
|
while (!UserService.isUserUnlocked(0)) {
|
||||||
Log.d(TAG, "user is not yet unlocked, waiting for 1s...");
|
Log.d(TAG, "user is not yet unlocked, waiting for 1s...");
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
|
@ -316,9 +314,18 @@ public class LSPManagerService extends ILSPManagerService.Stub {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var configManager = ConfigManager.getInstance();
|
||||||
sm.requestPinShortcut(shortcut, null);
|
if (!force && configManager.isManagerInstalled()) {
|
||||||
Log.d(TAG, "done add shortcut");
|
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) {
|
} catch (Throwable e) {
|
||||||
Log.e(TAG, "add shortcut", e);
|
Log.e(TAG, "add shortcut", e);
|
||||||
}
|
}
|
||||||
|
|
@ -544,6 +551,17 @@ public class LSPManagerService extends ILSPManagerService.Stub {
|
||||||
ConfigManager.getInstance().setResourceHook(enabled);
|
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
|
@Override
|
||||||
public boolean isVerboseLog() {
|
public boolean isVerboseLog() {
|
||||||
return ConfigManager.getInstance().verboseLog();
|
return ConfigManager.getInstance().verboseLog();
|
||||||
|
|
@ -683,5 +701,6 @@ public class LSPManagerService extends ILSPManagerService.Stub {
|
||||||
@Override
|
@Override
|
||||||
public void createShortcut() {
|
public void createShortcut() {
|
||||||
createOrUpdateShortcut(true);
|
createOrUpdateShortcut(true);
|
||||||
|
setAddShortcut(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ public class LSPosedService extends ILSPosedService.Stub {
|
||||||
synchronized public void dispatchConfigurationChanged(Intent intent) {
|
synchronized public void dispatchConfigurationChanged(Intent intent) {
|
||||||
try {
|
try {
|
||||||
ConfigFileManager.reloadConfiguration();
|
ConfigFileManager.reloadConfiguration();
|
||||||
LSPManagerService.createOrUpdateShortcut(false);
|
LSPManagerService.createOrUpdateShortcut(false, false);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
Log.e(TAG, "dispatch configuration changed", e);
|
Log.e(TAG, "dispatch configuration changed", e);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,4 +67,8 @@ interface ILSPManagerService {
|
||||||
void restartFor(in Intent intent) = 35;
|
void restartFor(in Intent intent) = 35;
|
||||||
|
|
||||||
void createShortcut() = 36;
|
void createShortcut() = 36;
|
||||||
|
|
||||||
|
boolean isAddShortcut() = 37;
|
||||||
|
|
||||||
|
void setAddShortcut(boolean enabled) = 38;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue