diff --git a/app/src/main/java/org/lsposed/manager/ui/dialog/WelcomeDialog.java b/app/src/main/java/org/lsposed/manager/ui/dialog/WelcomeDialog.java
index 82ab7b6c..43fa31c6 100644
--- a/app/src/main/java/org/lsposed/manager/ui/dialog/WelcomeDialog.java
+++ b/app/src/main/java/org/lsposed/manager/ui/dialog/WelcomeDialog.java
@@ -30,6 +30,7 @@ import androidx.fragment.app.FragmentManager;
import org.lsposed.manager.App;
import org.lsposed.manager.ConfigManager;
import org.lsposed.manager.R;
+import org.lsposed.manager.ui.fragment.HomeFragment;
import org.lsposed.manager.util.ShortcutUtil;
public class WelcomeDialog extends DialogFragment {
@@ -43,12 +44,16 @@ public class WelcomeDialog extends DialogFragment {
R.string.parasitic_welcome_summary_no_shortcut_support)
.setNegativeButton(R.string.never_show, (dialog, which) ->
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply())
- .setPositiveButton(android.R.string.ok, null);
- if (shortcutSupported)
- builder.setNeutralButton(R.string.create_shortcut, (dialog, which) ->
- ShortcutUtil.requestPinLaunchShortcut(() ->
- App.getPreferences().edit().putBoolean("never_show_welcome",
- true).apply()));
+ .setPositiveButton(android.R.string.ok, null)
+ .setNeutralButton(R.string.create_shortcut, (dialog, which) -> {
+ if (!ShortcutUtil.requestPinLaunchShortcut(() -> App.getPreferences().edit()
+ .putBoolean("never_show_welcome", true).apply())) {
+ var home = (HomeFragment) getParentFragment();
+ if (home != null) {
+ home.showHint(R.string.settings_unsupported_pin_shortcut_summary, false);
+ }
+ }
+ });
return builder.create();
}
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 42d81d9d..a4896456 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
@@ -163,19 +163,21 @@ public class SettingsFragment extends BaseFragment {
if (App.isParasitic() && !ShortcutUtil.isLaunchShortcutPinned()) {
var s = notification.getContext().getString(R.string.disable_status_notification_error);
notification.setSummaryOn(notification.getSummary() + "\n" + s);
- notification.setEnabled(false);
- } else {
- notification.setEnabled(installed);
+ if (ConfigManager.enableStatusNotification()) notification.setEnabled(false);
}
+ notification.setVisible(installed);
notification.setChecked(installed && ConfigManager.enableStatusNotification());
- notification.setOnPreferenceChangeListener((p, v) ->
- ConfigManager.setEnableStatusNotification((boolean) v)
- );
+ notification.setOnPreferenceChangeListener((p, v) -> {
+ if ((boolean) v && App.isParasitic() && !ShortcutUtil.isLaunchShortcutPinned()) {
+ p.setEnabled(false);
+ }
+ return ConfigManager.setEnableStatusNotification((boolean) v);
+ });
}
Preference shortcut = findPreference("add_shortcut");
if (shortcut != null) {
- shortcut.setVisible(App.isParasitic() && ShortcutUtil.isRequestPinShortcutSupported(requireContext()));
+ shortcut.setVisible(App.isParasitic());
if (ShortcutUtil.isLaunchShortcutPinned()) {
shortcut.setEnabled(false);
shortcut.setSummary(R.string.settings_created_shortcut_summary);
@@ -184,7 +186,7 @@ public class SettingsFragment extends BaseFragment {
shortcut.setSummary(R.string.settings_create_shortcut_summary);
}
shortcut.setOnPreferenceClickListener(preference -> {
- ShortcutUtil.requestPinLaunchShortcut(() -> {
+ if (!ShortcutUtil.requestPinLaunchShortcut(() -> {
shortcut.setEnabled(false);
shortcut.setSummary(R.string.settings_created_shortcut_summary);
if (notification != null) {
@@ -192,7 +194,9 @@ public class SettingsFragment extends BaseFragment {
notification.setSummaryOn(R.string.settings_enable_status_notification_summary);
}
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply();
- });
+ })) {
+ parentFragment.showHint(R.string.settings_unsupported_pin_shortcut_summary, true);
+ }
return true;
});
}
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 5708f8da..e6996750 100644
--- a/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java
+++ b/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java
@@ -149,12 +149,12 @@ public class ShortcutUtil {
return sm.isRequestPinShortcutSupported();
}
- public static void requestPinLaunchShortcut(Runnable afterPinned) {
+ public static boolean requestPinLaunchShortcut(Runnable afterPinned) {
if (!App.isParasitic()) throw new RuntimeException();
var context = App.getInstance();
var sm = context.getSystemService(ShortcutManager.class);
- if (!isRequestPinShortcutSupported(context)) return;
- sm.requestPinShortcut(getShortcutBuilder(context).build(),
+ if (!sm.isRequestPinShortcutSupported()) return false;
+ return sm.requestPinShortcut(getShortcutBuilder(context).build(),
registerReceiver(context, afterPinned));
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 31462444..0d48ddb4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -200,6 +200,7 @@
Help us translate %s into your language
Create a shortcut that can open parasitic manager
A shortcut has been created to open parasitic manager
+ The current default launcher does not support pin shortcuts
Status Notification
Show a notification that can open parasitic manager
No shortcut, cannot disable notification
diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml
index 673f874d..f7219288 100644
--- a/app/src/main/res/xml/prefs.xml
+++ b/app/src/main/res/xml/prefs.xml
@@ -88,16 +88,16 @@
android:icon="@drawable/ic_outline_assignment_24"
android:key="disable_verbose_log"
android:persistent="false"
- android:title="@string/settings_disable_verbose_log"
- android:summary="@string/settings_disable_verbose_log_summary"/>
+ android:summary="@string/settings_disable_verbose_log_summary"
+ android:title="@string/settings_disable_verbose_log" />
+ android:summary="@string/settings_xposed_api_call_protection_summary"
+ android:title="@string/settings_xposed_api_call_protection" />