From aa8798d8e5d327201b3822857090c5eeb6e02418 Mon Sep 17 00:00:00 2001 From: sukhyungkang <35091460+sukhyungkang@users.noreply.github.com> Date: Mon, 7 Oct 2024 09:48:31 +0900 Subject: [PATCH] [Notification] Add PairingType for do not disturb app (#6391) Signed-off-by: SukhyungKang Co-authored-by: pjh9216 --- .../Interop/Interop.Notification.cs | 15 +++++ .../Notification.cs | 3 + .../NotificationBinder.cs | 19 ++++++ .../NotificationManager.cs | 61 +++++++++++++++++++ 4 files changed, 98 insertions(+) diff --git a/src/Tizen.Applications.Notification/Interop/Interop.Notification.cs b/src/Tizen.Applications.Notification/Interop/Interop.Notification.cs index 44e6f7e6e19..46988c4ce1d 100644 --- a/src/Tizen.Applications.Notification/Interop/Interop.Notification.cs +++ b/src/Tizen.Applications.Notification/Interop/Interop.Notification.cs @@ -238,6 +238,21 @@ internal static class Notification [DllImport(Libraries.Notification, EntryPoint = "notification_get_check_box")] internal static extern NotificationError GetCheckBox(NotificationSafeHandle handle, out bool flag, out bool checkedValue); + /* apis for do not disturb app */ + internal delegate void DisturbCallback(IntPtr userData); + + [DllImport(Libraries.Notification, EntryPoint = "notification_register_do_not_disturb_app")] + internal static extern NotificationError RegisterDndApp(DisturbCallback cb, IntPtr userData); + + [DllImport(Libraries.Notification, EntryPoint = "notification_unregister_do_not_disturb_app")] + internal static extern NotificationError UnRegisterDndApp(); + + [DllImport(Libraries.Notification, EntryPoint = "notification_set_pairing_type")] + internal static extern NotificationError SetPairingType(NotificationSafeHandle handle, bool pairing); + + [DllImport(Libraries.Notification, EntryPoint = "notification_get_pairing_type")] + internal static extern NotificationError GetPairingType(NotificationSafeHandle handle, out bool pairing); + internal static NotificationError GetText(NotificationSafeHandle handle, NotificationText type, out string text) { NotificationError ret; diff --git a/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/Notification.cs b/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/Notification.cs index 019ea0a9a7e..e5b573b2bd0 100755 --- a/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/Notification.cs +++ b/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/Notification.cs @@ -212,6 +212,9 @@ public int Count [EditorBrowsable(EditorBrowsableState.Never)] public bool CheckedValue { get; set; } = false; + [EditorBrowsable(EditorBrowsableState.Never)] + public bool PairingType { get; set; } = false; + /// /// Gets or sets NotificationSafeHandle. /// diff --git a/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationBinder.cs b/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationBinder.cs index b847e6917a3..750914b164e 100755 --- a/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationBinder.cs +++ b/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationBinder.cs @@ -62,6 +62,11 @@ internal static void BindObject(Notification notification) { Interop.Notification.SetCheckBox(notification.Handle, notification.CheckBox, notification.CheckedValue); } + + if (notification.PairingType == true) + { + Interop.Notification.SetPairingType(notification.Handle, notification.PairingType); + } } internal static void BindSafeHandle(Notification notification) @@ -91,6 +96,7 @@ internal static void BindSafeHandle(Notification notification) BindSafeHandleTag(notification); BindSafeHandleAction(notification); BindSafeHandleCheckBox(notification); + BindSafeHandlePairingType(notification); } private static void BindNotificationSafeHandle(Notification notification) @@ -250,5 +256,18 @@ private static void BindSafeHandleCheckBox(Notification notification) notification.CheckBox = checkbox; notification.CheckedValue = checkedValue; } + + private static void BindSafeHandlePairingType(Notification notification) + { + NotificationError ret; + bool pairingType= false; + + ret = Interop.Notification.GetPairingType(notification.Handle, out pairingType); + if (ret != NotificationError.None) { + Log.Error(Notification.LogTag, "Failed to get paring type info"); + } + + notification.PairingType = pairingType; + } } } diff --git a/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationManager.cs b/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationManager.cs index aadca4ec6b9..2474f7b97a0 100644 --- a/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationManager.cs +++ b/src/Tizen.Applications.Notification/Tizen.Applications.Notifications/NotificationManager.cs @@ -29,6 +29,10 @@ public static class NotificationManager private static Interop.Notification.ResponseEventCallback responseEventCallback; + // for disturb app + private static event EventHandler ResponseDisturbHandler; + private static Interop.Notification.DisturbCallback disturbCallback; + private static void ResponseEventCallback(IntPtr ptr, int type, IntPtr userData) { IntPtr cloned; @@ -48,6 +52,12 @@ private static void ResponseEventCallback(IntPtr ptr, int type, IntPtr userData) ResponseEventHandler?.Invoke(null, eventArgs); } + // for disturb app + private static void DisturbCallback(IntPtr userData) + { + ResponseDisturbHandler?.Invoke(null, EventArgs.Empty); + } + /// /// The event handler for receiving a response event from the notification viewers /// @@ -559,5 +569,56 @@ public static Notification MakeNotification(NotificationSafeHandle handle) return notification; } + + /// + /// The event handler to get + /// + /// 12 + [EditorBrowsable(EditorBrowsableState.Never)] + public static event EventHandler DisturbReceived + { + add + { + if (disturbCallback == null) + { + disturbCallback = new Interop.Notification.DisturbCallback(DisturbCallback); + } + + ResponseDisturbHandler += value; + } + + remove + { + if (ResponseDisturbHandler != null && ResponseDisturbHandler.GetInvocationList().Length > 0) + { + NotificationError ret = Interop.Notification.UnRegisterDndApp(); + if (ret != NotificationError.None) + { + throw NotificationErrorFactory.GetException(ret, "register do not disturb app failed"); + } + + ResponseDisturbHandler -= value; + } + } + } + + /// + /// Register do not disturb app + /// + /// 12 + [EditorBrowsable(EditorBrowsableState.Never)] + public static void RegisterDoNotDisturbApp() + { + if (ResponseDisturbHandler != null && ResponseDisturbHandler.GetInvocationList().Length > 0) + { + NotificationError ret = Interop.Notification.RegisterDndApp(disturbCallback, IntPtr.Zero); + if (ret != NotificationError.None) + { + throw NotificationErrorFactory.GetException(ret, "register do not disturb app failed"); + } + } else { + throw NotificationErrorFactory.GetException(NotificationError.InvalidOperation, "Disturb callback not exist"); + } + } } }