From 7a623a1459805867a88c71f4be13683e33412471 Mon Sep 17 00:00:00 2001 From: Tomasz Cielecki Date: Tue, 29 Mar 2016 17:38:24 +0200 Subject: [PATCH 1/4] Added Permission plugin wrapper --- MvvmCross.Plugins.sln | 40 +++++++++++ Permissions/Core/IMvxPermissions.cs | 9 +++ .../Core/MvvmCross.Plugins.Permissions.csproj | 71 +++++++++++++++++++ Permissions/Core/MvxPermissions.cs | 25 +++++++ Permissions/Core/PluginLoader.cs | 29 ++++++++ Permissions/Core/Properties/AssemblyInfo.cs | 30 ++++++++ Permissions/Core/packages.config | 6 ++ 7 files changed, 210 insertions(+) create mode 100644 Permissions/Core/IMvxPermissions.cs create mode 100644 Permissions/Core/MvvmCross.Plugins.Permissions.csproj create mode 100644 Permissions/Core/MvxPermissions.cs create mode 100644 Permissions/Core/PluginLoader.cs create mode 100644 Permissions/Core/Properties/AssemblyInfo.cs create mode 100644 Permissions/Core/packages.config diff --git a/MvvmCross.Plugins.sln b/MvvmCross.Plugins.sln index 7e74ddab..1a4b4b20 100644 --- a/MvvmCross.Plugins.sln +++ b/MvvmCross.Plugins.sln @@ -295,6 +295,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResxLocalization", "ResxLoc EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.ResxLocalization", "ResxLocalization\MvvmCross.Plugins.ResxLocalization\MvvmCross.Plugins.ResxLocalization.csproj", "{8AE35C8E-CC76-4E4C-98F8-CA68FBCB550B}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Permissions", "Permissions", "{7C59A18B-E10F-41EA-9CF0-1A45FF02F901}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.Permissions", "Permissions\Core\MvvmCross.Plugins.Permissions.csproj", "{B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.Permissions.Droid", "Permissions\Droid\MvvmCross.Plugins.Permissions.Droid.csproj", "{61248C50-1F7A-492E-8E6A-30D4D54423CB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2243,6 +2249,38 @@ Global {8AE35C8E-CC76-4E4C-98F8-CA68FBCB550B}.Release|x64.Build.0 = Release|Any CPU {8AE35C8E-CC76-4E4C-98F8-CA68FBCB550B}.Release|x86.ActiveCfg = Release|Any CPU {8AE35C8E-CC76-4E4C-98F8-CA68FBCB550B}.Release|x86.Build.0 = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|ARM.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|ARM.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x64.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x64.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x86.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x86.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|Any CPU.Build.0 = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|ARM.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|ARM.Build.0 = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x64.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x64.Build.0 = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x86.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x86.Build.0 = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|ARM.ActiveCfg = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|ARM.Build.0 = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x64.ActiveCfg = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x64.Build.0 = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x86.ActiveCfg = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x86.Build.0 = Debug|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|Any CPU.Build.0 = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|ARM.ActiveCfg = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|ARM.Build.0 = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x64.ActiveCfg = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x64.Build.0 = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x86.ActiveCfg = Release|Any CPU + {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2369,5 +2407,7 @@ Global {BFD90EC2-CBDA-4198-81DA-1A13AD2803E1} = {D9F520C0-4C25-465B-9C16-CADDDE3E72B8} {19B4DBB9-F476-433E-9DD2-37DEFE2CECA6} = {9B45C8EC-18B9-4A88-950E-8D8FF8FAA1DA} {8AE35C8E-CC76-4E4C-98F8-CA68FBCB550B} = {8D6F4620-D8BD-4E14-B698-4998138EEA32} + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841} = {7C59A18B-E10F-41EA-9CF0-1A45FF02F901} + {61248C50-1F7A-492E-8E6A-30D4D54423CB} = {7C59A18B-E10F-41EA-9CF0-1A45FF02F901} EndGlobalSection EndGlobal diff --git a/Permissions/Core/IMvxPermissions.cs b/Permissions/Core/IMvxPermissions.cs new file mode 100644 index 00000000..5909fdc4 --- /dev/null +++ b/Permissions/Core/IMvxPermissions.cs @@ -0,0 +1,9 @@ +using Plugin.Permissions.Abstractions; + +namespace MvvmCross.Plugins.Permissions +{ + public interface IMvxPermissions : IPermissions + { + + } +} diff --git a/Permissions/Core/MvvmCross.Plugins.Permissions.csproj b/Permissions/Core/MvvmCross.Plugins.Permissions.csproj new file mode 100644 index 00000000..70c7dac3 --- /dev/null +++ b/Permissions/Core/MvvmCross.Plugins.Permissions.csproj @@ -0,0 +1,71 @@ + + + + + 10.0 + Debug + AnyCPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841} + Library + Properties + MvvmCross.Plugins.Permissions + MvvmCross.Plugins.Permissions + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile111 + v4.5 + + + true + full + false + ..\..\bin\Debug\Mvx\Portable\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\bin\Release\Mvx\Portable\ + TRACE + prompt + 4 + + + + + + + + + + ..\..\packages\MvvmCross.Core.4.1.0\lib\portable-net45+win+wpa81+wp80\MvvmCross.Core.dll + True + + + ..\..\packages\MvvmCross.Platform.4.1.0\lib\portable-net45+win+wpa81+wp80\MvvmCross.Platform.dll + True + + + ..\..\packages\Plugin.Permissions.1.1.7\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+UAP10\Plugin.Permissions.dll + True + + + ..\..\packages\Plugin.Permissions.1.1.7\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+UAP10\Plugin.Permissions.Abstractions.dll + True + + + + + + + + \ No newline at end of file diff --git a/Permissions/Core/MvxPermissions.cs b/Permissions/Core/MvxPermissions.cs new file mode 100644 index 00000000..c479e109 --- /dev/null +++ b/Permissions/Core/MvxPermissions.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Plugin.Permissions; +using Plugin.Permissions.Abstractions; + +namespace MvvmCross.Plugins.Permissions +{ + public class MvxPermissions : IMvxPermissions + { + public Task ShouldShowRequestPermissionRationaleAsync(Permission permission) + { + return CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(permission); + } + + public Task CheckPermissionStatusAsync(Permission permission) + { + return CrossPermissions.Current.CheckPermissionStatusAsync(permission); + } + + public Task> RequestPermissionsAsync(params Permission[] permissions) + { + return CrossPermissions.Current.RequestPermissionsAsync(permissions); + } + } +} \ No newline at end of file diff --git a/Permissions/Core/PluginLoader.cs b/Permissions/Core/PluginLoader.cs new file mode 100644 index 00000000..c037b50c --- /dev/null +++ b/Permissions/Core/PluginLoader.cs @@ -0,0 +1,29 @@ +// PluginLoader.cs +// (c) Copyright Cirrious Ltd. http://www.cirrious.com +// MvvmCross is licensed using Microsoft Public License (Ms-PL) +// Contributions and inspirations noted in readme.md and license.txt + +using MvvmCross.Platform; +using MvvmCross.Platform.Plugins; + +namespace MvvmCross.Plugins.Permissions +{ + public class PluginLoader + : IMvxPluginLoader + { + public static readonly PluginLoader Instance = new PluginLoader(); + + private bool _loaded; + + public void EnsureLoaded() + { + if (_loaded) + { + return; + } + + Mvx.RegisterSingleton(new MvxPermissions()); + _loaded = true; + } + } +} \ No newline at end of file diff --git a/Permissions/Core/Properties/AssemblyInfo.cs b/Permissions/Core/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..a3b8df28 --- /dev/null +++ b/Permissions/Core/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Core")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Core")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Permissions/Core/packages.config b/Permissions/Core/packages.config new file mode 100644 index 00000000..79db3f9e --- /dev/null +++ b/Permissions/Core/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From a86fb8c15aa4db8538e2ebc8ca2ed8f7c17717ef Mon Sep 17 00:00:00 2001 From: Tomasz Cielecki Date: Tue, 29 Mar 2016 17:43:24 +0200 Subject: [PATCH 2/4] Remember to save sln file... --- MvvmCross.Plugins.sln | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/MvvmCross.Plugins.sln b/MvvmCross.Plugins.sln index 1a4b4b20..8c940a14 100644 --- a/MvvmCross.Plugins.sln +++ b/MvvmCross.Plugins.sln @@ -299,8 +299,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Permissions", "Permissions" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.Permissions", "Permissions\Core\MvvmCross.Plugins.Permissions.csproj", "{B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.Permissions.Droid", "Permissions\Droid\MvvmCross.Plugins.Permissions.Droid.csproj", "{61248C50-1F7A-492E-8E6A-30D4D54423CB}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2265,22 +2263,6 @@ Global {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x64.Build.0 = Release|Any CPU {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x86.ActiveCfg = Release|Any CPU {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x86.Build.0 = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|ARM.Build.0 = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x64.ActiveCfg = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x64.Build.0 = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Debug|x86.Build.0 = Debug|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|Any CPU.Build.0 = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|ARM.ActiveCfg = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|ARM.Build.0 = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x64.ActiveCfg = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x64.Build.0 = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x86.ActiveCfg = Release|Any CPU - {61248C50-1F7A-492E-8E6A-30D4D54423CB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2408,6 +2390,5 @@ Global {19B4DBB9-F476-433E-9DD2-37DEFE2CECA6} = {9B45C8EC-18B9-4A88-950E-8D8FF8FAA1DA} {8AE35C8E-CC76-4E4C-98F8-CA68FBCB550B} = {8D6F4620-D8BD-4E14-B698-4998138EEA32} {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841} = {7C59A18B-E10F-41EA-9CF0-1A45FF02F901} - {61248C50-1F7A-492E-8E6A-30D4D54423CB} = {7C59A18B-E10F-41EA-9CF0-1A45FF02F901} EndGlobalSection EndGlobal From 696165b4f3adf57364f44ee324e2d0f748957c83 Mon Sep 17 00:00:00 2001 From: Tomasz Cielecki Date: Sun, 25 Sep 2016 14:16:59 +0200 Subject: [PATCH 3/4] Add back Permissions plugin to sln --- MvvmCross.Plugins.sln | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/MvvmCross.Plugins.sln b/MvvmCross.Plugins.sln index 4c2f3332..8f718ba2 100644 --- a/MvvmCross.Plugins.sln +++ b/MvvmCross.Plugins.sln @@ -305,6 +305,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.Email.Win EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.Email.WindowsUWP", "Email\MvvmCross.Plugins.Email.WindowsUWP\MvvmCross.Plugins.Email.WindowsUWP.csproj", "{645DE858-1C4C-4F7B-98A5-070EE1D331E6}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Permissions", "Permissions", "{8209CF8F-801C-4982-A398-A3EAF99D4BCC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.Permissions", "Permissions\Core\MvvmCross.Plugins.Permissions.csproj", "{B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2333,6 +2337,22 @@ Global {645DE858-1C4C-4F7B-98A5-070EE1D331E6}.Release|x64.Build.0 = Release|x64 {645DE858-1C4C-4F7B-98A5-070EE1D331E6}.Release|x86.ActiveCfg = Release|x86 {645DE858-1C4C-4F7B-98A5-070EE1D331E6}.Release|x86.Build.0 = Release|x86 + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|ARM.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|ARM.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x64.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x64.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x86.ActiveCfg = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Debug|x86.Build.0 = Debug|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|Any CPU.Build.0 = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|ARM.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|ARM.Build.0 = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x64.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x64.Build.0 = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x86.ActiveCfg = Release|Any CPU + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2464,5 +2484,6 @@ Global {0B08507A-DA49-4069-B8CF-0FB0B7895B21} = {EB7A7EA9-995D-44EC-A4C9-7936BD6DF759} {D381A63C-994E-48FB-A32E-B3667BFEFC84} = {83DC5338-32A2-47D1-974E-1F3ACC600A03} {645DE858-1C4C-4F7B-98A5-070EE1D331E6} = {83DC5338-32A2-47D1-974E-1F3ACC600A03} + {B3B46E7E-CDA2-4297-8700-6E8EBBE3A841} = {8209CF8F-801C-4982-A398-A3EAF99D4BCC} EndGlobalSection EndGlobal From 70eeb094a780da0b7264dc2ac525b4047522c571 Mon Sep 17 00:00:00 2001 From: Tomasz Cielecki Date: Sun, 25 Sep 2016 14:33:43 +0200 Subject: [PATCH 4/4] Wrap IPermissions and don't expose directly. Gives possibility of changing wrapped plugin. --- Permissions/Core/IMvxPermissions.cs | 9 +- .../Core/MvvmCross.Plugins.Permissions.csproj | 3 + Permissions/Core/MvxPermission.cs | 18 +++ Permissions/Core/MvxPermissionExtensions.cs | 103 ++++++++++++++++++ Permissions/Core/MvxPermissionStatus.cs | 11 ++ Permissions/Core/MvxPermissions.cs | 18 +-- 6 files changed, 152 insertions(+), 10 deletions(-) create mode 100644 Permissions/Core/MvxPermission.cs create mode 100644 Permissions/Core/MvxPermissionExtensions.cs create mode 100644 Permissions/Core/MvxPermissionStatus.cs diff --git a/Permissions/Core/IMvxPermissions.cs b/Permissions/Core/IMvxPermissions.cs index 5909fdc4..804fbecd 100644 --- a/Permissions/Core/IMvxPermissions.cs +++ b/Permissions/Core/IMvxPermissions.cs @@ -1,9 +1,12 @@ -using Plugin.Permissions.Abstractions; +using System.Collections.Generic; +using System.Threading.Tasks; namespace MvvmCross.Plugins.Permissions { - public interface IMvxPermissions : IPermissions + public interface IMvxPermissions { - + Task ShouldShowRequestPermissionRationaleAsync(MvxPermission permission); + Task CheckPermissionStatusAsync(MvxPermission permission); + Task> RequestPermissionsAsync(params MvxPermission[] permissions); } } diff --git a/Permissions/Core/MvvmCross.Plugins.Permissions.csproj b/Permissions/Core/MvvmCross.Plugins.Permissions.csproj index 70c7dac3..edb7c5cc 100644 --- a/Permissions/Core/MvvmCross.Plugins.Permissions.csproj +++ b/Permissions/Core/MvvmCross.Plugins.Permissions.csproj @@ -35,7 +35,10 @@ + + + diff --git a/Permissions/Core/MvxPermission.cs b/Permissions/Core/MvxPermission.cs new file mode 100644 index 00000000..f10330dc --- /dev/null +++ b/Permissions/Core/MvxPermission.cs @@ -0,0 +1,18 @@ +namespace MvvmCross.Plugins.Permissions +{ + public enum MvxPermission + { + Unknown, + Calendar, + Camera, + Contacts, + Location, + Microphone, + Phone, + Photos, + Reminders, + Sensors, + Sms, + Storage + } +} \ No newline at end of file diff --git a/Permissions/Core/MvxPermissionExtensions.cs b/Permissions/Core/MvxPermissionExtensions.cs new file mode 100644 index 00000000..9f525c9f --- /dev/null +++ b/Permissions/Core/MvxPermissionExtensions.cs @@ -0,0 +1,103 @@ +using Plugin.Permissions.Abstractions; + +namespace MvvmCross.Plugins.Permissions +{ + public static class MvxPermissionExtensions + { + public static Permission ToPermission(this MvxPermission permission) + { + switch (permission) + { + case MvxPermission.Calendar: + return Permission.Calendar; + case MvxPermission.Camera: + return Permission.Camera; + case MvxPermission.Contacts: + return Permission.Contacts; + case MvxPermission.Location: + return Permission.Location; + case MvxPermission.Microphone: + return Permission.Microphone; + case MvxPermission.Phone: + return Permission.Phone; + case MvxPermission.Photos: + return Permission.Photos; + case MvxPermission.Reminders: + return Permission.Reminders; + case MvxPermission.Sensors: + return Permission.Sensors; + case MvxPermission.Sms: + return Permission.Sms; + case MvxPermission.Storage: + return Permission.Storage; + default: + return Permission.Unknown; + } + } + + public static PermissionStatus ToPermissionStatus(this MvxPermissionStatus permissionStatus) + { + switch (permissionStatus) + { + case MvxPermissionStatus.Denied: + return PermissionStatus.Denied; + case MvxPermissionStatus.Disabled: + return PermissionStatus.Disabled; + case MvxPermissionStatus.Granted: + return PermissionStatus.Granted; + case MvxPermissionStatus.Restricted: + return PermissionStatus.Restricted; + default: + return PermissionStatus.Unknown; + } + } + + public static MvxPermission ToMvxPermission(this Permission permission) + { + switch (permission) + { + case Permission.Calendar: + return MvxPermission.Calendar; + case Permission.Camera: + return MvxPermission.Camera; + case Permission.Contacts: + return MvxPermission.Contacts; + case Permission.Location: + return MvxPermission.Location; + case Permission.Microphone: + return MvxPermission.Microphone; + case Permission.Phone: + return MvxPermission.Phone; + case Permission.Photos: + return MvxPermission.Photos; + case Permission.Reminders: + return MvxPermission.Reminders; + case Permission.Sensors: + return MvxPermission.Sensors; + case Permission.Sms: + return MvxPermission.Sms; + case Permission.Storage: + return MvxPermission.Storage; + default: + return MvxPermission.Unknown; + } + } + + public static MvxPermissionStatus ToMvxPermissionStatus(this PermissionStatus permissionStatus) + { + switch (permissionStatus) + { + case PermissionStatus.Denied: + return MvxPermissionStatus.Denied; + case PermissionStatus.Disabled: + return MvxPermissionStatus.Disabled; + case PermissionStatus.Granted: + return MvxPermissionStatus.Granted; + case PermissionStatus.Restricted: + return MvxPermissionStatus.Restricted; + default: + return MvxPermissionStatus.Unknown; + } + } + } +} \ No newline at end of file diff --git a/Permissions/Core/MvxPermissionStatus.cs b/Permissions/Core/MvxPermissionStatus.cs new file mode 100644 index 00000000..4f393b00 --- /dev/null +++ b/Permissions/Core/MvxPermissionStatus.cs @@ -0,0 +1,11 @@ +namespace MvvmCross.Plugins.Permissions +{ + public enum MvxPermissionStatus + { + Denied, + Disabled, + Granted, + Restricted, + Unknown + } +} \ No newline at end of file diff --git a/Permissions/Core/MvxPermissions.cs b/Permissions/Core/MvxPermissions.cs index c479e109..8e6db403 100644 --- a/Permissions/Core/MvxPermissions.cs +++ b/Permissions/Core/MvxPermissions.cs @@ -1,25 +1,29 @@ using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Plugin.Permissions; -using Plugin.Permissions.Abstractions; namespace MvvmCross.Plugins.Permissions { public class MvxPermissions : IMvxPermissions { - public Task ShouldShowRequestPermissionRationaleAsync(Permission permission) + public Task ShouldShowRequestPermissionRationaleAsync(MvxPermission permission) { - return CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(permission); + return CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(permission.ToPermission()); } - public Task CheckPermissionStatusAsync(Permission permission) + public async Task CheckPermissionStatusAsync(MvxPermission permission) { - return CrossPermissions.Current.CheckPermissionStatusAsync(permission); + var status = await CrossPermissions.Current.CheckPermissionStatusAsync(permission.ToPermission()).ConfigureAwait(false); + return status.ToMvxPermissionStatus(); } - public Task> RequestPermissionsAsync(params Permission[] permissions) + public async Task> RequestPermissionsAsync(params MvxPermission[] permissions) { - return CrossPermissions.Current.RequestPermissionsAsync(permissions); + var nativePermissions = permissions.Select(p => p.ToPermission()).ToArray(); + + var status = await CrossPermissions.Current.RequestPermissionsAsync(nativePermissions).ConfigureAwait(false); + return status.ToDictionary(k => k.Key.ToMvxPermission(), v => v.Value.ToMvxPermissionStatus()); } } } \ No newline at end of file