From cf05ea4160958ad140d96fdf19ce62884a2ef0d6 Mon Sep 17 00:00:00 2001 From: Howard Wu Date: Fri, 9 Jun 2023 12:05:06 +0800 Subject: [PATCH] Reset notification preference when resume --- .../manager/ui/fragment/SettingsFragment.java | 40 +++++++++++++------ .../lsposed/manager/util/ShortcutUtil.java | 16 +++++++- 2 files changed, 41 insertions(+), 15 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 9616a2e6..ca118094 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,6 +134,25 @@ public class SettingsFragment extends BaseFragment { parentFragment = null; } + @Override + public void onResume() { + super.onResume(); + MaterialSwitchPreference notificationPreference = findPreference("enable_status_notification"); + if (notificationPreference != null && notificationPreference.isVisible()) { + setNotificationPreferenceEnabled(notificationPreference, ShortcutUtil.isLaunchShortcutPinned()); + } + } + + private void setNotificationPreferenceEnabled(MaterialSwitchPreference notificationPreference, boolean enabled) { + if (notificationPreference != null) { + notificationPreference.setEnabled(!ConfigManager.enableStatusNotification() || enabled); + notificationPreference.setSummaryOn(enabled ? + 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)); + } + } + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { final String SYSTEM = "SYSTEM"; @@ -158,18 +177,16 @@ public class SettingsFragment extends BaseFragment { }); } - MaterialSwitchPreference notification = findPreference("enable_status_notification"); - if (notification != null) { + MaterialSwitchPreference notificationPreference = findPreference("enable_status_notification"); + if (notificationPreference != null) { if (App.isParasitic && !ShortcutUtil.isLaunchShortcutPinned()) { - var s = notification.getContext().getString(R.string.disable_status_notification_error); - notification.setSummaryOn(notification.getSummary() + "\n" + s); - if (ConfigManager.enableStatusNotification()) notification.setEnabled(false); + setNotificationPreferenceEnabled(notificationPreference, false); } - notification.setVisible(installed); - notification.setChecked(installed && ConfigManager.enableStatusNotification()); - notification.setOnPreferenceChangeListener((p, v) -> { + notificationPreference.setVisible(installed); + notificationPreference.setChecked(installed && ConfigManager.enableStatusNotification()); + notificationPreference.setOnPreferenceChangeListener((p, v) -> { if ((boolean) v && App.isParasitic && !ShortcutUtil.isLaunchShortcutPinned()) { - p.setEnabled(false); + setNotificationPreferenceEnabled(notificationPreference, false); } return ConfigManager.setEnableStatusNotification((boolean) v); }); @@ -188,10 +205,7 @@ public class SettingsFragment extends BaseFragment { if (!ShortcutUtil.requestPinLaunchShortcut(() -> { shortcut.setEnabled(false); shortcut.setSummary(R.string.settings_created_shortcut_summary); - if (notification != null) { - notification.setEnabled(true); - notification.setSummaryOn(R.string.settings_enable_status_notification_summary); - } + setNotificationPreferenceEnabled(notificationPreference, true); App.getPreferences().edit().putBoolean("never_show_welcome", true).apply(); parentFragment.showHint(R.string.settings_shortcut_pinned_hint, false); })) { 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 63e61511..53226a6c 100644 --- a/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java +++ b/app/src/main/java/org/lsposed/manager/util/ShortcutUtil.java @@ -38,6 +38,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.graphics.drawable.LayerDrawable; import android.os.Build; +import android.util.Log; import androidx.annotation.Nullable; @@ -106,26 +107,33 @@ public class ShortcutUtil { @SuppressLint("InlinedApi") private static IntentSender registerReceiver(Context context, Runnable task) { + Log.d(App.TAG, "registerReceiver called"); if (task == null) return null; - + Log.d(App.TAG, "registerReceiver: task=" + task); var uuid = UUID.randomUUID().toString(); var filter = new IntentFilter(uuid); var permission = "android.permission.CREATE_USERS"; var receiver = new BroadcastReceiver() { @Override public void onReceive(Context c, Intent intent) { + Log.d(App.TAG, "registerReceiver: onReceive: " + intent.getAction()); if (!uuid.equals(intent.getAction())) return; + Log.d(App.TAG, "registerReceiver: onReceive: unregisterReceiver"); context.unregisterReceiver(this); + Log.d(App.TAG, "registerReceiver: onReceive: task.run()"); task.run(); defaultLauncherPackageName = getDefaultLauncherPackageName(context); shortcutPinned = true; + Log.d(App.TAG, "registerReceiver: onReceive: shortcutPinned=" + shortcutPinned + " defaultLauncherPackageName=" + defaultLauncherPackageName); } }; + Log.d(App.TAG, "registerReceiver: filterAction=" + filter.getAction(0) + " permission=" + permission + " receiver=" + receiver); context.registerReceiver(receiver, filter, permission, null/* main thread */, Context.RECEIVER_NOT_EXPORTED); var intent = new Intent(uuid); int flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE; + Log.d(App.TAG, "registerReceiver: intent=" + intent + " flags=" + flags); return PendingIntent.getBroadcast(context, 0, intent, flags).getIntentSender(); } @@ -194,6 +202,10 @@ public class ShortcutUtil { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); var resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); - return resolveInfo.activityInfo.packageName; + if (resolveInfo != null) { + return resolveInfo.activityInfo.packageName; + } else { + return null; + } } }