diff --git a/bitwarden-mobile.sln b/bitwarden-mobile.sln index 0ded8d178..c957391e1 100644 --- a/bitwarden-mobile.sln +++ b/bitwarden-mobile.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26430.13 +VisualStudioVersion = 15.0.26730.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Android", "src\Android\Android.csproj", "{04B18ED2-B76D-4947-8474-191F8FD2B5E0}" EndProject @@ -29,7 +29,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "google", "google", "{2E3996 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Publisher", "store\google\Publisher\Publisher.csproj", "{428CACAB-CC26-4F41-9062-1E4A9BC82640}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UWP", "src\UWP\UWP.csproj", "{3A2D5669-ED71-4F2B-BA85-2D36BAA05141}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "UWP.Images", "src\UWP.Images\UWP.Images.shproj", "{0BE54BBB-7772-4289-BD51-1FDBB0CC2446}" +EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + src\UWP.Images\UWP.Images.projitems*{0be54bbb-7772-4289-bd51-1fdbb0cc2446}*SharedItemsImports = 13 + src\UWP.Images\UWP.Images.projitems*{3a2d5669-ed71-4f2b-ba85-2d36baa05141}*SharedItemsImports = 4 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU Ad-Hoc|ARM = Ad-Hoc|ARM @@ -94,8 +102,6 @@ Global {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|iPhone.ActiveCfg = Debug|Any CPU {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|x64.ActiveCfg = Debug|Any CPU - {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|x64.Build.0 = Debug|Any CPU - {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|x64.Deploy.0 = Debug|Any CPU {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|x86.ActiveCfg = Debug|Any CPU {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|x86.Build.0 = Debug|Any CPU {04B18ED2-B76D-4947-8474-191F8FD2B5E0}.Debug|x86.Deploy.0 = Debug|Any CPU @@ -136,7 +142,6 @@ Global {1F78403F-9A28-405B-9289-B9DBEB55F074}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator {1F78403F-9A28-405B-9289-B9DBEB55F074}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator {1F78403F-9A28-405B-9289-B9DBEB55F074}.Debug|x64.ActiveCfg = Debug|iPhone - {1F78403F-9A28-405B-9289-B9DBEB55F074}.Debug|x64.Build.0 = Debug|iPhone {1F78403F-9A28-405B-9289-B9DBEB55F074}.Debug|x86.ActiveCfg = Debug|iPhone {1F78403F-9A28-405B-9289-B9DBEB55F074}.Debug|x86.Build.0 = Debug|iPhone {1F78403F-9A28-405B-9289-B9DBEB55F074}.Release|Any CPU.ActiveCfg = Release|iPhone @@ -222,7 +227,6 @@ Global {A300DCE1-8D10-4267-B96A-CB01AEB7C220}.Debug|iPhone.ActiveCfg = Debug|Any CPU {A300DCE1-8D10-4267-B96A-CB01AEB7C220}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU {A300DCE1-8D10-4267-B96A-CB01AEB7C220}.Debug|x64.ActiveCfg = Debug|Any CPU - {A300DCE1-8D10-4267-B96A-CB01AEB7C220}.Debug|x64.Build.0 = Debug|Any CPU {A300DCE1-8D10-4267-B96A-CB01AEB7C220}.Debug|x86.ActiveCfg = Debug|Any CPU {A300DCE1-8D10-4267-B96A-CB01AEB7C220}.Debug|x86.Build.0 = Debug|Any CPU {A300DCE1-8D10-4267-B96A-CB01AEB7C220}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -258,7 +262,6 @@ Global {32F5A2D6-F54D-4DA1-AE26-0A980D48F422}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator {32F5A2D6-F54D-4DA1-AE26-0A980D48F422}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator {32F5A2D6-F54D-4DA1-AE26-0A980D48F422}.Debug|x64.ActiveCfg = Debug|iPhone - {32F5A2D6-F54D-4DA1-AE26-0A980D48F422}.Debug|x64.Build.0 = Debug|iPhone {32F5A2D6-F54D-4DA1-AE26-0A980D48F422}.Debug|x86.ActiveCfg = Debug|iPhone {32F5A2D6-F54D-4DA1-AE26-0A980D48F422}.Debug|x86.Build.0 = Debug|iPhone {32F5A2D6-F54D-4DA1-AE26-0A980D48F422}.Release|Any CPU.ActiveCfg = Release|iPhone @@ -300,7 +303,6 @@ Global {B2538ADA-B605-4D6F-ACD2-62A409680F84}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU {B2538ADA-B605-4D6F-ACD2-62A409680F84}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU {B2538ADA-B605-4D6F-ACD2-62A409680F84}.Debug|x64.ActiveCfg = Debug|Any CPU - {B2538ADA-B605-4D6F-ACD2-62A409680F84}.Debug|x64.Build.0 = Debug|Any CPU {B2538ADA-B605-4D6F-ACD2-62A409680F84}.Debug|x86.ActiveCfg = Debug|Any CPU {B2538ADA-B605-4D6F-ACD2-62A409680F84}.Debug|x86.Build.0 = Debug|Any CPU {B2538ADA-B605-4D6F-ACD2-62A409680F84}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -394,8 +396,6 @@ Global {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|x64.ActiveCfg = Debug|Any CPU - {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|x64.Build.0 = Debug|Any CPU - {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|x64.Deploy.0 = Debug|Any CPU {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|x86.ActiveCfg = Debug|Any CPU {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|x86.Build.0 = Debug|Any CPU {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE}.Debug|x86.Deploy.0 = Debug|Any CPU @@ -450,7 +450,6 @@ Global {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Debug|x64.ActiveCfg = Debug|Any CPU - {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Debug|x64.Build.0 = Debug|Any CPU {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Debug|x86.ActiveCfg = Debug|Any CPU {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Debug|x86.Build.0 = Debug|Any CPU {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -465,6 +464,66 @@ Global {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Release|x64.Build.0 = Release|Any CPU {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Release|x86.ActiveCfg = Release|Any CPU {428CACAB-CC26-4F41-9062-1E4A9BC82640}.Release|x86.Build.0 = Release|Any CPU + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|Any CPU.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|ARM.Build.0 = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|ARM.Deploy.0 = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|iPhone.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|x64.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|x64.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|x86.Build.0 = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Ad-Hoc|x86.Deploy.0 = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|Any CPU.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|Any CPU.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|Any CPU.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|ARM.ActiveCfg = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|ARM.Build.0 = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|ARM.Deploy.0 = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|iPhone.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|iPhone.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|iPhone.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|iPhoneSimulator.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|x64.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|x64.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|x64.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|x86.ActiveCfg = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|x86.Build.0 = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.AppStore|x86.Deploy.0 = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|Any CPU.ActiveCfg = Debug|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|ARM.ActiveCfg = Debug|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|ARM.Build.0 = Debug|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|ARM.Deploy.0 = Debug|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|iPhone.ActiveCfg = Debug|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|x64.ActiveCfg = Debug|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|x64.Build.0 = Debug|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|x64.Deploy.0 = Debug|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|x86.ActiveCfg = Debug|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|x86.Build.0 = Debug|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Debug|x86.Deploy.0 = Debug|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|Any CPU.ActiveCfg = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|ARM.ActiveCfg = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|ARM.Build.0 = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|ARM.Deploy.0 = Release|ARM + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|iPhone.ActiveCfg = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|iPhoneSimulator.ActiveCfg = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|x64.ActiveCfg = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|x64.Build.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|x64.Deploy.0 = Release|x64 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|x86.ActiveCfg = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|x86.Build.0 = Release|x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -480,5 +539,10 @@ Global {FA507A17-D4E3-46DF-ACD8-D7E6D7D4E3AE} = {0D790714-ECF8-4A83-BE4A-E9C84DD1BB5D} {2E399654-26A2-46F6-B9CA-1B496A3F370A} = {92470CBD-9047-4C3C-8EA3-D972D6622D84} {428CACAB-CC26-4F41-9062-1E4A9BC82640} = {2E399654-26A2-46F6-B9CA-1B496A3F370A} + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141} = {EC730FD9-F623-4B6C-B503-95CDCFBCF277} + {0BE54BBB-7772-4289-BD51-1FDBB0CC2446} = {EC730FD9-F623-4B6C-B503-95CDCFBCF277} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {318CB2DF-0118-43A3-AC83-56BADCF71CCD} EndGlobalSection EndGlobal diff --git a/src/Android/Android.csproj b/src/Android/Android.csproj index 9d4879942..01976df2e 100644 --- a/src/Android/Android.csproj +++ b/src/Android/Android.csproj @@ -178,8 +178,8 @@ ..\..\packages\Splat.1.6.2\lib\monoandroid\Splat.dll True - - ..\..\packages\sqlite-net-pcl.1.4.118\lib\netstandard1.1\SQLite-net.dll + + ..\..\packages\sqlite-net-pcl.1.5.166-beta\lib\netstandard1.1\SQLite-net.dll ..\..\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\MonoAndroid\SQLitePCLRaw.batteries_green.dll diff --git a/src/Android/packages.config b/src/Android/packages.config index 539ea5241..3b879d8f7 100644 --- a/src/Android/packages.config +++ b/src/Android/packages.config @@ -19,7 +19,7 @@ - + diff --git a/src/App/App.csproj b/src/App/App.csproj index dcde633a5..d939258dc 100644 --- a/src/App/App.csproj +++ b/src/App/App.csproj @@ -540,8 +540,8 @@ ..\..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll True - - ..\..\packages\sqlite-net-pcl.1.4.118\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\SQLite-net.dll + + ..\..\packages\sqlite-net-pcl.1.5.166-beta\lib\portable-net45+netcore45+wpa81+wp8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\SQLite-net.dll ..\..\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\portable-net45+netcore45+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\SQLitePCLRaw.batteries_green.dll diff --git a/src/App/Controls/ExtendedTableView.cs b/src/App/Controls/ExtendedTableView.cs index 2ecfb00e4..42a954208 100644 --- a/src/App/Controls/ExtendedTableView.cs +++ b/src/App/Controls/ExtendedTableView.cs @@ -43,7 +43,7 @@ namespace Bit.App.Controls protected override SizeRequest OnSizeRequest(double widthConstraint, double heightConstraint) { - if(!VerticalOptions.Expands) + if(!VerticalOptions.Expands && Device.RuntimePlatform != Device.Windows) { var reflectionService = Resolver.Resolve(); var baseBaseOnSizeRequest = reflectionService.GetVisualElementOnSizeRequest(this); diff --git a/src/App/Pages/EnvironmentPage.cs b/src/App/Pages/EnvironmentPage.cs index a0995644e..bd39de2a8 100644 --- a/src/App/Pages/EnvironmentPage.cs +++ b/src/App/Pages/EnvironmentPage.cs @@ -102,7 +102,7 @@ namespace Bit.App.Pages var toolbarItem = new ToolbarItem(AppResources.Save, null, async () => await SaveAsync(), ToolbarItemOrder.Default, 0); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { table.RowHeight = table2.RowHeight = -1; table.EstimatedRowHeight = table2.EstimatedRowHeight = 70; diff --git a/src/App/Pages/HomePage.cs b/src/App/Pages/HomePage.cs index 323731ebc..7e20a6dcd 100644 --- a/src/App/Pages/HomePage.cs +++ b/src/App/Pages/HomePage.cs @@ -34,7 +34,7 @@ namespace Bit.App.Pages var settingsButton = new Button { - Image = "cog", + Image = "cog.png", VerticalOptions = LayoutOptions.Start, HorizontalOptions = LayoutOptions.Start, WidthRequest = 25, @@ -46,7 +46,7 @@ namespace Bit.App.Pages var logo = new CachedImage { - Source = "logo", + Source = "logo.png", VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.Center, WidthRequest = 282, diff --git a/src/App/Pages/Lock/LockFingerprintPage.cs b/src/App/Pages/Lock/LockFingerprintPage.cs index ef50cadd5..ce9aa2995 100644 --- a/src/App/Pages/Lock/LockFingerprintPage.cs +++ b/src/App/Pages/Lock/LockFingerprintPage.cs @@ -32,7 +32,7 @@ namespace Bit.App.Pages { var fingerprintIcon = new ExtendedButton { - Image = "fingerprint", + Image = "fingerprint.png", BackgroundColor = Color.Transparent, Command = new Command(async () => await CheckFingerprintAsync()), VerticalOptions = LayoutOptions.CenterAndExpand, diff --git a/src/App/Pages/Lock/LockPasswordPage.cs b/src/App/Pages/Lock/LockPasswordPage.cs index 10c2da7bd..a03d0f0bf 100644 --- a/src/App/Pages/Lock/LockPasswordPage.cs +++ b/src/App/Pages/Lock/LockPasswordPage.cs @@ -36,7 +36,7 @@ namespace Bit.App.Pages WinPhone: new Thickness(15, 20)); PasswordCell = new FormEntryCell(AppResources.MasterPassword, isPassword: true, - useLabelAsPlaceholder: true, imageSource: "lock", containerPadding: padding); + useLabelAsPlaceholder: true, imageSource: "lock.png", containerPadding: padding); PasswordCell.Entry.ReturnType = Enums.ReturnType.Go; diff --git a/src/App/Pages/LoginPage.cs b/src/App/Pages/LoginPage.cs index d49c51b1d..4c996e047 100644 --- a/src/App/Pages/LoginPage.cs +++ b/src/App/Pages/LoginPage.cs @@ -103,7 +103,7 @@ namespace Bit.App.Pages var scrollView = new ScrollView { Content = layout }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { table.RowHeight = -1; table.EstimatedRowHeight = 70; diff --git a/src/App/Pages/MainPage.cs b/src/App/Pages/MainPage.cs index e6e16d206..5eb4a1c6d 100644 --- a/src/App/Pages/MainPage.cs +++ b/src/App/Pages/MainPage.cs @@ -17,16 +17,16 @@ namespace Bit.App.Pages var toolsNavigation = new ExtendedNavigationPage(new ToolsPage()); favoritesNavigation.Title = AppResources.Favorites; - favoritesNavigation.Icon = "star"; + favoritesNavigation.Icon = "star.png"; vaultNavigation.Title = AppResources.MyVault; - vaultNavigation.Icon = "fa_lock"; + vaultNavigation.Icon = "fa_lock.png"; toolsNavigation.Title = AppResources.Tools; - toolsNavigation.Icon = "tools"; + toolsNavigation.Icon = "tools.png"; settingsNavigation.Title = AppResources.Settings; - settingsNavigation.Icon = "cogs"; + settingsNavigation.Icon = "cogs.png"; Children.Add(favoritesNavigation); Children.Add(vaultNavigation); diff --git a/src/App/Pages/PasswordHintPage.cs b/src/App/Pages/PasswordHintPage.cs index 9881556ac..7cf5023af 100644 --- a/src/App/Pages/PasswordHintPage.cs +++ b/src/App/Pages/PasswordHintPage.cs @@ -36,7 +36,7 @@ namespace Bit.App.Pages WinPhone: new Thickness(15, 20)); EmailCell = new FormEntryCell(AppResources.EmailAddress, entryKeyboard: Keyboard.Email, - useLabelAsPlaceholder: true, imageSource: "envelope", containerPadding: padding); + useLabelAsPlaceholder: true, imageSource: "envelope.png", containerPadding: padding); EmailCell.Entry.ReturnType = Enums.ReturnType.Go; diff --git a/src/App/Pages/RegisterPage.cs b/src/App/Pages/RegisterPage.cs index fe625e315..1ace15971 100644 --- a/src/App/Pages/RegisterPage.cs +++ b/src/App/Pages/RegisterPage.cs @@ -50,15 +50,15 @@ namespace Bit.App.Pages WinPhone: new Thickness(15, 20)); PasswordHintCell = new FormEntryCell(AppResources.MasterPasswordHint, useLabelAsPlaceholder: true, - imageSource: "lightbulb", containerPadding: padding); + imageSource: "lightbulb.png", containerPadding: padding); ConfirmPasswordCell = new FormEntryCell(AppResources.RetypeMasterPassword, isPassword: true, - nextElement: PasswordHintCell.Entry, useLabelAsPlaceholder: true, imageSource: "lock", + nextElement: PasswordHintCell.Entry, useLabelAsPlaceholder: true, imageSource: "lock.png", containerPadding: padding); PasswordCell = new FormEntryCell(AppResources.MasterPassword, isPassword: true, - nextElement: ConfirmPasswordCell.Entry, useLabelAsPlaceholder: true, imageSource: "lock", + nextElement: ConfirmPasswordCell.Entry, useLabelAsPlaceholder: true, imageSource: "lock.png", containerPadding: padding); EmailCell = new FormEntryCell(AppResources.EmailAddress, nextElement: PasswordCell.Entry, - entryKeyboard: Keyboard.Email, useLabelAsPlaceholder: true, imageSource: "envelope", + entryKeyboard: Keyboard.Email, useLabelAsPlaceholder: true, imageSource: "envelope.png", containerPadding: padding); PasswordHintCell.Entry.ReturnType = Enums.ReturnType.Done; @@ -122,7 +122,7 @@ namespace Bit.App.Pages await Register(); }, ToolbarItemOrder.Default, 0); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { table.RowHeight = table2.RowHeight = -1; table.EstimatedRowHeight = table2.EstimatedRowHeight = 70; diff --git a/src/App/Pages/ScanPage.cs b/src/App/Pages/ScanPage.cs index d54d022be..a3cd92fda 100644 --- a/src/App/Pages/ScanPage.cs +++ b/src/App/Pages/ScanPage.cs @@ -68,7 +68,7 @@ namespace Bit.App.Pages Children = { _zxing, _overlay } }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Close)); } diff --git a/src/App/Pages/Settings/SettingsAboutPage.cs b/src/App/Pages/Settings/SettingsAboutPage.cs index cbb2b61bb..4a7144f7e 100644 --- a/src/App/Pages/Settings/SettingsAboutPage.cs +++ b/src/App/Pages/Settings/SettingsAboutPage.cs @@ -24,7 +24,7 @@ namespace Bit.App.Pages { var logo = new CachedImage { - Source = "logo", + Source = "logo.png", HorizontalOptions = LayoutOptions.Center, WidthRequest = 282, HeightRequest = 44 @@ -78,7 +78,7 @@ namespace Bit.App.Pages Spacing = 0 }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Settings/SettingsAddFolderPage.cs b/src/App/Pages/Settings/SettingsAddFolderPage.cs index 8e6743c40..0b4b10a09 100644 --- a/src/App/Pages/Settings/SettingsAddFolderPage.cs +++ b/src/App/Pages/Settings/SettingsAddFolderPage.cs @@ -105,7 +105,7 @@ namespace Bit.App.Pages Title = AppResources.AddFolder; Content = table; ToolbarItems.Add(saveToolBarItem); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Settings/SettingsEditFolderPage.cs b/src/App/Pages/Settings/SettingsEditFolderPage.cs index b5b01adc3..8daa8dd64 100644 --- a/src/App/Pages/Settings/SettingsEditFolderPage.cs +++ b/src/App/Pages/Settings/SettingsEditFolderPage.cs @@ -119,7 +119,7 @@ namespace Bit.App.Pages Title = AppResources.EditFolder; Content = mainTable; ToolbarItems.Add(saveToolBarItem); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Settings/SettingsFeaturesPage.cs b/src/App/Pages/Settings/SettingsFeaturesPage.cs index 0fc636447..ce2ec90f3 100644 --- a/src/App/Pages/Settings/SettingsFeaturesPage.cs +++ b/src/App/Pages/Settings/SettingsFeaturesPage.cs @@ -171,7 +171,7 @@ namespace Bit.App.Pages Content = StackLayout }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { analyticsTable.RowHeight = -1; analyticsTable.EstimatedRowHeight = 70; diff --git a/src/App/Pages/Settings/SettingsHelpPage.cs b/src/App/Pages/Settings/SettingsHelpPage.cs index a1df0d99d..45c6fb1b1 100644 --- a/src/App/Pages/Settings/SettingsHelpPage.cs +++ b/src/App/Pages/Settings/SettingsHelpPage.cs @@ -102,7 +102,7 @@ namespace Bit.App.Pages Spacing = 0 }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Settings/SettingsListFoldersPage.cs b/src/App/Pages/Settings/SettingsListFoldersPage.cs index 080625d0b..ecb7b35ee 100644 --- a/src/App/Pages/Settings/SettingsListFoldersPage.cs +++ b/src/App/Pages/Settings/SettingsListFoldersPage.cs @@ -40,8 +40,8 @@ namespace Bit.App.Pages ItemsSource = Folders, ItemTemplate = new DataTemplate(() => new SettingsFolderListViewCell(this)) }; - - if(Device.RuntimePlatform == Device.iOS) + + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } @@ -87,7 +87,7 @@ namespace Bit.App.Pages { _page = page; Text = AppResources.Add; - Icon = "plus"; + Icon = "plus.png"; ClickAction = () => ClickedItem(); } diff --git a/src/App/Pages/Settings/SettingsPinPage.cs b/src/App/Pages/Settings/SettingsPinPage.cs index 0575d27e3..cd827a8fd 100644 --- a/src/App/Pages/Settings/SettingsPinPage.cs +++ b/src/App/Pages/Settings/SettingsPinPage.cs @@ -56,7 +56,7 @@ namespace Bit.App.Pages PinControl.Label.GestureRecognizers.Add(Tgr); instructionLabel.GestureRecognizers.Add(Tgr); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Settings/SettingsSyncPage.cs b/src/App/Pages/Settings/SettingsSyncPage.cs index 4fcedc14e..32e368db8 100644 --- a/src/App/Pages/Settings/SettingsSyncPage.cs +++ b/src/App/Pages/Settings/SettingsSyncPage.cs @@ -57,7 +57,7 @@ namespace Bit.App.Pages Padding = new Thickness(15, 0) }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Tools/ToolsAutofillServicePage.cs b/src/App/Pages/Tools/ToolsAutofillServicePage.cs index f3f3738dc..6490f4b5d 100644 --- a/src/App/Pages/Tools/ToolsAutofillServicePage.cs +++ b/src/App/Pages/Tools/ToolsAutofillServicePage.cs @@ -123,7 +123,7 @@ namespace Bit.App.Pages var tapNotificationImage = new CachedImage { - Source = "accessibility_notification", + Source = "accessibility_notification.png", HorizontalOptions = LayoutOptions.Center, Margin = new Thickness(0, 20, 0, 0), WidthRequest = 300, @@ -132,7 +132,7 @@ namespace Bit.App.Pages var tapNotificationIcon = new CachedImage { - Source = "accessibility_notification_icon", + Source = "accessibility_notification_icon.png", HorizontalOptions = LayoutOptions.Center, Margin = new Thickness(0, 20, 0, 0), WidthRequest = 300, diff --git a/src/App/Pages/Tools/ToolsExtensionPage.cs b/src/App/Pages/Tools/ToolsExtensionPage.cs index b6a5d0a97..245cf99c9 100644 --- a/src/App/Pages/Tools/ToolsExtensionPage.cs +++ b/src/App/Pages/Tools/ToolsExtensionPage.cs @@ -205,7 +205,7 @@ namespace Bit.App.Pages VerticalOptions = LayoutOptions.FillAndExpand }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Close)); } diff --git a/src/App/Pages/Tools/ToolsPage.cs b/src/App/Pages/Tools/ToolsPage.cs index 3b88da8c6..8c2dc82fd 100644 --- a/src/App/Pages/Tools/ToolsPage.cs +++ b/src/App/Pages/Tools/ToolsPage.cs @@ -33,10 +33,10 @@ namespace Bit.App.Pages public void Init() { GeneratorCell = new ToolsViewCell(AppResources.PasswordGenerator, AppResources.PasswordGeneratorDescription, - "refresh"); - WebCell = new ToolsViewCell(AppResources.WebVault, AppResources.WebVaultDescription, "globe"); - ShareCell = new ToolsViewCell(AppResources.ShareVault, AppResources.ShareVaultDescription, "share_tools"); - ImportCell = new ToolsViewCell(AppResources.ImportLogins, AppResources.ImportLoginsDescription, "cloudup"); + "refresh.png"); + WebCell = new ToolsViewCell(AppResources.WebVault, AppResources.WebVaultDescription, "globe.png"); + ShareCell = new ToolsViewCell(AppResources.ShareVault, AppResources.ShareVaultDescription, "share_tools.png"); + ImportCell = new ToolsViewCell(AppResources.ImportLogins, AppResources.ImportLoginsDescription, "cloudup.png"); var section = new TableSection(" ") { GeneratorCell }; @@ -49,7 +49,7 @@ namespace Bit.App.Pages else { AutofillCell = new ToolsViewCell(AppResources.BitwardenAutofillService, - AppResources.BitwardenAutofillServiceDescription, "upload"); + AppResources.BitwardenAutofillServiceDescription, "upload.png"); section.Add(AutofillCell); } diff --git a/src/App/Pages/Tools/ToolsPasswordGeneratorPage.cs b/src/App/Pages/Tools/ToolsPasswordGeneratorPage.cs index 445205acf..f52fa5423 100644 --- a/src/App/Pages/Tools/ToolsPasswordGeneratorPage.cs +++ b/src/App/Pages/Tools/ToolsPasswordGeneratorPage.cs @@ -87,7 +87,7 @@ namespace Bit.App.Pages } }; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { table.RowHeight = -1; table.EstimatedRowHeight = 44; diff --git a/src/App/Pages/Vault/VaultAddLoginPage.cs b/src/App/Pages/Vault/VaultAddLoginPage.cs index 2fa76fcf9..b9b01d2ef 100644 --- a/src/App/Pages/Vault/VaultAddLoginPage.cs +++ b/src/App/Pages/Vault/VaultAddLoginPage.cs @@ -223,7 +223,7 @@ namespace Bit.App.Pages Title = AppResources.AddLogin; Content = table; ToolbarItems.Add(saveToolBarItem); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Vault/VaultAttachmentsPage.cs b/src/App/Pages/Vault/VaultAttachmentsPage.cs index 37227c07b..e352715b1 100644 --- a/src/App/Pages/Vault/VaultAttachmentsPage.cs +++ b/src/App/Pages/Vault/VaultAttachmentsPage.cs @@ -192,7 +192,7 @@ namespace Bit.App.Pages ToolbarItems.Add(saveToolBarItem); } - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ListView.RowHeight = -1; NewTable.RowHeight = -1; diff --git a/src/App/Pages/Vault/VaultCustomFieldsPage.cs b/src/App/Pages/Vault/VaultCustomFieldsPage.cs index c9d1e9a2a..0b3b43ed3 100644 --- a/src/App/Pages/Vault/VaultCustomFieldsPage.cs +++ b/src/App/Pages/Vault/VaultCustomFieldsPage.cs @@ -159,7 +159,7 @@ namespace Bit.App.Pages { Content = Table; ToolbarItems.Add(SaveToolbarItem); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } @@ -216,7 +216,7 @@ namespace Bit.App.Pages else { Content = NoDataLabel; - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Close)); } diff --git a/src/App/Pages/Vault/VaultEditLoginPage.cs b/src/App/Pages/Vault/VaultEditLoginPage.cs index 11de6e05d..23104526b 100644 --- a/src/App/Pages/Vault/VaultEditLoginPage.cs +++ b/src/App/Pages/Vault/VaultEditLoginPage.cs @@ -250,7 +250,7 @@ namespace Bit.App.Pages Title = AppResources.EditLogin; Content = table; ToolbarItems.Add(saveToolBarItem); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } diff --git a/src/App/Pages/Vault/VaultListLoginsPage.cs b/src/App/Pages/Vault/VaultListLoginsPage.cs index dac332a8a..2114cec49 100644 --- a/src/App/Pages/Vault/VaultListLoginsPage.cs +++ b/src/App/Pages/Vault/VaultListLoginsPage.cs @@ -481,7 +481,7 @@ namespace Bit.App.Pages { _page = page; Text = AppResources.Add; - Icon = "plus"; + Icon = "plus.png"; } } @@ -491,7 +491,7 @@ namespace Bit.App.Pages { var image = new CachedImage { - Source = "folder", + Source = "folder.png", WidthRequest = 18, HeightRequest = 18 }; diff --git a/src/App/Pages/Vault/VaultViewLoginPage.cs b/src/App/Pages/Vault/VaultViewLoginPage.cs index f064c70fd..34e4eb675 100644 --- a/src/App/Pages/Vault/VaultViewLoginPage.cs +++ b/src/App/Pages/Vault/VaultViewLoginPage.cs @@ -54,7 +54,7 @@ namespace Bit.App.Pages { EditItem = new EditLoginToolBarItem(this, _loginId); ToolbarItems.Add(EditItem); - if(Device.RuntimePlatform == Device.iOS) + if(Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this)); } @@ -399,7 +399,7 @@ namespace Bit.App.Pages _tapped = tappedAction; Label.Text = attachment.Name; Detail.Text = attachment.SizeName; - Icon.Source = "download"; + Icon.Source = "download.png"; BackgroundColor = Color.White; Detail.MinimumWidthRequest = 100; } diff --git a/src/App/packages.config b/src/App/packages.config index b8b202092..c026688e3 100644 --- a/src/App/packages.config +++ b/src/App/packages.config @@ -11,7 +11,7 @@ - + diff --git a/src/UWP.Images/UWP.Images.projitems b/src/UWP.Images/UWP.Images.projitems new file mode 100644 index 000000000..5eb620da8 --- /dev/null +++ b/src/UWP.Images/UWP.Images.projitems @@ -0,0 +1,50 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 0be54bbb-7772-4289-bd51-1fdbb0cc2446 + + + UWP.Images + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/UWP.Images/UWP.Images.shproj b/src/UWP.Images/UWP.Images.shproj new file mode 100644 index 000000000..ec88a8939 --- /dev/null +++ b/src/UWP.Images/UWP.Images.shproj @@ -0,0 +1,13 @@ + + + + 0be54bbb-7772-4289-bd51-1fdbb0cc2446 + 14.0 + + + + + + + + diff --git a/src/UWP.Images/camera.png b/src/UWP.Images/camera.png new file mode 100644 index 000000000..78202eaa3 Binary files /dev/null and b/src/UWP.Images/camera.png differ diff --git a/src/UWP.Images/cloudup.png b/src/UWP.Images/cloudup.png new file mode 100644 index 000000000..f8fd23b8c Binary files /dev/null and b/src/UWP.Images/cloudup.png differ diff --git a/src/UWP.Images/cog.png b/src/UWP.Images/cog.png new file mode 100644 index 000000000..c7b86b95e Binary files /dev/null and b/src/UWP.Images/cog.png differ diff --git a/src/UWP.Images/cogs.png b/src/UWP.Images/cogs.png new file mode 100644 index 000000000..b12b500c0 Binary files /dev/null and b/src/UWP.Images/cogs.png differ diff --git a/src/UWP.Images/cogs_selected.png b/src/UWP.Images/cogs_selected.png new file mode 100644 index 000000000..bce1b2939 Binary files /dev/null and b/src/UWP.Images/cogs_selected.png differ diff --git a/src/UWP.Images/download.png b/src/UWP.Images/download.png new file mode 100644 index 000000000..631ff3cc0 Binary files /dev/null and b/src/UWP.Images/download.png differ diff --git a/src/UWP.Images/envelope.png b/src/UWP.Images/envelope.png new file mode 100644 index 000000000..a026d7e76 Binary files /dev/null and b/src/UWP.Images/envelope.png differ diff --git a/src/UWP.Images/eye.png b/src/UWP.Images/eye.png new file mode 100644 index 000000000..9c8fd3734 Binary files /dev/null and b/src/UWP.Images/eye.png differ diff --git a/src/UWP.Images/eye_slash.png b/src/UWP.Images/eye_slash.png new file mode 100644 index 000000000..87e0c2a38 Binary files /dev/null and b/src/UWP.Images/eye_slash.png differ diff --git a/src/UWP.Images/fa_lock.png b/src/UWP.Images/fa_lock.png new file mode 100644 index 000000000..c7cc70ffb Binary files /dev/null and b/src/UWP.Images/fa_lock.png differ diff --git a/src/UWP.Images/fa_lock_selected.png b/src/UWP.Images/fa_lock_selected.png new file mode 100644 index 000000000..0b550f6e6 Binary files /dev/null and b/src/UWP.Images/fa_lock_selected.png differ diff --git a/src/UWP.Images/fingerprint.png b/src/UWP.Images/fingerprint.png new file mode 100644 index 000000000..e6878722d Binary files /dev/null and b/src/UWP.Images/fingerprint.png differ diff --git a/src/UWP.Images/folder.png b/src/UWP.Images/folder.png new file mode 100644 index 000000000..318cc37a1 Binary files /dev/null and b/src/UWP.Images/folder.png differ diff --git a/src/UWP.Images/globe.png b/src/UWP.Images/globe.png new file mode 100644 index 000000000..56b1670ae Binary files /dev/null and b/src/UWP.Images/globe.png differ diff --git a/src/UWP.Images/icon.png b/src/UWP.Images/icon.png new file mode 100644 index 000000000..8c066db92 Binary files /dev/null and b/src/UWP.Images/icon.png differ diff --git a/src/UWP.Images/ion_chevron_right.png b/src/UWP.Images/ion_chevron_right.png new file mode 100644 index 000000000..f9cde2599 Binary files /dev/null and b/src/UWP.Images/ion_chevron_right.png differ diff --git a/src/UWP.Images/lightbulb.png b/src/UWP.Images/lightbulb.png new file mode 100644 index 000000000..8a70cdde4 Binary files /dev/null and b/src/UWP.Images/lightbulb.png differ diff --git a/src/UWP.Images/lock.png b/src/UWP.Images/lock.png new file mode 100644 index 000000000..fd1bbb793 Binary files /dev/null and b/src/UWP.Images/lock.png differ diff --git a/src/UWP.Images/logo.png b/src/UWP.Images/logo.png new file mode 100644 index 000000000..904731676 Binary files /dev/null and b/src/UWP.Images/logo.png differ diff --git a/src/UWP.Images/more.png b/src/UWP.Images/more.png new file mode 100644 index 000000000..af9dcd006 Binary files /dev/null and b/src/UWP.Images/more.png differ diff --git a/src/UWP.Images/more_selected.png b/src/UWP.Images/more_selected.png new file mode 100644 index 000000000..414ef723f Binary files /dev/null and b/src/UWP.Images/more_selected.png differ diff --git a/src/UWP.Images/notification_sm.png b/src/UWP.Images/notification_sm.png new file mode 100644 index 000000000..760eff254 Binary files /dev/null and b/src/UWP.Images/notification_sm.png differ diff --git a/src/UWP.Images/paperclip.png b/src/UWP.Images/paperclip.png new file mode 100644 index 000000000..5fcf999ae Binary files /dev/null and b/src/UWP.Images/paperclip.png differ diff --git a/src/UWP.Images/photo.png b/src/UWP.Images/photo.png new file mode 100644 index 000000000..484475a34 Binary files /dev/null and b/src/UWP.Images/photo.png differ diff --git a/src/UWP.Images/plus.png b/src/UWP.Images/plus.png new file mode 100644 index 000000000..d081b363b Binary files /dev/null and b/src/UWP.Images/plus.png differ diff --git a/src/UWP.Images/refresh.png b/src/UWP.Images/refresh.png new file mode 100644 index 000000000..ecad46609 Binary files /dev/null and b/src/UWP.Images/refresh.png differ diff --git a/src/UWP.Images/search.png b/src/UWP.Images/search.png new file mode 100644 index 000000000..c826d6cc2 Binary files /dev/null and b/src/UWP.Images/search.png differ diff --git a/src/UWP.Images/share.png b/src/UWP.Images/share.png new file mode 100644 index 000000000..f6ea05419 Binary files /dev/null and b/src/UWP.Images/share.png differ diff --git a/src/UWP.Images/share_tools.png b/src/UWP.Images/share_tools.png new file mode 100644 index 000000000..d034c82e2 Binary files /dev/null and b/src/UWP.Images/share_tools.png differ diff --git a/src/UWP.Images/star.png b/src/UWP.Images/star.png new file mode 100644 index 000000000..44da06e9e Binary files /dev/null and b/src/UWP.Images/star.png differ diff --git a/src/UWP.Images/star_selected.png b/src/UWP.Images/star_selected.png new file mode 100644 index 000000000..d24d5080a Binary files /dev/null and b/src/UWP.Images/star_selected.png differ diff --git a/src/UWP.Images/tools.png b/src/UWP.Images/tools.png new file mode 100644 index 000000000..4ae8bbe9e Binary files /dev/null and b/src/UWP.Images/tools.png differ diff --git a/src/UWP.Images/tools_selected.png b/src/UWP.Images/tools_selected.png new file mode 100644 index 000000000..44a5d254e Binary files /dev/null and b/src/UWP.Images/tools_selected.png differ diff --git a/src/UWP.Images/trash.png b/src/UWP.Images/trash.png new file mode 100644 index 000000000..97491ec48 Binary files /dev/null and b/src/UWP.Images/trash.png differ diff --git a/src/UWP.Images/upload.png b/src/UWP.Images/upload.png new file mode 100644 index 000000000..d192a7ad8 Binary files /dev/null and b/src/UWP.Images/upload.png differ diff --git a/src/UWP.Images/user.png b/src/UWP.Images/user.png new file mode 100644 index 000000000..17dfa03fc Binary files /dev/null and b/src/UWP.Images/user.png differ diff --git a/src/UWP.Images/yubikey.png b/src/UWP.Images/yubikey.png new file mode 100644 index 000000000..364c2d06e Binary files /dev/null and b/src/UWP.Images/yubikey.png differ diff --git a/src/UWP/App.xaml b/src/UWP/App.xaml new file mode 100644 index 000000000..561e163f0 --- /dev/null +++ b/src/UWP/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/src/UWP/App.xaml.cs b/src/UWP/App.xaml.cs new file mode 100644 index 000000000..894c13479 --- /dev/null +++ b/src/UWP/App.xaml.cs @@ -0,0 +1,185 @@ +using Acr.UserDialogs; +using Bit.App.Abstractions; +using Bit.App.Repositories; +using Bit.App.Services; +using Bit.UWP.Services; +using FFImageLoading.Forms.WinUWP; +using Plugin.Connectivity; +using Plugin.Fingerprint; +using Plugin.Settings.Abstractions; +using PushNotification.Plugin; +using SimpleInjector; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; +using XLabs.Ioc; +using XLabs.Ioc.SimpleInjectorContainer; + +namespace Bit.UWP +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + if (!Resolver.IsSet) + { + SetIoc(); + } + + } + + + public ISettings Settings { get; set; } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + Xamarin.Forms.Forms.Init(e); + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + if (e.PrelaunchActivated == false) + { + if (rootFrame.Content == null) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Ensure the current window is active + Window.Current.Activate(); + } + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + + + private void SetIoc() + { + var container = new Container(); + + // Services + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + + // Repositories + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + container.RegisterSingleton(); + + // Other + container.RegisterSingleton(CrossConnectivity.Current); + container.RegisterSingleton(UserDialogs.Instance); + container.RegisterSingleton(CrossFingerprint.Current); + + container.RegisterSingleton(Plugin.Settings.CrossSettings.Current); + + // Push + var pushListener = new PushNotificationListener(); + container.RegisterSingleton(pushListener); + CrossPushNotification.Initialize(pushListener); + container.RegisterSingleton(CrossPushNotification.Current); + CachedImageRenderer.Init(); + + Resolver.SetResolver(new SimpleInjectorResolver(container)); + } + } +} diff --git a/src/UWP/Assets/LockScreenLogo.scale-200.png b/src/UWP/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 000000000..735f57adb Binary files /dev/null and b/src/UWP/Assets/LockScreenLogo.scale-200.png differ diff --git a/src/UWP/Assets/SplashScreen.scale-200.png b/src/UWP/Assets/SplashScreen.scale-200.png new file mode 100644 index 000000000..023e7f1fe Binary files /dev/null and b/src/UWP/Assets/SplashScreen.scale-200.png differ diff --git a/src/UWP/Assets/Square150x150Logo.scale-200.png b/src/UWP/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 000000000..af49fec1a Binary files /dev/null and b/src/UWP/Assets/Square150x150Logo.scale-200.png differ diff --git a/src/UWP/Assets/Square44x44Logo.scale-200.png b/src/UWP/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 000000000..ce342a2ec Binary files /dev/null and b/src/UWP/Assets/Square44x44Logo.scale-200.png differ diff --git a/src/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/src/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 000000000..f6c02ce97 Binary files /dev/null and b/src/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/src/UWP/Assets/StoreLogo.png b/src/UWP/Assets/StoreLogo.png new file mode 100644 index 000000000..7385b56c0 Binary files /dev/null and b/src/UWP/Assets/StoreLogo.png differ diff --git a/src/UWP/Assets/Wide310x150Logo.scale-200.png b/src/UWP/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 000000000..288995b39 Binary files /dev/null and b/src/UWP/Assets/Wide310x150Logo.scale-200.png differ diff --git a/src/UWP/MainPage.xaml b/src/UWP/MainPage.xaml new file mode 100644 index 000000000..2af72d753 --- /dev/null +++ b/src/UWP/MainPage.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/UWP/MainPage.xaml.cs b/src/UWP/MainPage.xaml.cs new file mode 100644 index 000000000..c887f3d44 --- /dev/null +++ b/src/UWP/MainPage.xaml.cs @@ -0,0 +1,52 @@ +using Acr.UserDialogs; +using Bit.App.Abstractions; +using Plugin.Connectivity.Abstractions; +using Plugin.Settings.Abstractions; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; +using Xamarin.Forms.Platform.UWP; +using XLabs.Ioc; + +// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 + +namespace Bit.UWP +{ + /// + /// An empty page that can be used on its own or navigated to within a Frame. + /// + public sealed partial class MainPage : WindowsPage + { + public MainPage() + { + this.InitializeComponent(); + LoadApplication(new Bit.App.App( + null, + false, + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve(), + Resolver.Resolve())); + + } + } +} diff --git a/src/UWP/Package.appxmanifest b/src/UWP/Package.appxmanifest new file mode 100644 index 000000000..9c650da49 --- /dev/null +++ b/src/UWP/Package.appxmanifest @@ -0,0 +1,29 @@ + + + + + + UWP + Hicham + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/UWP/Properties/AssemblyInfo.cs b/src/UWP/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..6a814fbd3 --- /dev/null +++ b/src/UWP/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +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("UWP")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("UWP")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 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")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/src/UWP/Properties/Default.rd.xml b/src/UWP/Properties/Default.rd.xml new file mode 100644 index 000000000..af00722cd --- /dev/null +++ b/src/UWP/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/UWP/Services/AppInfoService.cs b/src/UWP/Services/AppInfoService.cs new file mode 100644 index 000000000..c7c53a58d --- /dev/null +++ b/src/UWP/Services/AppInfoService.cs @@ -0,0 +1,40 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.ApplicationModel; + +namespace Bit.UWP.Services +{ + public class AppInfoService : IAppInfoService + { + + public string Build + { + get + { + Package package = Package.Current; + PackageId packageId = package.Id; + PackageVersion version = packageId.Version; + + return version.Build.ToString(); + } + } + + public string Version + { + get + { + Package package = Package.Current; + PackageId packageId = package.Id; + PackageVersion version = packageId.Version; + + return $"{version.Major}.{version.Minor}.{version.Build}"; + } + } + + public bool AutofillServiceEnabled => false; + } +} diff --git a/src/UWP/Services/DeviceActionService.cs b/src/UWP/Services/DeviceActionService.cs new file mode 100644 index 000000000..dce8c3ece --- /dev/null +++ b/src/UWP/Services/DeviceActionService.cs @@ -0,0 +1,88 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Windows.ApplicationModel.Core; +using Windows.ApplicationModel.DataTransfer; +using Windows.Storage; +using Windows.System; +using Windows.UI.Core; +using Xamarin.Forms; + +namespace Bit.UWP.Services +{ + public class DeviceActionService : IDeviceActionService + { + public bool CanOpenFile(string fileName) + { + return true; + } + + public void ClearCache() + { + Task.Run(async () => + { + foreach (var item in await ApplicationData.Current.LocalCacheFolder.GetItemsAsync()) + { + await item.DeleteAsync(); + } + }).Wait(); + } + + public void CopyToClipboard(string text) + { + DataPackage dataPackage = new DataPackage(); + dataPackage.RequestedOperation = DataPackageOperation.Copy; + dataPackage.SetText(text); + + Clipboard.SetContent(dataPackage); + } + + public bool OpenFile(byte[] fileData, string id, string fileName) + { + try + { + //the method is synchronous in the interface, so the async method are run synchronously here + var storageFolder = ApplicationData.Current.LocalCacheFolder; + var file = storageFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting).AsTask().Result; + FileIO.WriteBytesAsync(file, fileData).AsTask().Wait(); + Launcher.LaunchFileAsync(file, new LauncherOptions { DisplayApplicationPicker = true }).AsTask().Wait(); + + return true; + } + catch + { + return false; + } + } + + public Task SelectFileAsync() + { + var picker = new Windows.Storage.Pickers.FileOpenPicker + { + ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail, + SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary, + FileTypeFilter = { "*" } + }; + + return CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => + { + var file = await picker.PickSingleFileAsync(); + if (file != null) + await SelectFileResult(file); + }).AsTask(); + } + + private async Task SelectFileResult(StorageFile file) + { + var buffer = await FileIO.ReadBufferAsync(file); + + MessagingCenter.Send(Xamarin.Forms.Application.Current, "SelectFileResult", + new Tuple(buffer.ToArray(), file.Name)); + } + } +} diff --git a/src/UWP/Services/DeviceInfoService.cs b/src/UWP/Services/DeviceInfoService.cs new file mode 100644 index 000000000..05418facf --- /dev/null +++ b/src/UWP/Services/DeviceInfoService.cs @@ -0,0 +1,43 @@ +using Bit.App.Abstractions; +using Microsoft.Toolkit.Uwp.Helpers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.Graphics.Display; +using Windows.Devices.SmartCards; +using Windows.Devices.Enumeration; + +namespace Bit.UWP.Services +{ + public class DeviceInfoService : IDeviceInfoService + { + public string Model => SystemInformation.DeviceModel; + + public int Version => SystemInformation.OperatingSystemVersion.Build; + + public float Scale => (float)DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel; + + public bool NfcEnabled + { + get + { + if (!Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Devices.SmartCards.SmartCardEmulator")) + return false; + + return Task.Run(async () => await SmartCardEmulator.GetDefaultAsync()).Result != null; + } + } + + public bool HasCamera + { + get + { + var cameraList = Task.Run(async () => await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture)).Result; + + return cameraList?.Any() ?? false; + } + } + } +} diff --git a/src/UWP/Services/GoogleAnalyticsService.cs b/src/UWP/Services/GoogleAnalyticsService.cs new file mode 100644 index 000000000..0dcf991c7 --- /dev/null +++ b/src/UWP/Services/GoogleAnalyticsService.cs @@ -0,0 +1,45 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bit.UWP.Services +{ + public class GoogleAnalyticsService : IGoogleAnalyticsService + { + public void Dispatch(Action completionHandler = null) + { + + } + + public void SetAppOptOut(bool optOut) + { + + } + + public void TrackAppEvent(string eventName, string label = null) + { + + } + + public void TrackEvent(string category, string eventName, string label = null) + { + + } + + public void TrackException(string message, bool fatal) + { + } + + public void TrackExtensionEvent(string eventName, string label = null) + { + + } + + public void TrackPage(string pageName) + { + } + } +} diff --git a/src/UWP/Services/HttpService.cs b/src/UWP/Services/HttpService.cs new file mode 100644 index 000000000..5b70569b5 --- /dev/null +++ b/src/UWP/Services/HttpService.cs @@ -0,0 +1,16 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Bit.App; + +namespace Bit.UWP.Services +{ + public class HttpService : IHttpService + { + public ApiHttpClient ApiClient => new ApiHttpClient(); + public IdentityHttpClient IdentityClient => new IdentityHttpClient(); + } +} diff --git a/src/UWP/Services/KeyDerivationService.cs b/src/UWP/Services/KeyDerivationService.cs new file mode 100644 index 000000000..98b7a6b96 --- /dev/null +++ b/src/UWP/Services/KeyDerivationService.cs @@ -0,0 +1,37 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using Windows.Security.Cryptography; +using Windows.Security.Cryptography.Core; +using Windows.Storage.Streams; + +namespace Bit.UWP.Services +{ + public class KeyDerivationService : IKeyDerivationService + { + private const int KeyLength = 32; // 32 bytes + + public byte[] DeriveKey(byte[] password, byte[] salt, uint rounds) + { + IBuffer buffSalt = salt.AsBuffer(); + IBuffer buffPassword = password.AsBuffer(); + KeyDerivationAlgorithmProvider provider = KeyDerivationAlgorithmProvider.OpenAlgorithm(KeyDerivationAlgorithmNames.Pbkdf2Sha256); + KeyDerivationParameters pbkdf2Params = KeyDerivationParameters.BuildForPbkdf2(buffSalt, rounds); + CryptographicKey keyOriginal = provider.CreateKey(buffPassword); + + IBuffer keyDerived = CryptographicEngine.DeriveKeyMaterial( + keyOriginal, + pbkdf2Params, + KeyLength + ); + + return keyDerived.ToArray(); + } + } +} diff --git a/src/UWP/Services/LocalizeService.cs b/src/UWP/Services/LocalizeService.cs new file mode 100644 index 000000000..98c86066d --- /dev/null +++ b/src/UWP/Services/LocalizeService.cs @@ -0,0 +1,30 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Globalization; +using Windows.Globalization; + +namespace Bit.UWP.Services +{ + public class LocalizeService : ILocalizeService + { + public CultureInfo GetCurrentCultureInfo() + { + return CultureInfo.CurrentCulture; + } + + public void SetLocale(CultureInfo locale) + { + CultureInfo.CurrentCulture = locale; + CultureInfo.CurrentUICulture = locale; + CultureInfo.DefaultThreadCurrentCulture = locale; + CultureInfo.DefaultThreadCurrentUICulture = locale; + + ApplicationLanguages.PrimaryLanguageOverride = locale.TwoLetterISOLanguageName; + + } + } +} diff --git a/src/UWP/Services/LogService.cs b/src/UWP/Services/LogService.cs new file mode 100644 index 000000000..d4e59906b --- /dev/null +++ b/src/UWP/Services/LogService.cs @@ -0,0 +1,18 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bit.UWP.Services +{ + public class LogService : ILogService + { + public void WriteLine(string message) + { + Debug.WriteLine(message); + } + } +} diff --git a/src/UWP/Services/ReflectionService.cs b/src/UWP/Services/ReflectionService.cs new file mode 100644 index 000000000..896daf9be --- /dev/null +++ b/src/UWP/Services/ReflectionService.cs @@ -0,0 +1,17 @@ +using System; +using System.Reflection; +using Bit.App.Abstractions; +using Bit.App.Controls; +using Xamarin.Forms; + +namespace Bit.UWP.Services +{ + public class ReflectionService : IReflectionService + { + public Func GetVisualElementOnSizeRequest(ExtendedTableView tableView) + { + //todo + throw new NotImplementedException(); + } + } +} diff --git a/src/UWP/Services/SecureStorageService.cs b/src/UWP/Services/SecureStorageService.cs new file mode 100644 index 000000000..8f432a2fd --- /dev/null +++ b/src/UWP/Services/SecureStorageService.cs @@ -0,0 +1,58 @@ +using Bit.App.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.Security.Credentials; + +namespace Bit.UWP.Services +{ + public class SecureStorageService : ISecureStorageService + { + private const string ResourceName = "bitwarden"; + private PasswordVault _vault = new PasswordVault(); + + public bool Contains(string key) + { + try + { + var entry = _vault.Retrieve(ResourceName, key); + return entry != null; + } + catch + { + return false; + } + } + + public void Delete(string key) + { + var entry = _vault.Retrieve(ResourceName, key); + if (entry != null) + _vault.Remove(entry); + } + + public byte[] Retrieve(string key) + { + try + { + var entry = _vault.Retrieve(ResourceName, key); + if (entry != null) + return Convert.FromBase64String(entry.Password); + else + return null; + } + catch + { + return null; + } + } + + public void Store(string key, byte[] dataBytes) + { + var data = Convert.ToBase64String(dataBytes); + _vault.Add(new PasswordCredential(ResourceName, key, data)); + } + } +} diff --git a/src/UWP/Services/SqlService.cs b/src/UWP/Services/SqlService.cs new file mode 100644 index 000000000..a9ba7c59d --- /dev/null +++ b/src/UWP/Services/SqlService.cs @@ -0,0 +1,22 @@ +using Bit.App.Abstractions; +using SQLite; +using System; +using System.IO; +using Windows.ApplicationModel; +using Windows.Storage; + +namespace Bit.UWP.Services +{ + public class SqlService : ISqlService + { + public SQLiteConnection GetConnection() + { + var sqliteFilename = "bitwarden.db3"; + + string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, sqliteFilename); + var conn = new SQLite.SQLiteConnection(path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.FullMutex | SQLiteOpenFlags.SharedCache); + // Return the database connection + return conn; + } + } +} \ No newline at end of file diff --git a/src/UWP/UWP.csproj b/src/UWP/UWP.csproj new file mode 100644 index 000000000..27897badd --- /dev/null +++ b/src/UWP/UWP.csproj @@ -0,0 +1,210 @@ + + + + + Debug + x86 + {3A2D5669-ED71-4F2B-BA85-2D36BAA05141} + AppContainerExe + Properties + Bit.UWP + Bit.UWP + en-US + UAP + 10.0.15063.0 + 10.0.10586.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + UWP_TemporaryKey.pfx + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + MainPage.xaml + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 6.3.10 + + + 5.4.0 + + + 2.0.0 + + + 9.0.1 + + + 2.0.147 + + + 1.4.5 + + + 4.0.8 + + + 1.5.166-beta + + + 3.0.2 + + + 1.2.4 + + + 3.0.1 + + + 2.2.9 + + + 2.3.4.267 + + + 2.0.5782 + + + 2.0.5782 + + + + + {b490c5da-639e-4994-abd2-54222b8a348e} + App + + + + + Windows Mobile Extensions for the UWP + + + + + 14.0 + + + + \ No newline at end of file diff --git a/src/iOS.Core/iOS.Core.csproj b/src/iOS.Core/iOS.Core.csproj index bdd403ebd..a2cc68663 100644 --- a/src/iOS.Core/iOS.Core.csproj +++ b/src/iOS.Core/iOS.Core.csproj @@ -53,8 +53,8 @@ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll - - ..\..\packages\sqlite-net-pcl.1.4.118\lib\netstandard1.1\SQLite-net.dll + + ..\..\packages\sqlite-net-pcl.1.5.166-beta\lib\netstandard1.1\SQLite-net.dll ..\..\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\Xamarin.iOS10\SQLitePCLRaw.batteries_green.dll diff --git a/src/iOS.Core/packages.config b/src/iOS.Core/packages.config index 701fb3fbe..212e96a10 100644 --- a/src/iOS.Core/packages.config +++ b/src/iOS.Core/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/iOS.Extension/iOS.Extension.csproj b/src/iOS.Extension/iOS.Extension.csproj index 7cce6e14d..7903e7f5f 100644 --- a/src/iOS.Extension/iOS.Extension.csproj +++ b/src/iOS.Extension/iOS.Extension.csproj @@ -321,8 +321,8 @@ ..\..\packages\SimpleInjector.4.0.8\lib\netstandard1.3\SimpleInjector.dll - - ..\..\packages\sqlite-net-pcl.1.4.118\lib\netstandard1.1\SQLite-net.dll + + ..\..\packages\sqlite-net-pcl.1.5.166-beta\lib\netstandard1.1\SQLite-net.dll ..\..\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\Xamarin.iOS10\SQLitePCLRaw.batteries_green.dll diff --git a/src/iOS.Extension/packages.config b/src/iOS.Extension/packages.config index 53f123031..b0f081f22 100644 --- a/src/iOS.Extension/packages.config +++ b/src/iOS.Extension/packages.config @@ -14,7 +14,7 @@ - + diff --git a/src/iOS/iOS.csproj b/src/iOS/iOS.csproj index 2caed6351..e6d460c00 100644 --- a/src/iOS/iOS.csproj +++ b/src/iOS/iOS.csproj @@ -335,8 +335,8 @@ ..\..\packages\SimpleInjector.4.0.8\lib\netstandard1.3\SimpleInjector.dll - - ..\..\packages\sqlite-net-pcl.1.4.118\lib\netstandard1.1\SQLite-net.dll + + ..\..\packages\sqlite-net-pcl.1.5.166-beta\lib\netstandard1.1\SQLite-net.dll ..\..\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\Xamarin.iOS10\SQLitePCLRaw.batteries_green.dll diff --git a/src/iOS/packages.config b/src/iOS/packages.config index 0f5c044ff..27e476071 100644 --- a/src/iOS/packages.config +++ b/src/iOS/packages.config @@ -17,7 +17,7 @@ - +