From e493824e0ee5c1063e6f0934814530a0511351d3 Mon Sep 17 00:00:00 2001 From: Dinesh Dwivedi Date: Tue, 5 Jul 2016 17:13:25 +0530 Subject: [PATCH] [Package-Manager] Fixed issue in set EventStatus code Change-Id: If7d9de0f460bacd480ea959d3ef1280c0d28149c Signed-off-by: Dinesh Dwivedi --- .../Interop/Interop.PackageManager.cs | 8 +- .../Tizen.Applications/PackageManager.cs | 101 +++++++++++---------- 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/Tizen.Applications/Interop/Interop.PackageManager.cs b/Tizen.Applications/Interop/Interop.PackageManager.cs index 5c102de..6705294 100644 --- a/Tizen.Applications/Interop/Interop.PackageManager.cs +++ b/Tizen.Applications/Interop/Interop.PackageManager.cs @@ -50,10 +50,10 @@ internal static partial class Interop [Flags] internal enum EventStatus { - All = 0, - Install = 1, - Unstall = 2, - Upgrade = 4, + All = 0x00, + Install = 0x01, + Unstall = 0x02, + Upgrade = 0x24, } internal enum EventType diff --git a/Tizen.Applications/Tizen.Applications/PackageManager.cs b/Tizen.Applications/Tizen.Applications/PackageManager.cs index 31c3bda..f7e1287 100755 --- a/Tizen.Applications/Tizen.Applications/PackageManager.cs +++ b/Tizen.Applications/Tizen.Applications/PackageManager.cs @@ -38,13 +38,15 @@ namespace Tizen.Applications { add { - RegisterPackageManagerEventIfNeeded(GetFlaggedEventStatus(Interop.PackageManager.EventStatus.Install)); + SetPackageManagerEventStatus(); + RegisterPackageManagerEventIfNeeded(); s_installEventHandler += value; } remove { s_installEventHandler -= value; - UnregisterPackageManagerEventIfNeeded(GetUnflaggedEventStatus(Interop.PackageManager.EventStatus.Install)); + UnregisterPackageManagerEventIfNeeded(); + SetPackageManagerEventStatus(); } } @@ -55,13 +57,15 @@ namespace Tizen.Applications { add { - RegisterPackageManagerEventIfNeeded(GetFlaggedEventStatus(Interop.PackageManager.EventStatus.Unstall)); + SetPackageManagerEventStatus(); + RegisterPackageManagerEventIfNeeded(); s_uninstallEventHandler += value; } remove { s_uninstallEventHandler -= value; - UnregisterPackageManagerEventIfNeeded(GetUnflaggedEventStatus(Interop.PackageManager.EventStatus.Unstall)); + UnregisterPackageManagerEventIfNeeded(); + SetPackageManagerEventStatus(); } } @@ -72,13 +76,31 @@ namespace Tizen.Applications { add { - RegisterPackageManagerEventIfNeeded(GetFlaggedEventStatus(Interop.PackageManager.EventStatus.Upgrade)); + SetPackageManagerEventStatus(); + RegisterPackageManagerEventIfNeeded(); s_updateEventHandler += value; } remove { s_updateEventHandler -= value; - UnregisterPackageManagerEventIfNeeded(GetFlaggedEventStatus(Interop.PackageManager.EventStatus.Upgrade)); + UnregisterPackageManagerEventIfNeeded(); + SetPackageManagerEventStatus(); + } + } + + private static SafePackageManagerHandle Handle + { + get + { + if (s_handle.IsInvalid) + { + var err = Interop.PackageManager.PackageManagerCreate(out s_handle); + if (err != Interop.PackageManager.ErrorCode.None) + { + Log.Warn(LogTag, string.Format("Failed to create package manager handle. err = {0}", err)); + } + } + return s_handle; } } @@ -370,17 +392,30 @@ namespace Tizen.Applications return result; } - private static Interop.PackageManager.EventStatus GetFlaggedEventStatus(Interop.PackageManager.EventStatus newEvent) + private static void SetPackageManagerEventStatus() { - return s_eventStatus | newEvent; - } + if (Handle.IsInvalid) return; - private static Interop.PackageManager.EventStatus GetUnflaggedEventStatus(Interop.PackageManager.EventStatus oldEvent) - { - return s_eventStatus & (~oldEvent); + Interop.PackageManager.EventStatus eventStatus = Interop.PackageManager.EventStatus.All; + if (s_installEventHandler != null) eventStatus |= Interop.PackageManager.EventStatus.Install; + if (s_uninstallEventHandler != null) eventStatus |= Interop.PackageManager.EventStatus.Unstall; + if (s_updateEventHandler != null) eventStatus |= Interop.PackageManager.EventStatus.Upgrade; + + var err = Interop.PackageManager.ErrorCode.None; + if (s_eventStatus != eventStatus) + { + err = Interop.PackageManager.PackageManagerSetEvenStatus(Handle, eventStatus); + if (err == Interop.PackageManager.ErrorCode.None) + { + s_eventStatus = eventStatus; + Log.Debug(LogTag, string.Format("New Event Status flag: {0}", s_eventStatus)); + return; + } + } + Log.Debug(LogTag, string.Format("Failed to set flag for {0} event. err = {1}", eventStatus, err)); } - private static void RegisterPackageManagerEventIfNeeded(Interop.PackageManager.EventStatus eventStatus) + private static void RegisterPackageManagerEventIfNeeded() { if (s_installEventHandler != null || s_uninstallEventHandler != null || s_updateEventHandler != null) { @@ -412,26 +447,9 @@ namespace Tizen.Applications } }; - if (s_handle.IsInvalid) + if (!Handle.IsInvalid) { - err = Interop.PackageManager.PackageManagerCreate(out s_handle); - if (err != Interop.PackageManager.ErrorCode.None) - { - Log.Warn(LogTag, string.Format("Failed to create package manager handle. err = {0}", err)); - } - } - - if (!s_handle.IsInvalid) - { - if (s_eventStatus != eventStatus) - { - err = Interop.PackageManager.PackageManagerSetEvenStatus(s_handle, eventStatus); - if (err == Interop.PackageManager.ErrorCode.None) - { - s_eventStatus = eventStatus; - } - } - err = Interop.PackageManager.PackageManagerSetEvent(s_handle, s_packageManagerEventCallback, IntPtr.Zero); + err = Interop.PackageManager.PackageManagerSetEvent(Handle, s_packageManagerEventCallback, IntPtr.Zero); } if (err != Interop.PackageManager.ErrorCode.None) { @@ -439,27 +457,14 @@ namespace Tizen.Applications } } - private static void UnregisterPackageManagerEventIfNeeded(Interop.PackageManager.EventStatus eventStatus) + private static void UnregisterPackageManagerEventIfNeeded() { - if (s_installEventHandler != null || s_uninstallEventHandler != null || s_updateEventHandler != null) + if (Handle.IsInvalid || s_installEventHandler != null || s_uninstallEventHandler != null || s_updateEventHandler != null) { return; } - if (s_handle.IsInvalid) - { - return; - } - - var err = Interop.PackageManager.PackageManagerUnsetEvent(s_handle); - if (s_eventStatus != eventStatus) - { - err = Interop.PackageManager.PackageManagerSetEvenStatus(s_handle, eventStatus); - if (err == Interop.PackageManager.ErrorCode.None) - { - s_eventStatus = eventStatus; - } - } + var err = Interop.PackageManager.PackageManagerUnsetEvent(Handle); if (err != Interop.PackageManager.ErrorCode.None) { throw PackageManagerErrorFactory.GetException(err, "Failed to unregister package manager event event."); -- 2.7.4