From 4cb22295469c54083152e11746ac387f11513b62 Mon Sep 17 00:00:00 2001 From: Seungha Son Date: Wed, 26 Apr 2017 13:12:14 +0900 Subject: [PATCH] Refactor error handling logic Signed-off-by: Seungha Son Change-Id: I3e1a1a7107a063da86fb2d9d41024cfc4962c183 --- .../Interop/Interop.Badge.cs | 34 ++-- .../Tizen.Applications.Badge.csproj | 167 +++++++++---------- .../Tizen.Applications/BadgeControl.cs | 179 ++++----------------- .../Tizen.Applications/BadgeErrorFactory.cs | 61 +++++++ 4 files changed, 185 insertions(+), 256 deletions(-) create mode 100755 src/Tizen.Applications.Badge/Tizen.Applications/BadgeErrorFactory.cs diff --git a/src/Tizen.Applications.Badge/Interop/Interop.Badge.cs b/src/Tizen.Applications.Badge/Interop/Interop.Badge.cs index 2de3367..53b1b1a 100755 --- a/src/Tizen.Applications.Badge/Interop/Interop.Badge.cs +++ b/src/Tizen.Applications.Badge/Interop/Interop.Badge.cs @@ -16,26 +16,12 @@ using System; using System.Runtime.InteropServices; +using Tizen.Applications; internal static partial class Interop { internal static partial class Badge { - internal enum ErrorCode : int - { - None = Tizen.Internals.Errors.ErrorCode.None, - InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter, - OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory, - PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied, - IoError = Tizen.Internals.Errors.ErrorCode.IoError, - FromDb = -0x01120000 | 0x01, - AlreadyExist = -0x01120000 | 0x02, - FromDbus = -0x01120000 | 0x03, - NotExist = -0x01120000 | 0x04, - ServiceNotReady = -0x01120000 | 0x05, - InvalidPackage = -0x01120000 | 0x06 - } - internal enum Action : uint { Create = 0, @@ -50,30 +36,30 @@ internal static partial class Interop internal delegate void ChangedCallback(Action action, string appId, uint count, IntPtr userData); [DllImport(Libraries.Badge, EntryPoint = "badge_add")] - internal static extern ErrorCode Add(string appId); + internal static extern BadgeError Add(string appId); [DllImport(Libraries.Badge, EntryPoint = "badge_remove")] - internal static extern ErrorCode Remove(string appId); + internal static extern BadgeError Remove(string appId); [DllImport(Libraries.Badge, EntryPoint = "badge_set_count")] - internal static extern ErrorCode SetCount(string appId, uint count); + internal static extern BadgeError SetCount(string appId, uint count); [DllImport(Libraries.Badge, EntryPoint = "badge_get_count")] - internal static extern ErrorCode GetCount(string appId, out uint count); + internal static extern BadgeError GetCount(string appId, out uint count); [DllImport(Libraries.Badge, EntryPoint = "badge_set_display")] - internal static extern ErrorCode SetDisplay(string appId, uint isDisplay); + internal static extern BadgeError SetDisplay(string appId, uint isDisplay); [DllImport(Libraries.Badge, EntryPoint = "badge_get_display")] - internal static extern ErrorCode GetDisplay(string appId, out uint isDisplay); + internal static extern BadgeError GetDisplay(string appId, out uint isDisplay); [DllImport(Libraries.Badge, EntryPoint = "badge_foreach")] - internal static extern ErrorCode Foreach(ForeachCallback callback, IntPtr userData); + internal static extern BadgeError Foreach(ForeachCallback callback, IntPtr userData); [DllImport(Libraries.Badge, EntryPoint = "badge_register_changed_cb")] - internal static extern ErrorCode SetChangedCallback(ChangedCallback callback, IntPtr userData); + internal static extern BadgeError SetChangedCallback(ChangedCallback callback, IntPtr userData); [DllImport(Libraries.Badge, EntryPoint = "badge_unregister_changed_cb")] - internal static extern ErrorCode UnsetChangedCallback(ChangedCallback callback); + internal static extern BadgeError UnsetChangedCallback(ChangedCallback callback); } } diff --git a/src/Tizen.Applications.Badge/Tizen.Applications.Badge.csproj b/src/Tizen.Applications.Badge/Tizen.Applications.Badge.csproj index 0d9135c..7e7bfce 100755 --- a/src/Tizen.Applications.Badge/Tizen.Applications.Badge.csproj +++ b/src/Tizen.Applications.Badge/Tizen.Applications.Badge.csproj @@ -1,83 +1,84 @@ - - - - 14.0 - Debug - AnyCPU - 8.0.30703 - 2.0 - {A667ADA4-E7DB-4E45-9D31-491024750EE1} - Library - Properties - Tizen.Applications.Badge - Tizen.Applications.Badge - 512 - en-US - - - .NETStandard - v1.3 - .NETStandard,Version=v1.3 - false - true - $(NoWarn);1701 - false - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - - - Tizen.Applications.Badge.snk - - - - - - - - - - - - - - - - - - - - - <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory) - <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory) - true - - + + + + 14.0 + Debug + AnyCPU + 8.0.30703 + 2.0 + {A667ADA4-E7DB-4E45-9D31-491024750EE1} + Library + Properties + Tizen.Applications.Badge + Tizen.Applications.Badge + 512 + en-US + + + .NETStandard + v1.3 + .NETStandard,Version=v1.3 + false + true + $(NoWarn);1701 + false + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + + + Tizen.Applications.Badge.snk + + + + + + + + + + + + + + + + + + + + + + <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory) + <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory) + true + + \ No newline at end of file diff --git a/src/Tizen.Applications.Badge/Tizen.Applications/BadgeControl.cs b/src/Tizen.Applications.Badge/Tizen.Applications/BadgeControl.cs index 477cba5..c94f243 100755 --- a/src/Tizen.Applications.Badge/Tizen.Applications/BadgeControl.cs +++ b/src/Tizen.Applications.Badge/Tizen.Applications/BadgeControl.cs @@ -44,19 +44,12 @@ namespace Tizen.Applications s_callback = new Interop.Badge.ChangedCallback(OnChangedEvent); } - Interop.Badge.ErrorCode err = Interop.Badge.SetChangedCallback(s_callback, IntPtr.Zero); - - switch (err) + BadgeError err = Interop.Badge.SetChangedCallback(s_callback, IntPtr.Zero); + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new InvalidOperationException("Invalid parameter at unmanaged code"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.OutOfMemory: - throw new InvalidOperationException("Out-of-memory at unmanaged code"); + throw BadgeErrorFactory.GetException(err, "Failed to add event handler"); } + s_registered = true; } @@ -67,18 +60,10 @@ namespace Tizen.Applications s_changed -= value; if (s_changed == null && s_registered) { - Interop.Badge.ErrorCode err = Interop.Badge.UnsetChangedCallback(s_callback); - - switch (err) + BadgeError err = Interop.Badge.UnsetChangedCallback(s_callback); + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new InvalidOperationException("Invalid parameter at unmanaged code"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.NotExist: - throw new InvalidOperationException("Not exist"); + throw BadgeErrorFactory.GetException(err, "Failed to remove event handler"); } s_callback = null; @@ -100,41 +85,16 @@ namespace Tizen.Applications uint count; uint display; - Interop.Badge.ErrorCode err = Interop.Badge.GetCount(appId, out count); - - switch (err) + BadgeError err = Interop.Badge.GetCount(appId, out count); + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new ArgumentException("Invalid parameter"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.FromDb: - throw new InvalidOperationException("Error from DB"); - - case Interop.Badge.ErrorCode.OutOfMemory: - throw new InvalidOperationException("Out-of-memory at unmanaged code"); + throw BadgeErrorFactory.GetException(err, "Failed to find badge count of " + appId); } err = Interop.Badge.GetDisplay(appId, out display); - - switch (err) + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new ArgumentException("Invalid parameter"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.FromDb: - throw new InvalidOperationException("Error from DB"); - - case Interop.Badge.ErrorCode.OutOfMemory: - throw new InvalidOperationException("Out-of-memory at unmanaged code"); - - case Interop.Badge.ErrorCode.NotExist: - throw new InvalidOperationException("Not exist"); + throw BadgeErrorFactory.GetException(err, "Failed to find badge display of " + appId); } return new Badge(appId, (int)count, display == 0 ? false : true); @@ -150,24 +110,10 @@ namespace Tizen.Applications /// http://tizen.org/privilege/notification public static void Remove(string appId) { - Interop.Badge.ErrorCode err = Interop.Badge.Remove(appId); - - switch (err) + BadgeError err = Interop.Badge.Remove(appId); + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new ArgumentException("Invalid parameter"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.IoError: - throw new InvalidOperationException("Error from I/O"); - - case Interop.Badge.ErrorCode.ServiceNotReady: - throw new InvalidOperationException("Service is not ready"); - - case Interop.Badge.ErrorCode.NotExist: - throw new InvalidOperationException("Not exist"); + throw BadgeErrorFactory.GetException(err, "Failed to Remove badge of " + appId); } } @@ -183,24 +129,10 @@ namespace Tizen.Applications /// http://tizen.org/privilege/notification public static void Add(string appId, int count = 1, bool isDisplay = true) { - Interop.Badge.ErrorCode err = Interop.Badge.Add(appId); - - switch (err) + BadgeError err = Interop.Badge.Add(appId); + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new ArgumentException("Invalid parameter"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.IoError: - throw new InvalidOperationException("Error from I/O"); - - case Interop.Badge.ErrorCode.ServiceNotReady: - throw new InvalidOperationException("Service is not ready"); - - case Interop.Badge.ErrorCode.InvalidPackage: - throw new InvalidOperationException("The caller application is not signed with the certificate of badge application ID"); + throw BadgeErrorFactory.GetException(err, "Failed to add badge of " + appId); } try @@ -225,21 +157,10 @@ namespace Tizen.Applications /// http://tizen.org/privilege/notification public static void Update(string appId, int count) { - Interop.Badge.ErrorCode err = Interop.Badge.SetCount(appId, (uint)count); - - switch (err) + BadgeError err = Interop.Badge.SetCount(appId, (uint)count); + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new ArgumentException("Invalid parameter"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.IoError: - throw new InvalidOperationException("Error from I/O"); - - case Interop.Badge.ErrorCode.ServiceNotReady: - throw new InvalidOperationException("Service is not ready"); + throw BadgeErrorFactory.GetException(err, "Failed to update badge of " + appId); } } @@ -254,21 +175,10 @@ namespace Tizen.Applications /// http://tizen.org/privilege/notification public static void Update(string appId, bool isDisplay) { - Interop.Badge.ErrorCode err = Interop.Badge.SetDisplay(appId, isDisplay ? 1U : 0U); - - switch (err) + BadgeError err = Interop.Badge.SetDisplay(appId, isDisplay ? 1U : 0U); + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new ArgumentException("Invalid parameter"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.IoError: - throw new InvalidOperationException("Error from I/O"); - - case Interop.Badge.ErrorCode.ServiceNotReady: - throw new InvalidOperationException("Service is not ready"); + throw BadgeErrorFactory.GetException(err, "Failed to update badge of " + appId); } } @@ -298,50 +208,21 @@ namespace Tizen.Applications { IList list = new List(); - Interop.Badge.ErrorCode err = Interop.Badge.Foreach((appId, count, userData) => + BadgeError err = Interop.Badge.Foreach((appId, count, userData) => { uint display = 0; - Interop.Badge.ErrorCode e = Interop.Badge.GetDisplay(appId, out display); - switch (e) + BadgeError errGetDisplay = Interop.Badge.GetDisplay(appId, out display); + if (errGetDisplay != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new InvalidOperationException("Invalid parameter at unmanaged code"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.FromDb: - throw new InvalidOperationException("Error from DB"); - - case Interop.Badge.ErrorCode.OutOfMemory: - throw new InvalidOperationException("Out-of-memory at unmanaged code"); - - case Interop.Badge.ErrorCode.NotExist: - throw new InvalidOperationException("Not exist"); - - case Interop.Badge.ErrorCode.ServiceNotReady: - throw new InvalidOperationException("Service is not ready"); + throw BadgeErrorFactory.GetException(errGetDisplay, "Failed to get badges "); } list.Add(new Badge(appId, (int)count, display == 0 ? false : true)); }, IntPtr.Zero); - switch (err) + if (err != BadgeError.None) { - case Interop.Badge.ErrorCode.InvalidParameter: - throw new InvalidOperationException("Invalid parameter at unmanaged code"); - - case Interop.Badge.ErrorCode.PermissionDenied: - throw new UnauthorizedAccessException(); - - case Interop.Badge.ErrorCode.FromDb: - throw new InvalidOperationException("Error from DB"); - - case Interop.Badge.ErrorCode.OutOfMemory: - throw new InvalidOperationException("Out-of-memory at unmanaged code"); - - case Interop.Badge.ErrorCode.NotExist: - throw new InvalidOperationException("Not exist"); + throw BadgeErrorFactory.GetException(err, "Failed to get badges"); } return list; diff --git a/src/Tizen.Applications.Badge/Tizen.Applications/BadgeErrorFactory.cs b/src/Tizen.Applications.Badge/Tizen.Applications/BadgeErrorFactory.cs new file mode 100755 index 0000000..9443298 --- /dev/null +++ b/src/Tizen.Applications.Badge/Tizen.Applications/BadgeErrorFactory.cs @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Tizen.Applications +{ + using System; + using System.Runtime.CompilerServices; + + internal enum BadgeError + { + None = Tizen.Internals.Errors.ErrorCode.None, + InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter, + OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory, + PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied, + IoError = Tizen.Internals.Errors.ErrorCode.IoError, + DbError = -0x01120000 | 0x01, + AlreadyExists = -0x01120000 | 0x02, + DBusError = -0x01120000 | 0x03, + DoesnotExist = -0x01120000 | 0x04, + ServiceError = -0x01120000 | 0x05, + InvalidPackage = -0x01120000 | 0x06 + } + + /// + /// Immutable class for getting information of the badge. + /// + internal static class BadgeErrorFactory + { + private static readonly string LogTag = "Tizen.Applications.Badge"; + + internal static Exception GetException(BadgeError ret, string msg, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) + { + Log.Error(LogTag, memberName + " : " + lineNumber); + + switch (ret) + { + case BadgeError.InvalidParameter: + Log.Error(LogTag, msg); + return new ArgumentException(ret + " error occurred."); + case BadgeError.PermissionDenied: + throw new UnauthorizedAccessException("Permission denied (http://tizen.org/privilege/notification)"); + default: + Log.Error(LogTag, msg); + return new InvalidOperationException(ret + " error occurred."); + } + } + } +} -- 2.7.4