From 5af39a01b6d95bf53a9d6ba18afc5dd40f323e72 Mon Sep 17 00:00:00 2001 From: Howard Wu Date: Fri, 18 Aug 2023 10:32:38 +0800 Subject: [PATCH] Fix shortcut pinned receiver for Android 14 (#2694) --- .../manager/ui/fragment/SettingsFragment.java | 27 +++++++------------ .../lsposed/manager/util/ShortcutUtil.java | 2 +- 2 files changed, 11 insertions(+), 18 deletions(-) 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 7167ea3b..990a8cc7 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 @@ -134,23 +134,16 @@ public class SettingsFragment extends BaseFragment { parentFragment = null; } - @Override - public void onResume() { - super.onResume(); - MaterialSwitchPreference notificationPreference = findPreference("enable_status_notification"); - if (App.isParasitic && notificationPreference != null && notificationPreference.isVisible()) { - setNotificationPreferenceEnabled(notificationPreference, ShortcutUtil.isLaunchShortcutPinned()); - } - } - - private void setNotificationPreferenceEnabled(MaterialSwitchPreference notificationPreference, boolean enabled) { + private boolean setNotificationPreferenceEnabled(MaterialSwitchPreference notificationPreference, boolean preferenceEnabled) { + var notificationEnabled = ConfigManager.enableStatusNotification(); if (notificationPreference != null) { - notificationPreference.setEnabled(!ConfigManager.enableStatusNotification() || enabled); - notificationPreference.setSummaryOn(enabled ? + notificationPreference.setEnabled(!notificationEnabled || preferenceEnabled); + notificationPreference.setSummaryOn(preferenceEnabled ? notificationPreference.getContext().getString(R.string.settings_enable_status_notification_summary) : notificationPreference.getContext().getString(R.string.settings_enable_status_notification_summary) + "\n" + notificationPreference.getContext().getString(R.string.disable_status_notification_error)); } + return notificationEnabled; } @Override @@ -179,16 +172,16 @@ public class SettingsFragment extends BaseFragment { MaterialSwitchPreference notificationPreference = findPreference("enable_status_notification"); if (notificationPreference != null) { - if (App.isParasitic && !ShortcutUtil.isLaunchShortcutPinned()) { - setNotificationPreferenceEnabled(notificationPreference, false); - } notificationPreference.setVisible(installed); - notificationPreference.setChecked(installed && ConfigManager.enableStatusNotification()); + if (installed && App.isParasitic) { + notificationPreference.setChecked(setNotificationPreferenceEnabled(notificationPreference, ShortcutUtil.isLaunchShortcutPinned())); + } notificationPreference.setOnPreferenceChangeListener((p, v) -> { + var succeeded = ConfigManager.setEnableStatusNotification((boolean) v); if ((boolean) v && App.isParasitic && !ShortcutUtil.isLaunchShortcutPinned()) { setNotificationPreferenceEnabled(notificationPreference, false); } - return ConfigManager.setEnableStatusNotification((boolean) v); + return succeeded; }); } 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 d65015c9..2c49eb95 100644 --- a/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java +++ b/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java @@ -115,7 +115,7 @@ public class ShortcutUtil { } }; context.registerReceiver(receiver, filter, permission, - null/* main thread */, Context.RECEIVER_NOT_EXPORTED); + null/* main thread */, Context.RECEIVER_EXPORTED); var intent = new Intent(uuid); int flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;