added lock fingerprint page. added view for ios to hide app when backgrounded from multitask window.

This commit is contained in:
Kyle Spearrin 2016-05-21 12:32:34 -04:00
parent 54652e639b
commit c408614a85
12 changed files with 451 additions and 215 deletions

View file

@ -118,6 +118,14 @@
<HintPath>..\..\packages\Xam.Plugin.Connectivity.2.1.2\lib\MonoAndroid10\Plugin.Connectivity.Abstractions.dll</HintPath> <HintPath>..\..\packages\Xam.Plugin.Connectivity.2.1.2\lib\MonoAndroid10\Plugin.Connectivity.Abstractions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Plugin.Fingerprint, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Plugin.Fingerprint.1.1.1-beta\lib\MonoAndroid\Plugin.Fingerprint.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Plugin.Fingerprint.Abstractions, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Plugin.Fingerprint.1.1.1-beta\lib\MonoAndroid\Plugin.Fingerprint.Abstractions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Plugin.Settings, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Plugin.Settings, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\MonoAndroid10\Plugin.Settings.dll</HintPath> <HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\MonoAndroid10\Plugin.Settings.dll</HintPath>
<Private>True</Private> <Private>True</Private>

View file

@ -16,6 +16,9 @@ using Plugin.Settings;
using Plugin.Connectivity; using Plugin.Connectivity;
using Acr.UserDialogs; using Acr.UserDialogs;
using Bit.App.Repositories; using Bit.App.Repositories;
using Plugin.Fingerprint;
using Plugin.Fingerprint.Abstractions;
using Plugin.Settings.Abstractions;
namespace Bit.Android namespace Bit.Android
{ {
@ -33,7 +36,11 @@ namespace Bit.Android
SetIoc(); SetIoc();
} }
LoadApplication(new App.App(Resolver.Resolve<IAuthService>(), Resolver.Resolve<IDatabaseService>())); LoadApplication(new App.App(
Resolver.Resolve<IAuthService>(),
Resolver.Resolve<IDatabaseService>(),
Resolver.Resolve<IFingerprint>(),
Resolver.Resolve<ISettings>()));
} }
private void SetIoc() private void SetIoc()
@ -60,7 +67,8 @@ namespace Bit.Android
// Other // Other
.RegisterInstance(CrossSettings.Current, new ContainerControlledLifetimeManager()) .RegisterInstance(CrossSettings.Current, new ContainerControlledLifetimeManager())
.RegisterInstance(CrossConnectivity.Current, new ContainerControlledLifetimeManager()) .RegisterInstance(CrossConnectivity.Current, new ContainerControlledLifetimeManager())
.RegisterInstance(UserDialogs.Instance, new ContainerControlledLifetimeManager()); .RegisterInstance(UserDialogs.Instance, new ContainerControlledLifetimeManager())
.RegisterInstance(CrossFingerprint.Current, new ContainerControlledLifetimeManager());
Resolver.SetResolver(new UnityResolver(container)); Resolver.SetResolver(new UnityResolver(container));

View file

@ -2,5 +2,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Bit.Android" android:versionCode="1" android:versionName="0.0.1" android:installLocation="auto"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Bit.Android" android:versionCode="1" android:versionName="0.0.1" android:installLocation="auto">
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" /> <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<application android:label="bitwarden" android:theme="@style/BitwardenTheme"></application> <application android:label="bitwarden" android:theme="@style/BitwardenTheme"></application>
</manifest> </manifest>

View file

