From d1ea380898560c78b5066d1462e8291ddb331fec Mon Sep 17 00:00:00 2001 From: vvb2060 Date: Sat, 3 Dec 2022 13:47:01 +0800 Subject: [PATCH] Support config change --- .../lspd/service/LSPNotificationManager.java | 21 +++++++++++++++++-- .../lsposed/lspd/service/LSPosedService.java | 4 ++++ .../android/app/INotificationManager.java | 2 ++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPNotificationManager.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPNotificationManager.java index e2a08396..8d3772fd 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPNotificationManager.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPNotificationManager.java @@ -86,6 +86,15 @@ public class LSPNotificationManager { return Icon.createWithBitmap(getBitmap(R.drawable.ic_notification)); } + private static boolean hasNotificationChannelForSystem( + INotificationManager nm, String channelId) throws RemoteException { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + return nm.getNotificationChannelForPackage("android", 1000, channelId, null, false) != null; + } else { + return nm.getNotificationChannelForPackage("android", 1000, channelId, false) != null; + } + } + private static void createNotificationChannel(INotificationManager nm) throws RemoteException { var context = new FakeContext(); var list = new ArrayList(); @@ -94,13 +103,21 @@ public class LSPNotificationManager { context.getString(R.string.module_updated_channel_name), NotificationManager.IMPORTANCE_HIGH); updated.setShowBadge(false); - list.add(updated); + if (hasNotificationChannelForSystem(nm, UPDATED_CHANNEL_ID)) { + nm.updateNotificationChannelForPackage("android", 1000, updated); + } else { + list.add(updated); + } var status = new NotificationChannel(STATUS_CHANNEL_ID, context.getString(R.string.status_channel_name), NotificationManager.IMPORTANCE_MIN); status.setShowBadge(false); - list.add(status); + if (hasNotificationChannelForSystem(nm, STATUS_CHANNEL_ID)) { + nm.updateNotificationChannelForPackage("android", 1000, status); + } else { + list.add(status); + } nm.createNotificationChannelsForPackage("android", 1000, new ParceledListSlice<>(list)); } diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java index 866979ea..03b4beb2 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java @@ -209,6 +209,10 @@ public class LSPosedService extends ILSPosedService.Stub { private void dispatchConfigurationChanged(Intent intent) { ConfigFileManager.reloadConfiguration(); + var configManager = ConfigManager.getInstance(); + if (configManager.enableStatusNotification()) { + LSPNotificationManager.notifyStatusNotification(); + } } private void dispatchSecretCodeReceive(Intent i) { diff --git a/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java b/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java index 965e3f94..8a73e0e9 100644 --- a/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java +++ b/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java @@ -19,6 +19,8 @@ public interface INotificationManager extends IInterface { void createNotificationChannelsForPackage(String pkg, int uid, ParceledListSlice channelsList) throws RemoteException; + void updateNotificationChannelForPackage(String pkg, int uid, NotificationChannel channel); + @RequiresApi(30) NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, String conversationId, boolean includeDeleted) throws RemoteException;