Add more hint for shortcut and notification (#2411)

Co-authored-by: vvb2060 <vvb2060@gmail.com>
This commit is contained in:
Howard Wu 2023-03-01 04:37:44 +08:00 committed by GitHub
parent e2bfd98cee
commit d8cea17a80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 22 deletions

View File

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

View File

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

View File

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

View File

@ -200,6 +200,7 @@
<string name="settings_translation_summary">Help us translate %s into your language</string>
<string name="settings_create_shortcut_summary">Create a shortcut that can open parasitic manager</string>
<string name="settings_created_shortcut_summary">A shortcut has been created to open parasitic manager</string>
<string name="settings_unsupported_pin_shortcut_summary">The current default launcher does not support pin shortcuts</string>
<string name="settings_enable_status_notification">Status Notification</string>
<string name="settings_enable_status_notification_summary">Show a notification that can open parasitic manager</string>
<string name="disable_status_notification_error">No shortcut, cannot disable notification</string>

View File

@ -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" />
<rikka.material.preference.MaterialSwitchPreference
android:defaultValue="true"
android:icon="@drawable/ic_outline_shield_24"
android:key="enable_dex_obfuscate"
android:persistent="false"
android:title="@string/settings_xposed_api_call_protection"
android:summary="@string/settings_xposed_api_call_protection_summary"/>
android:summary="@string/settings_xposed_api_call_protection_summary"
android:title="@string/settings_xposed_api_call_protection" />
<Preference
android:icon="@drawable/ic_outline_app_shortcut_24"
@ -110,6 +110,7 @@
android:icon="@drawable/ic_outline_speaker_notes_24"
android:key="enable_status_notification"
android:persistent="false"
android:shouldDisableView="false"
android:summary="@string/settings_enable_status_notification_summary"
android:title="@string/settings_enable_status_notification" />
</PreferenceCategory>