@ -64,6 +64,10 @@ namespace Bit.Android
global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextColor = global::Bit.Android.Resource.Styleable.ProgressWheel_ahTextColor; global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextColor = global::Bit.Android.Resource.Styleable.ProgressWheel_ahTextColor;
global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextSize = global::Bit.Android.Resource.Styleable.ProgressWheel_ahTextSize; global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextSize = global::Bit.Android.Resource.Styleable.ProgressWheel_ahTextSize;
global::ModernHttpClient.Resource.String.library_name = global::Bit.Android.Resource.String.library_name; global::ModernHttpClient.Resource.String.library_name = global::Bit.Android.Resource.String.library_name;
global::Plugin.Fingerprint.Resource.Drawable.fingerprint_white = global::Bit.Android.Resource.Drawable.fingerprint_white;
global::Plugin.Fingerprint.Resource.Id.fingerprint_btnCancel = global::Bit.Android.Resource.Id.fingerprint_btnCancel;
global::Plugin.Fingerprint.Resource.Id.fingerprint_txtReason = global::Bit.Android.Resource.Id.fingerprint_txtReason;
global::Plugin.Fingerprint.Resource.Layout.FingerprintDialog = global::Bit.Android.Resource.Layout.FingerprintDialog;
global::Splat.Resource.String.library_name = global::Bit.Android.Resource.String.library_name; global::Splat.Resource.String.library_name = global::Bit.Android.Resource.String.library_name;
global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSize = global::Bit.Android.Resource.Attribute.actionBarSize; global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSize = global::Bit.Android.Resource.Attribute.actionBarSize;
} }
@ -2045,277 +2049,280 @@ namespace Bit.Android
public const int fa_folder_open = 2130837581; public const int fa_folder_open = 2130837581;
// aapt resource value: 0x7f02004e // aapt resource value: 0x7f02004e
public const int ic_audiotrack = 2130837582; public const int fingerprint_white = 2130837582;
// aapt resource value: 0x7f02004f // aapt resource value: 0x7f02004f
public const int ic_audiotrack_light = 2130837583; public const int ic_audiotrack = 2130837583;
// aapt resource value: 0x7f020050 // aapt resource value: 0x7f020050
public const int ic_bluetooth_grey = 2130837584; public const int ic_audiotrack_light = 2130837584;
// aapt resource value: 0x7f020051 // aapt resource value: 0x7f020051
public const int ic_bluetooth_white = 2130837585; public const int ic_bluetooth_grey = 2130837585;
// aapt resource value: 0x7f020052 // aapt resource value: 0x7f020052
public const int ic_cast_dark = 2130837586; public const int ic_bluetooth_white = 2130837586;
// aapt resource value: 0x7f020053 // aapt resource value: 0x7f020053
public const int ic_cast_disabled_light = 2130837587; public const int ic_cast_dark = 2130837587;
// aapt resource value: 0x7f020054 // aapt resource value: 0x7f020054
public const int ic_cast_grey = 2130837588; public const int ic_cast_disabled_light = 2130837588;
// aapt resource value: 0x7f020055 // aapt resource value: 0x7f020055
public const int ic_cast_light = 2130837589; public const int ic_cast_grey = 2130837589;
// aapt resource value: 0x7f020056 // aapt resource value: 0x7f020056
public const int ic_cast_off_light = 2130837590; public const int ic_cast_light = 2130837590;
// aapt resource value: 0x7f020057 // aapt resource value: 0x7f020057
public const int ic_cast_on_0_light = 2130837591; public const int ic_cast_off_light = 2130837591;
// aapt resource value: 0x7f020058 // aapt resource value: 0x7f020058
public const int ic_cast_on_1_light = 2130837592; public const int ic_cast_on_0_light = 2130837592;
// aapt resource value: 0x7f020059 // aapt resource value: 0x7f020059
public const int ic_cast_on_2_light = 2130837593; public const int ic_cast_on_1_light = 2130837593;
// aapt resource value: 0x7f02005a // aapt resource value: 0x7f02005a
public const int ic_cast_on_light = 2130837594; public const int ic_cast_on_2_light = 2130837594;
// aapt resource value: 0x7f02005b // aapt resource value: 0x7f02005b
public const int ic_cast_white = 2130837595; public const int ic_cast_on_light = 2130837595;
// aapt resource value: 0x7f02005c // aapt resource value: 0x7f02005c
public const int ic_close_dark = 2130837596; public const int ic_cast_white = 2130837596;
// aapt resource value: 0x7f02005d // aapt resource value: 0x7f02005d
public const int ic_close_light = 2130837597; public const int ic_close_dark = 2130837597;
// aapt resource value: 0x7f02005e // aapt resource value: 0x7f02005e
public const int ic_collapse = 2130837598; public const int ic_close_light = 2130837598;
// aapt resource value: 0x7f02005f // aapt resource value: 0x7f02005f
public const int ic_collapse_00000 = 2130837599; public const int ic_collapse = 2130837599;
// aapt resource value: 0x7f020060 // aapt resource value: 0x7f020060
public const int ic_collapse_00001 = 2130837600; public const int ic_collapse_00000 = 2130837600;
// aapt resource value: 0x7f020061 // aapt resource value: 0x7f020061
public const int ic_collapse_00002 = 2130837601; public const int ic_collapse_00001 = 2130837601;
// aapt resource value: 0x7f020062 // aapt resource value: 0x7f020062
public const int ic_collapse_00003 = 2130837602; public const int ic_collapse_00002 = 2130837602;
// aapt resource value: 0x7f020063 // aapt resource value: 0x7f020063
public const int ic_collapse_00004 = 2130837603; public const int ic_collapse_00003 = 2130837603;
// aapt resource value: 0x7f020064 // aapt resource value: 0x7f020064
public const int ic_collapse_00005 = 2130837604; public const int ic_collapse_00004 = 2130837604;
// aapt resource value: 0x7f020065 // aapt resource value: 0x7f020065
public const int ic_collapse_00006 = 2130837605; public const int ic_collapse_00005 = 2130837605;
// aapt resource value: 0x7f020066 // aapt resource value: 0x7f020066
public const int ic_collapse_00007 = 2130837606; public const int ic_collapse_00006 = 2130837606;
// aapt resource value: 0x7f020067 // aapt resource value: 0x7f020067
public const int ic_collapse_00008 = 2130837607; public const int ic_collapse_00007 = 2130837607;
// aapt resource value: 0x7f020068 // aapt resource value: 0x7f020068
public const int ic_collapse_00009 = 2130837608; public const int ic_collapse_00008 = 2130837608;
// aapt resource value: 0x7f020069 // aapt resource value: 0x7f020069
public const int ic_collapse_00010 = 2130837609; public const int ic_collapse_00009 = 2130837609;
// aapt resource value: 0x7f02006a // aapt resource value: 0x7f02006a
public const int ic_collapse_00011 = 2130837610; public const int ic_collapse_00010 = 2130837610;
// aapt resource value: 0x7f02006b // aapt resource value: 0x7f02006b
public const int ic_collapse_00012 = 2130837611; public const int ic_collapse_00011 = 2130837611;
// aapt resource value: 0x7f02006c // aapt resource value: 0x7f02006c
public const int ic_collapse_00013 = 2130837612; public const int ic_collapse_00012 = 2130837612;
// aapt resource value: 0x7f02006d // aapt resource value: 0x7f02006d
public const int ic_collapse_00014 = 2130837613; public const int ic_collapse_00013 = 2130837613;
// aapt resource value: 0x7f02006e // aapt resource value: 0x7f02006e
public const int ic_collapse_00015 = 2130837614; public const int ic_collapse_00014 = 2130837614;
// aapt resource value: 0x7f02006f // aapt resource value: 0x7f02006f
public const int ic_errorstatus = 2130837615; public const int ic_collapse_00015 = 2130837615;
// aapt resource value: 0x7f020070 // aapt resource value: 0x7f020070
public const int ic_expand = 2130837616; public const int ic_errorstatus = 2130837616;
// aapt resource value: 0x7f020071 // aapt resource value: 0x7f020071
public const int ic_expand_00000 = 2130837617; public const int ic_expand = 2130837617;
// aapt resource value: 0x7f020072 // aapt resource value: 0x7f020072
public const int ic_expand_00001 = 2130837618; public const int ic_expand_00000 = 2130837618;
// aapt resource value: 0x7f020073 // aapt resource value: 0x7f020073
public const int ic_expand_00002 = 2130837619; public const int ic_expand_00001 = 2130837619;
// aapt resource value: 0x7f020074 // aapt resource value: 0x7f020074
public const int ic_expand_00003 = 2130837620; public const int ic_expand_00002 = 2130837620;
// aapt resource value: 0x7f020075 // aapt resource value: 0x7f020075
public const int ic_expand_00004 = 2130837621; public const int ic_expand_00003 = 2130837621;
// aapt resource value: 0x7f020076 // aapt resource value: 0x7f020076
public const int ic_expand_00005 = 2130837622; public const int ic_expand_00004 = 2130837622;
// aapt resource value: 0x7f020077 // aapt resource value: 0x7f020077
public const int ic_expand_00006 = 2130837623; public const int ic_expand_00005 = 2130837623;
// aapt resource value: 0x7f020078 // aapt resource value: 0x7f020078
public const int ic_expand_00007 = 2130837624; public const int ic_expand_00006 = 2130837624;
// aapt resource value: 0x7f020079 // aapt resource value: 0x7f020079
public const int ic_expand_00008 = 2130837625; public const int ic_expand_00007 = 2130837625;
// aapt resource value: 0x7f02007a // aapt resource value: 0x7f02007a
public const int ic_expand_00009 = 2130837626; public const int ic_expand_00008 = 2130837626;
// aapt resource value: 0x7f02007b // aapt resource value: 0x7f02007b
public const int ic_expand_00010 = 2130837627; public const int ic_expand_00009 = 2130837627;
// aapt resource value: 0x7f02007c // aapt resource value: 0x7f02007c
public const int ic_expand_00011 = 2130837628; public const int ic_expand_00010 = 2130837628;
// aapt resource value: 0x7f02007d // aapt resource value: 0x7f02007d
public const int ic_expand_00012 = 2130837629; public const int ic_expand_00011 = 2130837629;
// aapt resource value: 0x7f02007e // aapt resource value: 0x7f02007e
public const int ic_expand_00013 = 2130837630; public const int ic_expand_00012 = 2130837630;
// aapt resource value: 0x7f02007f // aapt resource value: 0x7f02007f
public const int ic_expand_00014 = 2130837631; public const int ic_expand_00013 = 2130837631;
// aapt resource value: 0x7f020080 // aapt resource value: 0x7f020080
public const int ic_expand_00015 = 2130837632; public const int ic_expand_00014 = 2130837632;
// aapt resource value: 0x7f020081 // aapt resource value: 0x7f020081
public const int ic_media_pause = 2130837633; public const int ic_expand_00015 = 2130837633;
// aapt resource value: 0x7f020082 // aapt resource value: 0x7f020082
public const int ic_media_play = 2130837634; public const int ic_media_pause = 2130837634;
// aapt resource value: 0x7f020083 // aapt resource value: 0x7f020083
public const int ic_media_route_disabled_mono_dark = 2130837635; public const int ic_media_play = 2130837635;
// aapt resource value: 0x7f020084 // aapt resource value: 0x7f020084
public const int ic_media_route_off_mono_dark = 2130837636; public const int ic_media_route_disabled_mono_dark = 2130837636;
// aapt resource value: 0x7f020085 // aapt resource value: 0x7f020085
public const int ic_media_route_on_0_mono_dark = 2130837637; public const int ic_media_route_off_mono_dark = 2130837637;
// aapt resource value: 0x7f020086 // aapt resource value: 0x7f020086
public const int ic_media_route_on_1_mono_dark = 2130837638; public const int ic_media_route_on_0_mono_dark = 2130837638;
// aapt resource value: 0x7f020087 // aapt resource value: 0x7f020087
public const int ic_media_route_on_2_mono_dark = 2130837639; public const int ic_media_route_on_1_mono_dark = 2130837639;
// aapt resource value: 0x7f020088 // aapt resource value: 0x7f020088
public const int ic_media_route_on_mono_dark = 2130837640; public const int ic_media_route_on_2_mono_dark = 2130837640;
// aapt resource value: 0x7f020089 // aapt resource value: 0x7f020089
public const int ic_pause_dark = 2130837641; public const int ic_media_route_on_mono_dark = 2130837641;
// aapt resource value: 0x7f02008a // aapt resource value: 0x7f02008a
public const int ic_pause_light = 2130837642; public const int ic_pause_dark = 2130837642;
// aapt resource value: 0x7f02008b // aapt resource value: 0x7f02008b
public const int ic_play_dark = 2130837643; public const int ic_pause_light = 2130837643;
// aapt resource value: 0x7f02008c // aapt resource value: 0x7f02008c
public const int ic_play_light = 2130837644; public const int ic_play_dark = 2130837644;
// aapt resource value: 0x7f02008d // aapt resource value: 0x7f02008d
public const int ic_speaker_dark = 2130837645; public const int ic_play_light = 2130837645;
// aapt resource value: 0x7f02008e // aapt resource value: 0x7f02008e
public const int ic_speaker_group_dark = 2130837646; public const int ic_speaker_dark = 2130837646;
// aapt resource value: 0x7f02008f // aapt resource value: 0x7f02008f
public const int ic_speaker_group_light = 2130837647; public const int ic_speaker_group_dark = 2130837647;
// aapt resource value: 0x7f020090 // aapt resource value: 0x7f020090
public const int ic_speaker_light = 2130837648; public const int ic_speaker_group_light = 2130837648;
// aapt resource value: 0x7f020091 // aapt resource value: 0x7f020091
public const int ic_successstatus = 2130837649; public const int ic_speaker_light = 2130837649;
// aapt resource value: 0x7f020092 // aapt resource value: 0x7f020092
public const int ic_tv_dark = 2130837650; public const int ic_successstatus = 2130837650;
// aapt resource value: 0x7f020093 // aapt resource value: 0x7f020093
public const int ic_tv_light = 2130837651; public const int ic_tv_dark = 2130837651;
// aapt resource value: 0x7f020094 // aapt resource value: 0x7f020094
public const int icon = 2130837652; public const int ic_tv_light = 2130837652;
// aapt resource value: 0x7f020095 // aapt resource value: 0x7f020095
public const int ion_chevron_right = 2130837653; public const int icon = 2130837653;
// aapt resource value: 0x7f020096 // aapt resource value: 0x7f020096
public const int ion_plus = 2130837654; public const int ion_chevron_right = 2130837654;
// aapt resource value: 0x7f020097 // aapt resource value: 0x7f020097
public const int mr_dialog_material_background_dark = 2130837655; public const int ion_plus = 2130837655;
// aapt resource value: 0x7f020098 // aapt resource value: 0x7f020098
public const int mr_dialog_material_background_light = 2130837656; public const int mr_dialog_material_background_dark = 2130837656;
// aapt resource value: 0x7f020099 // aapt resource value: 0x7f020099
public const int mr_ic_audiotrack_light = 2130837657; public const int mr_dialog_material_background_light = 2130837657;
// aapt resource value: 0x7f02009a // aapt resource value: 0x7f02009a
public const int mr_ic_cast_dark = 2130837658; public const int mr_ic_audiotrack_light = 2130837658;
// aapt resource value: 0x7f02009b // aapt resource value: 0x7f02009b
public const int mr_ic_cast_light = 2130837659; public const int mr_ic_cast_dark = 2130837659;
// aapt resource value: 0x7f02009c // aapt resource value: 0x7f02009c
public const int mr_ic_close_dark = 2130837660; public const int mr_ic_cast_light = 2130837660;
// aapt resource value: 0x7f02009d // aapt resource value: 0x7f02009d
public const int mr_ic_close_light = 2130837661; public const int mr_ic_close_dark = 2130837661;
// aapt resource value: 0x7f02009e // aapt resource value: 0x7f02009e
public const int mr_ic_media_route_connecting_mono_dark = 2130837662; public const int mr_ic_close_light = 2130837662;
// aapt resource value: 0x7f02009f // aapt resource value: 0x7f02009f
public const int mr_ic_media_route_connecting_mono_light = 2130837663; public const int mr_ic_media_route_connecting_mono_dark = 2130837663;
// aapt resource value: 0x7f0200a0 // aapt resource value: 0x7f0200a0
public const int mr_ic_media_route_mono_dark = 2130837664; public const int mr_ic_media_route_connecting_mono_light = 2130837664;
// aapt resource value: 0x7f0200a1 // aapt resource value: 0x7f0200a1
public const int mr_ic_media_route_mono_light = 2130837665; public const int mr_ic_media_route_mono_dark = 2130837665;
// aapt resource value: 0x7f0200a2 // aapt resource value: 0x7f0200a2
public const int mr_ic_pause_dark = 2130837666; public const int mr_ic_media_route_mono_light = 2130837666;
// aapt resource value: 0x7f0200a3 // aapt resource value: 0x7f0200a3
public const int mr_ic_pause_light = 2130837667; public const int mr_ic_pause_dark = 2130837667;
// aapt resource value: 0x7f0200a4 // aapt resource value: 0x7f0200a4
public const int mr_ic_play_dark = 2130837668; public const int mr_ic_pause_light = 2130837668;
// aapt resource value: 0x7f0200a5 // aapt resource value: 0x7f0200a5
public const int mr_ic_play_light = 2130837669; public const int mr_ic_play_dark = 2130837669;
// aapt resource value: 0x7f0200a8
public const int notification_template_icon_bg = 2130837672;
// aapt resource value: 0x7f0200a6 // aapt resource value: 0x7f0200a6
public const int roundedbg = 2130837670; public const int mr_ic_play_light = 2130837670;
// aapt resource value: 0x7f0200a9
public const int notification_template_icon_bg = 2130837673;
// aapt resource value: 0x7f0200a7 // aapt resource value: 0x7f0200a7
public const int roundedbgdark = 2130837671; public const int roundedbg = 2130837671;
// aapt resource value: 0x7f0200a8
public const int roundedbgdark = 2130837672;
static Drawable() static Drawable()
{ {
@ -2330,8 +2337,8 @@ namespace Bit.Android
public partial class Id public partial class Id
{ {
// aapt resource value: 0x7f07008f // aapt resource value: 0x7f070091
public const int action0 = 2131165327; public const int action0 = 2131165329;
// aapt resource value: 0x7f07005a // aapt resource value: 0x7f07005a
public const int action_bar = 2131165274; public const int action_bar = 2131165274;
@ -2357,8 +2364,8 @@ namespace Bit.Android
// aapt resource value: 0x7f07005b // aapt resource value: 0x7f07005b
public const int action_context_bar = 2131165275; public const int action_context_bar = 2131165275;
// aapt resource value: 0x7f070093 // aapt resource value: 0x7f070095
public const int action_divider = 2131165331; public const int action_divider = 2131165333;
// aapt resource value: 0x7f070003 // aapt resource value: 0x7f070003
public const int action_menu_divider = 2131165187; public const int action_menu_divider = 2131165187;
@ -2393,8 +2400,8 @@ namespace Bit.Android
// aapt resource value: 0x7f070044 // aapt resource value: 0x7f070044
public const int buttonPanel = 2131165252; public const int buttonPanel = 2131165252;
// aapt resource value: 0x7f070090 // aapt resource value: 0x7f070092
public const int cancel_action = 2131165328; public const int cancel_action = 2131165330;
// aapt resource value: 0x7f07002b // aapt resource value: 0x7f07002b
public const int center = 2131165227; public const int center = 2131165227;
@ -2408,8 +2415,8 @@ namespace Bit.Android
// aapt resource value: 0x7f070052 // aapt resource value: 0x7f070052
public const int checkbox = 2131165266; public const int checkbox = 2131165266;
// aapt resource value: 0x7f070096 // aapt resource value: 0x7f070098
public const int chronometer = 2131165334; public const int chronometer = 2131165336;
// aapt resource value: 0x7f070033 // aapt resource value: 0x7f070033
public const int clip_horizontal = 2131165235; public const int clip_horizontal = 2131165235;
@ -2459,8 +2466,8 @@ namespace Bit.Android
// aapt resource value: 0x7f07001c // aapt resource value: 0x7f07001c
public const int end = 2131165212; public const int end = 2131165212;
// aapt resource value: 0x7f07009b // aapt resource value: 0x7f07009d
public const int end_padder = 2131165339; public const int end_padder = 2131165341;
// aapt resource value: 0x7f070023 // aapt resource value: 0x7f070023
public const int enterAlways = 2131165219; public const int enterAlways = 2131165219;
@ -2486,6 +2493,12 @@ namespace Bit.Android
// aapt resource value: 0x7f07002e // aapt resource value: 0x7f07002e
public const int fill_vertical = 2131165230; public const int fill_vertical = 2131165230;
// aapt resource value: 0x7f070073
public const int fingerprint_btnCancel = 2131165299;
// aapt resource value: 0x7f070072
public const int fingerprint_txtReason = 2131165298;
// aapt resource value: 0x7f070038 // aapt resource value: 0x7f070038
public const int @fixed = 2131165240; public const int @fixed = 2131165240;
@ -2504,8 +2517,8 @@ namespace Bit.Android
// aapt resource value: 0x7f07003f // aapt resource value: 0x7f07003f
public const int image = 2131165247; public const int image = 2131165247;
// aapt resource value: 0x7f07009a // aapt resource value: 0x7f07009c
public const int info = 2131165338; public const int info = 2131165340;
// aapt resource value: 0x7f070000 // aapt resource value: 0x7f070000
public const int item_touch_helper_previous_elevation = 2131165184; public const int item_touch_helper_previous_elevation = 2131165184;
@ -2513,11 +2526,11 @@ namespace Bit.Android
// aapt resource value: 0x7f07002f // aapt resource value: 0x7f07002f
public const int left = 2131165231; public const int left = 2131165231;
// aapt resource value: 0x7f070094 // aapt resource value: 0x7f070096
public const int line1 = 2131165332; public const int line1 = 2131165334;
// aapt resource value: 0x7f070098 // aapt resource value: 0x7f07009a
public const int line3 = 2131165336; public const int line3 = 2131165338;
// aapt resource value: 0x7f07000b // aapt resource value: 0x7f07000b
public const int listMode = 2131165195; public const int listMode = 2131165195;
@ -2525,17 +2538,17 @@ namespace Bit.Android
// aapt resource value: 0x7f070041 // aapt resource value: 0x7f070041
public const int list_item = 2131165249; public const int list_item = 2131165249;
// aapt resource value: 0x7f070076
public const int loadingImage = 2131165302;
// aapt resource value: 0x7f070074 // aapt resource value: 0x7f070074
public const int loadingImage = 2131165300; public const int loadingProgressBar = 2131165300;
// aapt resource value: 0x7f070072 // aapt resource value: 0x7f070077
public const int loadingProgressBar = 2131165298; public const int loadingProgressWheel = 2131165303;
// aapt resource value: 0x7f070075 // aapt resource value: 0x7f070094
public const int loadingProgressWheel = 2131165301; public const int media_actions = 2131165332;
// aapt resource value: 0x7f070092
public const int media_actions = 2131165330;
// aapt resource value: 0x7f07001d // aapt resource value: 0x7f07001d
public const int middle = 2131165213; public const int middle = 2131165213;
@ -2543,77 +2556,77 @@ namespace Bit.Android
// aapt resource value: 0x7f070037 // aapt resource value: 0x7f070037
public const int mini = 2131165239; public const int mini = 2131165239;
// aapt resource value: 0x7f070081 // aapt resource value: 0x7f070083
public const int mr_art = 2131165313; public const int mr_art = 2131165315;
// aapt resource value: 0x7f070076
public const int mr_chooser_list = 2131165302;
// aapt resource value: 0x7f070079
public const int mr_chooser_route_desc = 2131165305;
// aapt resource value: 0x7f070077
public const int mr_chooser_route_icon = 2131165303;
// aapt resource value: 0x7f070078 // aapt resource value: 0x7f070078
public const int mr_chooser_route_name = 2131165304; public const int mr_chooser_list = 2131165304;
// aapt resource value: 0x7f07007e
public const int mr_close = 2131165310;
// aapt resource value: 0x7f070084
public const int mr_control_divider = 2131165316;
// aapt resource value: 0x7f07008a
public const int mr_control_play_pause = 2131165322;
// aapt resource value: 0x7f07008d
public const int mr_control_subtitle = 2131165325;
// aapt resource value: 0x7f07008c
public const int mr_control_title = 2131165324;
// aapt resource value: 0x7f07008b
public const int mr_control_title_container = 2131165323;
// aapt resource value: 0x7f07007f
public const int mr_custom_control = 2131165311;
// aapt resource value: 0x7f070080
public const int mr_default_control = 2131165312;
// aapt resource value: 0x7f07007b // aapt resource value: 0x7f07007b
public const int mr_dialog_area = 2131165307; public const int mr_chooser_route_desc = 2131165307;
// aapt resource value: 0x7f070079
public const int mr_chooser_route_icon = 2131165305;
// aapt resource value: 0x7f07007a // aapt resource value: 0x7f07007a
public const int mr_expandable_area = 2131165306; public const int mr_chooser_route_name = 2131165306;
// aapt resource value: 0x7f07008e // aapt resource value: 0x7f070080
public const int mr_group_expand_collapse = 2131165326; public const int mr_close = 2131165312;
// aapt resource value: 0x7f070082
public const int mr_media_main_control = 2131165314;
// aapt resource value: 0x7f07007d
public const int mr_name = 2131165309;
// aapt resource value: 0x7f070083
public const int mr_playback_control = 2131165315;
// aapt resource value: 0x7f07007c
public const int mr_title_bar = 2131165308;
// aapt resource value: 0x7f070085
public const int mr_volume_control = 2131165317;
// aapt resource value: 0x7f070086 // aapt resource value: 0x7f070086
public const int mr_volume_group_list = 2131165318; public const int mr_control_divider = 2131165318;
// aapt resource value: 0x7f07008c
public const int mr_control_play_pause = 2131165324;
// aapt resource value: 0x7f07008f
public const int mr_control_subtitle = 2131165327;
// aapt resource value: 0x7f07008e
public const int mr_control_title = 2131165326;
// aapt resource value: 0x7f07008d
public const int mr_control_title_container = 2131165325;
// aapt resource value: 0x7f070081
public const int mr_custom_control = 2131165313;
// aapt resource value: 0x7f070082
public const int mr_default_control = 2131165314;
// aapt resource value: 0x7f07007d
public const int mr_dialog_area = 2131165309;
// aapt resource value: 0x7f07007c
public const int mr_expandable_area = 2131165308;
// aapt resource value: 0x7f070090
public const int mr_group_expand_collapse = 2131165328;
// aapt resource value: 0x7f070084
public const int mr_media_main_control = 2131165316;
// aapt resource value: 0x7f07007f
public const int mr_name = 2131165311;
// aapt resource value: 0x7f070085
public const int mr_playback_control = 2131165317;
// aapt resource value: 0x7f07007e
public const int mr_title_bar = 2131165310;
// aapt resource value: 0x7f070087
public const int mr_volume_control = 2131165319;
// aapt resource value: 0x7f070088 // aapt resource value: 0x7f070088
public const int mr_volume_item_icon = 2131165320; public const int mr_volume_group_list = 2131165320;
// aapt resource value: 0x7f070089 // aapt resource value: 0x7f07008a
public const int mr_volume_slider = 2131165321; public const int mr_volume_item_icon = 2131165322;
// aapt resource value: 0x7f07008b
public const int mr_volume_slider = 2131165323;
// aapt resource value: 0x7f070016 // aapt resource value: 0x7f070016
public const int multiply = 2131165206; public const int multiply = 2131165206;
@ -2741,8 +2754,8 @@ namespace Bit.Android
// aapt resource value: 0x7f070031 // aapt resource value: 0x7f070031
public const int start = 2131165233; public const int start = 2131165233;
// aapt resource value: 0x7f070091 // aapt resource value: 0x7f070093
public const int status_bar_latest_event_content = 2131165329; public const int status_bar_latest_event_content = 2131165331;
// aapt resource value: 0x7f070065 // aapt resource value: 0x7f070065
public const int submit_area = 2131165285; public const int submit_area = 2131165285;
@ -2750,20 +2763,20 @@ namespace Bit.Android
// aapt resource value: 0x7f07000d // aapt resource value: 0x7f07000d
public const int tabMode = 2131165197; public const int tabMode = 2131165197;
// aapt resource value: 0x7f070099 // aapt resource value: 0x7f07009b
public const int text = 2131165337; public const int text = 2131165339;
// aapt resource value: 0x7f070097 // aapt resource value: 0x7f070099
public const int text2 = 2131165335; public const int text2 = 2131165337;
// aapt resource value: 0x7f07004d // aapt resource value: 0x7f07004d
public const int textSpacerNoButtons = 2131165261; public const int textSpacerNoButtons = 2131165261;
// aapt resource value: 0x7f070073 // aapt resource value: 0x7f070075
public const int textViewStatus = 2131165299; public const int textViewStatus = 2131165301;
// aapt resource value: 0x7f070095 // aapt resource value: 0x7f070097
public const int time = 2131165333; public const int time = 2131165335;
// aapt resource value: 0x7f070043 // aapt resource value: 0x7f070043
public const int title = 2131165251; public const int title = 2131165251;
@ -2789,8 +2802,8 @@ namespace Bit.Android
// aapt resource value: 0x7f07000a // aapt resource value: 0x7f07000a
public const int view_offset_helper = 2131165194; public const int view_offset_helper = 2131165194;
// aapt resource value: 0x7f070087 // aapt resource value: 0x7f070089
public const int volume_item_container = 2131165319; public const int volume_item_container = 2131165321;
// aapt resource value: 0x7f070022 // aapt resource value: 0x7f070022
public const int withText = 2131165218; public const int withText = 2131165218;
@ -2985,67 +2998,70 @@ namespace Bit.Android
public const int design_navigation_menu_item = 2130903076; public const int design_navigation_menu_item = 2130903076;
// aapt resource value: 0x7f030025 // aapt resource value: 0x7f030025
public const int loading = 2130903077; public const int FingerprintDialog = 2130903077;
// aapt resource value: 0x7f030026 // aapt resource value: 0x7f030026
public const int loadingimage = 2130903078; public const int loading = 2130903078;
// aapt resource value: 0x7f030027 // aapt resource value: 0x7f030027
public const int loadingprogress = 2130903079; public const int loadingimage = 2130903079;
// aapt resource value: 0x7f030028 // aapt resource value: 0x7f030028
public const int mr_chooser_dialog = 2130903080; public const int loadingprogress = 2130903080;
// aapt resource value: 0x7f030029 // aapt resource value: 0x7f030029
public const int mr_chooser_list_item = 2130903081; public const int mr_chooser_dialog = 2130903081;
// aapt resource value: 0x7f03002a // aapt resource value: 0x7f03002a
public const int mr_controller_material_dialog_b = 2130903082; public const int mr_chooser_list_item = 2130903082;
// aapt resource value: 0x7f03002b // aapt resource value: 0x7f03002b
public const int mr_controller_volume_item = 2130903083; public const int mr_controller_material_dialog_b = 2130903083;
// aapt resource value: 0x7f03002c // aapt resource value: 0x7f03002c
public const int mr_playback_control = 2130903084; public const int mr_controller_volume_item = 2130903084;
// aapt resource value: 0x7f03002d // aapt resource value: 0x7f03002d
public const int mr_volume_control = 2130903085; public const int mr_playback_control = 2130903085;
// aapt resource value: 0x7f03002e // aapt resource value: 0x7f03002e
public const int notification_media_action = 2130903086; public const int mr_volume_control = 2130903086;
// aapt resource value: 0x7f03002f // aapt resource value: 0x7f03002f
public const int notification_media_cancel_action = 2130903087; public const int notification_media_action = 2130903087;
// aapt resource value: 0x7f030030 // aapt resource value: 0x7f030030
public const int notification_template_big_media = 2130903088; public const int notification_media_cancel_action = 2130903088;
// aapt resource value: 0x7f030031 // aapt resource value: 0x7f030031
public const int notification_template_big_media_narrow = 2130903089; public const int notification_template_big_media = 2130903089;
// aapt resource value: 0x7f030032 // aapt resource value: 0x7f030032
public const int notification_template_lines = 2130903090; public const int notification_template_big_media_narrow = 2130903090;
// aapt resource value: 0x7f030033 // aapt resource value: 0x7f030033
public const int notification_template_media = 2130903091; public const int notification_template_lines = 2130903091;
// aapt resource value: 0x7f030034 // aapt resource value: 0x7f030034
public const int notification_template_part_chronometer = 2130903092; public const int notification_template_media = 2130903092;
// aapt resource value: 0x7f030035 // aapt resource value: 0x7f030035
public const int notification_template_part_time = 2130903093; public const int notification_template_part_chronometer = 2130903093;
// aapt resource value: 0x7f030036 // aapt resource value: 0x7f030036
public const int select_dialog_item_material = 2130903094; public const int notification_template_part_time = 2130903094;
// aapt resource value: 0x7f030037 // aapt resource value: 0x7f030037
public const int select_dialog_multichoice_material = 2130903095; public const int select_dialog_item_material = 2130903095;
// aapt resource value: 0x7f030038 // aapt resource value: 0x7f030038
public const int select_dialog_singlechoice_material = 2130903096; public const int select_dialog_multichoice_material = 2130903096;
// aapt resource value: 0x7f030039 // aapt resource value: 0x7f030039
public const int support_simple_spinner_dropdown_item = 2130903097; public const int select_dialog_singlechoice_material = 2130903097;
// aapt resource value: 0x7f03003a
public const int support_simple_spinner_dropdown_item = 2130903098;
static Layout() static Layout()
{ {

View file

@ -4,6 +4,7 @@
<package id="Acr.UserDialogs" version="5.0.1" targetFramework="monoandroid60" /> <package id="Acr.UserDialogs" version="5.0.1" targetFramework="monoandroid60" />
<package id="CommonServiceLocator" version="1.3" targetFramework="monoandroid60" /> <package id="CommonServiceLocator" version="1.3" targetFramework="monoandroid60" />
<package id="modernhttpclient" version="2.4.2" targetFramework="monoandroid50" /> <package id="modernhttpclient" version="2.4.2" targetFramework="monoandroid50" />
<package id="Plugin.Fingerprint" version="1.1.1-beta" targetFramework="monoandroid60" />
<package id="Splat" version="1.6.2" targetFramework="monoandroid60" /> <package id="Splat" version="1.6.2" targetFramework="monoandroid60" />
<package id="sqlite-net-pcl" version="1.1.1" targetFramework="monoandroid60" /> <package id="sqlite-net-pcl" version="1.1.1" targetFramework="monoandroid60" />
<package id="SQLitePCL.raw" version="0.8.6" targetFramework="monoandroid60" /> <package id="SQLitePCL.raw" version="0.8.6" targetFramework="monoandroid60" />

View file

@ -5,6 +5,10 @@ using System.Text;
using Bit.App.Abstractions; using Bit.App.Abstractions;
using Bit.App.Pages; using Bit.App.Pages;
using Xamarin.Forms; using Xamarin.Forms;
using System.Diagnostics;
using Plugin.Fingerprint.Abstractions;
using System.Threading.Tasks;
using Plugin.Settings.Abstractions;
namespace Bit.App namespace Bit.App
{ {
@ -12,11 +16,19 @@ namespace Bit.App
{ {
private readonly IDatabaseService _databaseService; private readonly IDatabaseService _databaseService;
private readonly IAuthService _authService; private readonly IAuthService _authService;
private readonly IFingerprint _fingerprint;
private readonly ISettings _settings;
public App(IAuthService authService, IDatabaseService databaseService) public App(
IAuthService authService,
IDatabaseService databaseService,
IFingerprint fingerprint,
ISettings settings)
{ {
_databaseService = databaseService; _databaseService = databaseService;
_authService = authService; _authService = authService;
_fingerprint = fingerprint;
_settings = settings;
if(authService.IsAuthenticated) if(authService.IsAuthenticated)
{ {
@ -28,22 +40,40 @@ namespace Bit.App
} }
MainPage.BackgroundColor = Color.FromHex("ecf0f5"); MainPage.BackgroundColor = Color.FromHex("ecf0f5");
MessagingCenter.Subscribe<App>(this, "Lock", async (sender) =>
{
await CheckLockAsync();
});
} }
protected override void OnStart() protected override void OnStart()
{ {
// Handle when your app starts // Handle when your app starts
CheckLockAsync();
_databaseService.CreateTables(); _databaseService.CreateTables();
Debug.WriteLine("OnStart");
} }
protected override void OnSleep() protected override void OnSleep()
{ {
// Handle when your app sleeps // Handle when your app sleeps
Debug.WriteLine("OnSleep");
} }
protected override void OnResume() protected override void OnResume()
{ {
// Handle when your app resumes // Handle when your app resumes
Debug.WriteLine("OnResume");
}
private async Task CheckLockAsync()
{
if(_authService.IsAuthenticated && Current.MainPage.Navigation.ModalStack.LastOrDefault() as LockFingerprintPage == null)
{
await Current.MainPage.Navigation.PushModalAsync(new LockFingerprintPage(), false);
}
} }
} }
} }

View file

@ -83,6 +83,7 @@
<Compile Include="Pages\LoginNavigationPage.cs" /> <Compile Include="Pages\LoginNavigationPage.cs" />
<Compile Include="Pages\MainPage.cs" /> <Compile Include="Pages\MainPage.cs" />
<Compile Include="Pages\SettingsEditFolderPage.cs" /> <Compile Include="Pages\SettingsEditFolderPage.cs" />
<Compile Include="Pages\LockFingerprintPage.cs" />
<Compile Include="Pages\SyncPage.cs" /> <Compile Include="Pages\SyncPage.cs" />
<Compile Include="Pages\SettingsPage.cs" /> <Compile Include="Pages\SettingsPage.cs" />
<Compile Include="Pages\SettingsListFoldersPage.cs" /> <Compile Include="Pages\SettingsListFoldersPage.cs" />
@ -168,6 +169,14 @@
<HintPath>..\..\packages\Xam.Plugin.Connectivity.2.1.2\lib\portable-net45+wp80+wp81+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+Xamarin.Mac20+UAP10\Plugin.Connectivity.Abstractions.dll</HintPath> <HintPath>..\..\packages\Xam.Plugin.Connectivity.2.1.2\lib\portable-net45+wp80+wp81+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+Xamarin.Mac20+UAP10\Plugin.Connectivity.Abstractions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Plugin.Fingerprint, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Plugin.Fingerprint.1.1.1-beta\lib\portable-net45+win8+wpa81+wp8\Plugin.Fingerprint.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Plugin.Fingerprint.Abstractions, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Plugin.Fingerprint.1.1.1-beta\lib\portable-net45+win8+wpa81+wp8\Plugin.Fingerprint.Abstractions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Plugin.Settings, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Plugin.Settings, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+UAP10\Plugin.Settings.dll</HintPath> <HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+UAP10\Plugin.Settings.dll</HintPath>
<Private>True</Private> <Private>True</Private>

View file

@ -0,0 +1,79 @@
using System;
using System.Threading.Tasks;
using Acr.UserDialogs;
using Bit.App.Abstractions;
using Bit.App.Controls;
using Bit.App.Resources;
using Plugin.Connectivity.Abstractions;
using Xamarin.Forms;
using XLabs.Ioc;
using Plugin.Fingerprint.Abstractions;
using Plugin.Settings.Abstractions;
namespace Bit.App.Pages
{
public class LockFingerprintPage : ContentPage
{
private readonly IFingerprint _fingerprint;
private readonly IAuthService _authService;
private readonly IUserDialogs _userDialogs;
private readonly ISettings _settings;
public LockFingerprintPage()
{
_fingerprint = Resolver.Resolve<IFingerprint>();
_authService = Resolver.Resolve<IAuthService>();
_userDialogs = Resolver.Resolve<IUserDialogs>();
_settings = Resolver.Resolve<ISettings>();
Init();
}
public void Init()
{
CheckFingerprintAsync();
var fingerprintButton = new Button
{
Text = "Use Fingerprint to Unlock",
Command = new Command(async () => await CheckFingerprintAsync()),
VerticalOptions = LayoutOptions.EndAndExpand
};
var logoutButton = new Button
{
Text = AppResources.LogOut,
Command = new Command(async () => await LogoutAsync()),
VerticalOptions = LayoutOptions.End
};
var stackLayout = new StackLayout { Padding = new Thickness( 30, 40), Spacing = 10 };
stackLayout.Children.Add(fingerprintButton);
stackLayout.Children.Add(logoutButton);
Title = "Verify Fingerprint";
Content = stackLayout;
}
public async Task LogoutAsync()
{
if(!await _userDialogs.ConfirmAsync("Are you sure you want to log out?", null, AppResources.Yes, AppResources.Cancel))
{
return;
}
_authService.LogOut();
await Navigation.PopModalAsync();
Application.Current.MainPage = new LoginNavigationPage();
}
public async Task CheckFingerprintAsync()
{
var result = await _fingerprint.AuthenticateAsync("Use your fingerprint to verify.");
if(result.Authenticated)
{
await Navigation.PopModalAsync();
}
}
}
}

View file

@ -4,6 +4,7 @@
<package id="CommonServiceLocator" version="1.3" targetFramework="portable45-net45+win8+wpa81" /> <package id="CommonServiceLocator" version="1.3" targetFramework="portable45-net45+win8+wpa81" />
<package id="modernhttpclient" version="2.4.2" targetFramework="portable45-net45+win8+wpa81" /> <package id="modernhttpclient" version="2.4.2" targetFramework="portable45-net45+win8+wpa81" />
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="portable45-net45+win8+wpa81" /> <package id="Newtonsoft.Json" version="8.0.3" targetFramework="portable45-net45+win8+wpa81" />
<package id="Plugin.Fingerprint" version="1.1.1-beta" targetFramework="portable45-net45+win8+wpa81" />
<package id="Portable.BouncyCastle" version="1.8.1" targetFramework="portable45-net45+win8+wpa81" /> <package id="Portable.BouncyCastle" version="1.8.1" targetFramework="portable45-net45+win8+wpa81" />
<package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8+wpa81" /> <package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8+wpa81" />
<package id="sqlite-net-pcl" version="1.1.1" targetFramework="portable45-net45+win8+wpa81" /> <package id="sqlite-net-pcl" version="1.1.1" targetFramework="portable45-net45+win8+wpa81" />

View file

@ -14,6 +14,11 @@ using Plugin.Settings;
using Plugin.Connectivity; using Plugin.Connectivity;
using Acr.UserDialogs; using Acr.UserDialogs;
using Bit.App.Repositories; using Bit.App.Repositories;
using Plugin.Fingerprint;
using Plugin.Fingerprint.Abstractions;
using Plugin.Settings.Abstractions;
using System.Diagnostics;
using Xamarin.Forms;
namespace Bit.iOS namespace Bit.iOS
{ {
@ -23,6 +28,8 @@ namespace Bit.iOS
[Register("AppDelegate")] [Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{ {
private App.App _app;
// //
// This method is invoked when the application has loaded and is ready to run. In this // This method is invoked when the application has loaded and is ready to run. In this
// method you should instantiate the window, load the UI into it and then make the window // method you should instantiate the window, load the UI into it and then make the window
@ -32,6 +39,8 @@ namespace Bit.iOS
// //
public override bool FinishedLaunching(UIApplication app, NSDictionary options) public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{ {
CrossFingerprint.AllowReuse = false;
global::Xamarin.Forms.Forms.Init(); global::Xamarin.Forms.Forms.Init();
if(!Resolver.IsSet) if(!Resolver.IsSet)
@ -39,11 +48,69 @@ namespace Bit.iOS
SetIoc(); SetIoc();
} }
LoadApplication(new App.App(Resolver.Resolve<IAuthService>(), Resolver.Resolve<IDatabaseService>())); _app = new App.App(
Resolver.Resolve<IAuthService>(),
Resolver.Resolve<IDatabaseService>(),
Resolver.Resolve<IFingerprint>(),
Resolver.Resolve<ISettings>());
LoadApplication(_app);
return base.FinishedLaunching(app, options); return base.FinishedLaunching(app, options);
} }
public override void DidEnterBackground(UIApplication uiApplication)
{
var colourView = new UIView(UIApplication.SharedApplication.KeyWindow.Frame)
{
BackgroundColor = UIColor.Black,
Tag = 4321
};
UIApplication.SharedApplication.KeyWindow.AddSubview(colourView);
UIApplication.SharedApplication.KeyWindow.BringSubviewToFront(colourView);
base.DidEnterBackground(uiApplication);
Debug.WriteLine("DidEnterBackground");
}
public override void OnResignActivation(UIApplication uiApplication)
{
base.OnResignActivation(uiApplication);
Debug.WriteLine("OnResignActivation");
}
public override void WillTerminate(UIApplication uiApplication)
{
base.WillTerminate(uiApplication);
Debug.WriteLine("WillTerminate");
}
public override void OnActivated(UIApplication uiApplication)
{
base.OnActivated(uiApplication);
Debug.WriteLine("OnActivated");
var view = UIApplication.SharedApplication.KeyWindow.ViewWithTag(4321);
if(view != null)
{
view.RemoveFromSuperview();
}
}
public override void WillEnterForeground(UIApplication uiApplication)
{
SendLockMessage();
base.WillEnterForeground(uiApplication);
Debug.WriteLine("WillEnterForeground");
}
private void SendLockMessage()
{
MessagingCenter.Send<App.App>(_app, "Lock");
}
private void SetIoc() private void SetIoc()
{ {
var container = new UnityContainer(); var container = new UnityContainer();
@ -68,7 +135,8 @@ namespace Bit.iOS
// Other // Other
.RegisterInstance(CrossSettings.Current, new ContainerControlledLifetimeManager()) .RegisterInstance(CrossSettings.Current, new ContainerControlledLifetimeManager())
.RegisterInstance(CrossConnectivity.Current, new ContainerControlledLifetimeManager()) .RegisterInstance(CrossConnectivity.Current, new ContainerControlledLifetimeManager())
.RegisterInstance(UserDialogs.Instance, new ContainerControlledLifetimeManager()); .RegisterInstance(UserDialogs.Instance, new ContainerControlledLifetimeManager())
.RegisterInstance(CrossFingerprint.Current, new ContainerControlledLifetimeManager());
Resolver.SetResolver(new UnityResolver(container)); Resolver.SetResolver(new UnityResolver(container));
} }

View file

@ -36,6 +36,11 @@
<OptimizePNGs>True</OptimizePNGs> <OptimizePNGs>True</OptimizePNGs>
<MtouchFloat32>False</MtouchFloat32> <MtouchFloat32>False</MtouchFloat32>
<MtouchI18n /> <MtouchI18n />
<CodesignKey>iPhone Developer</CodesignKey>
<CodesignProvision />
<CodesignEntitlements />
<CodesignResourceRules />
<CodesignExtraArgs />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>none</DebugType> <DebugType>none</DebugType>
@ -60,7 +65,8 @@
<CodesignKey>iPhone Developer</CodesignKey> <CodesignKey>iPhone Developer</CodesignKey>
<MtouchDebug>true</MtouchDebug> <MtouchDebug>true</MtouchDebug>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<CodesignProvision>2ae5608a-6142-4e1d-9344-326d1982b392</CodesignProvision> <CodesignProvision>
</CodesignProvision>
<CodesignResourceRules /> <CodesignResourceRules />
<CodesignExtraArgs /> <CodesignExtraArgs />
</PropertyGroup> </PropertyGroup>
@ -174,6 +180,14 @@
<HintPath>..\..\packages\Xam.Plugin.Connectivity.2.1.2\lib\Xamarin.iOS10\Plugin.Connectivity.Abstractions.dll</HintPath> <HintPath>..\..\packages\Xam.Plugin.Connectivity.2.1.2\lib\Xamarin.iOS10\Plugin.Connectivity.Abstractions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Plugin.Fingerprint, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Plugin.Fingerprint.1.1.1-beta\lib\Xamarin.iOS10\Plugin.Fingerprint.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Plugin.Fingerprint.Abstractions, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Plugin.Fingerprint.1.1.1-beta\lib\Xamarin.iOS10\Plugin.Fingerprint.Abstractions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Plugin.Settings, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Plugin.Settings, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\Xamarin.iOS10\Plugin.Settings.dll</HintPath> <HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\Xamarin.iOS10\Plugin.Settings.dll</HintPath>
<Private>True</Private> <Private>True</Private>

View file

@ -4,6 +4,7 @@
<package id="Acr.UserDialogs" version="5.0.1" targetFramework="xamarinios10" /> <package id="Acr.UserDialogs" version="5.0.1" targetFramework="xamarinios10" />
<package id="CommonServiceLocator" version="1.3" targetFramework="xamarinios10" /> <package id="CommonServiceLocator" version="1.3" targetFramework="xamarinios10" />
<package id="modernhttpclient" version="2.4.2" targetFramework="xamarinios10" /> <package id="modernhttpclient" version="2.4.2" targetFramework="xamarinios10" />
<package id="Plugin.Fingerprint" version="1.1.1-beta" targetFramework="xamarinios10" />
<package id="Splat" version="1.6.2" targetFramework="xamarinios10" /> <package id="Splat" version="1.6.2" targetFramework="xamarinios10" />
<package id="sqlite-net-pcl" version="1.1.1" targetFramework="xamarinios10" /> <package id="sqlite-net-pcl" version="1.1.1" targetFramework="xamarinios10" />
<package id="SQLitePCL.raw" version="0.8.6" targetFramework="xamarinios10" /> <package id="SQLitePCL.raw" version="0.8.6" targetFramework="xamarinios10" />