From cee53da59d23edd0924c69e722ab6322af1b3460 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Wed, 22 Nov 2017 20:35:22 +0900 Subject: [PATCH] [Packagemanager] Fix managing delegate lifetime Change-Id: I5c44ebe3a43ea83b7cb850dfa155f13aebf577d1 Signed-off-by: Sangyoon Jang --- .../Tizen.Applications/PackageManager.cs | 70 +++++++++++----------- 1 file changed, 36 insertions(+), 34 deletions(-) mode change 100755 => 100644 src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs diff --git a/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs old mode 100755 new mode 100644 index a4a999c..2b10511 --- a/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs +++ b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs @@ -1101,42 +1101,11 @@ namespace Tizen.Applications private static void RegisterPackageManagerEventIfNeeded() { - if (s_installEventHandler != null && s_uninstallEventHandler != null && s_updateEventHandler != null && s_moveEventHandler != null && s_clearDataEventHandler != null) - { + if (s_packageManagerEventCallback != null) return; - } var err = Interop.PackageManager.ErrorCode.None; - s_packageManagerEventCallback = (packageType, packageId, eventType, eventState, progress, error, user_data) => - { - try - { - if (eventType == Interop.PackageManager.EventType.Install) - { - s_installEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); - } - else if (eventType == Interop.PackageManager.EventType.Uninstall) - { - s_uninstallEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); - } - else if (eventType == Interop.PackageManager.EventType.Update) - { - s_updateEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); - } - else if (eventType == Interop.PackageManager.EventType.Move) - { - s_moveEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); - } - else if (eventType == Interop.PackageManager.EventType.ClearData) - { - s_clearDataEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); - } - } - catch (Exception e) - { - Log.Warn(LogTag, e.Message); - } - }; + s_packageManagerEventCallback = new Interop.PackageManager.PackageManagerEventCallback(InternalEventCallback); if (!Handle.IsInvalid) { @@ -1155,13 +1124,46 @@ namespace Tizen.Applications } } + private static void InternalEventCallback(string packageType, string packageId, Interop.PackageManager.EventType eventType, Interop.PackageManager.PackageEventState eventState, int progress, Interop.PackageManager.ErrorCode error, IntPtr user_data) + { + try + { + if (eventType == Interop.PackageManager.EventType.Install) + { + s_installEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + } + else if (eventType == Interop.PackageManager.EventType.Uninstall) + { + s_uninstallEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + } + else if (eventType == Interop.PackageManager.EventType.Update) + { + s_updateEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + } + else if (eventType == Interop.PackageManager.EventType.Move) + { + s_moveEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + } + else if (eventType == Interop.PackageManager.EventType.ClearData) + { + s_clearDataEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + } + } + catch (Exception e) + { + Log.Warn(LogTag, e.Message); + } + } + private static void UnregisterPackageManagerEventIfNeeded() { - if (Handle.IsInvalid || s_installEventHandler != null || s_uninstallEventHandler != null || s_updateEventHandler != null || s_moveEventHandler != null || s_clearDataEventHandler != null) + if (Handle.IsInvalid || s_packageManagerEventCallback == null || s_installEventHandler != null || s_uninstallEventHandler != null || s_updateEventHandler != null || s_moveEventHandler != null || s_clearDataEventHandler != null) { return; } + s_packageManagerEventCallback = null; + var err = Interop.PackageManager.PackageManagerUnsetEvent(Handle); if (err != Interop.PackageManager.ErrorCode.None) { -- 2.7.4