From 65168c71c01e74d2c573eb88a5b985a92bc45d09 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Thu, 13 Jul 2017 11:52:24 -0400 Subject: [PATCH] add/edit login totp key --- src/Android/Android.csproj | 15 + src/Android/Resources/Resource.Designer.cs | 341 +++++++++--------- .../Resources/drawable-hdpi/camera.png | Bin 0 -> 664 bytes .../Resources/drawable-xhdpi/camera.png | Bin 0 -> 802 bytes .../Resources/drawable-xxhdpi/camera.png | Bin 0 -> 1208 bytes .../Resources/drawable-xxxhdpi/camera.png | Bin 0 -> 1411 bytes src/Android/Resources/drawable/camera.png | Bin 0 -> 478 bytes src/App/Models/Api/Request/LoginRequest.cs | 2 + src/App/Pages/Vault/VaultAddLoginPage.cs | 24 +- src/App/Pages/Vault/VaultEditLoginPage.cs | 30 +- src/App/Resources/AppResources.Designer.cs | 9 + src/App/Resources/AppResources.resx | 3 + src/iOS/Resources/camera.png | Bin 0 -> 478 bytes src/iOS/Resources/camera@2x.png | Bin 0 -> 802 bytes src/iOS/Resources/camera@3x.png | Bin 0 -> 1208 bytes src/iOS/iOS.csproj | 9 + 16 files changed, 260 insertions(+), 173 deletions(-) create mode 100644 src/Android/Resources/drawable-hdpi/camera.png create mode 100644 src/Android/Resources/drawable-xhdpi/camera.png create mode 100644 src/Android/Resources/drawable-xxhdpi/camera.png create mode 100644 src/Android/Resources/drawable-xxxhdpi/camera.png create mode 100644 src/Android/Resources/drawable/camera.png create mode 100644 src/iOS/Resources/camera.png create mode 100644 src/iOS/Resources/camera@2x.png create mode 100644 src/iOS/Resources/camera@3x.png diff --git a/src/Android/Android.csproj b/src/Android/Android.csproj index b8bf69266..317078f61 100644 --- a/src/Android/Android.csproj +++ b/src/Android/Android.csproj @@ -890,6 +890,21 @@ + + + + + + + + + + + + + + + diff --git a/src/Android/Resources/Resource.Designer.cs b/src/Android/Resources/Resource.Designer.cs index 7c2708678..696cd701a 100644 --- a/src/Android/Resources/Resource.Designer.cs +++ b/src/Android/Resources/Resource.Designer.cs @@ -2295,505 +2295,508 @@ namespace Bit.Android public const int accessibility_step2 = 2130837582; // aapt resource value: 0x7f02004f - public const int cloudup = 2130837583; + public const int camera = 2130837583; // aapt resource value: 0x7f020050 - public const int cogs = 2130837584; + public const int cloudup = 2130837584; // aapt resource value: 0x7f020051 - public const int cogs_selected = 2130837585; + public const int cogs = 2130837585; // aapt resource value: 0x7f020052 - public const int common_full_open_on_phone = 2130837586; + public const int cogs_selected = 2130837586; // aapt resource value: 0x7f020053 - public const int common_google_signin_btn_icon_dark = 2130837587; + public const int common_full_open_on_phone = 2130837587; // aapt resource value: 0x7f020054 - public const int common_google_signin_btn_icon_dark_disabled = 2130837588; + public const int common_google_signin_btn_icon_dark = 2130837588; // aapt resource value: 0x7f020055 - public const int common_google_signin_btn_icon_dark_focused = 2130837589; + public const int common_google_signin_btn_icon_dark_disabled = 2130837589; // aapt resource value: 0x7f020056 - public const int common_google_signin_btn_icon_dark_normal = 2130837590; + public const int common_google_signin_btn_icon_dark_focused = 2130837590; // aapt resource value: 0x7f020057 - public const int common_google_signin_btn_icon_dark_pressed = 2130837591; + public const int common_google_signin_btn_icon_dark_normal = 2130837591; // aapt resource value: 0x7f020058 - public const int common_google_signin_btn_icon_light = 2130837592; + public const int common_google_signin_btn_icon_dark_pressed = 2130837592; // aapt resource value: 0x7f020059 - public const int common_google_signin_btn_icon_light_disabled = 2130837593; + public const int common_google_signin_btn_icon_light = 2130837593; // aapt resource value: 0x7f02005a - public const int common_google_signin_btn_icon_light_focused = 2130837594; + public const int common_google_signin_btn_icon_light_disabled = 2130837594; // aapt resource value: 0x7f02005b - public const int common_google_signin_btn_icon_light_normal = 2130837595; + public const int common_google_signin_btn_icon_light_focused = 2130837595; // aapt resource value: 0x7f02005c - public const int common_google_signin_btn_icon_light_pressed = 2130837596; + public const int common_google_signin_btn_icon_light_normal = 2130837596; // aapt resource value: 0x7f02005d - public const int common_google_signin_btn_text_dark = 2130837597; + public const int common_google_signin_btn_icon_light_pressed = 2130837597; // aapt resource value: 0x7f02005e - public const int common_google_signin_btn_text_dark_disabled = 2130837598; + public const int common_google_signin_btn_text_dark = 2130837598; // aapt resource value: 0x7f02005f - public const int common_google_signin_btn_text_dark_focused = 2130837599; + public const int common_google_signin_btn_text_dark_disabled = 2130837599; // aapt resource value: 0x7f020060 - public const int common_google_signin_btn_text_dark_normal = 2130837600; + public const int common_google_signin_btn_text_dark_focused = 2130837600; // aapt resource value: 0x7f020061 - public const int common_google_signin_btn_text_dark_pressed = 2130837601; + public const int common_google_signin_btn_text_dark_normal = 2130837601; // aapt resource value: 0x7f020062 - public const int common_google_signin_btn_text_light = 2130837602; + public const int common_google_signin_btn_text_dark_pressed = 2130837602; // aapt resource value: 0x7f020063 - public const int common_google_signin_btn_text_light_disabled = 2130837603; + public const int common_google_signin_btn_text_light = 2130837603; // aapt resource value: 0x7f020064 - public const int common_google_signin_btn_text_light_focused = 2130837604; + public const int common_google_signin_btn_text_light_disabled = 2130837604; // aapt resource value: 0x7f020065 - public const int common_google_signin_btn_text_light_normal = 2130837605; + public const int common_google_signin_btn_text_light_focused = 2130837605; // aapt resource value: 0x7f020066 - public const int common_google_signin_btn_text_light_pressed = 2130837606; + public const int common_google_signin_btn_text_light_normal = 2130837606; // aapt resource value: 0x7f020067 - public const int common_ic_googleplayservices = 2130837607; + public const int common_google_signin_btn_text_light_pressed = 2130837607; // aapt resource value: 0x7f020068 - public const int common_plus_signin_btn_icon_dark = 2130837608; + public const int common_ic_googleplayservices = 2130837608; // aapt resource value: 0x7f020069 - public const int common_plus_signin_btn_icon_dark_disabled = 2130837609; + public const int common_plus_signin_btn_icon_dark = 2130837609; // aapt resource value: 0x7f02006a - public const int common_plus_signin_btn_icon_dark_focused = 2130837610; + public const int common_plus_signin_btn_icon_dark_disabled = 2130837610; // aapt resource value: 0x7f02006b - public const int common_plus_signin_btn_icon_dark_normal = 2130837611; + public const int common_plus_signin_btn_icon_dark_focused = 2130837611; // aapt resource value: 0x7f02006c - public const int common_plus_signin_btn_icon_dark_pressed = 2130837612; + public const int common_plus_signin_btn_icon_dark_normal = 2130837612; // aapt resource value: 0x7f02006d - public const int common_plus_signin_btn_icon_light = 2130837613; + public const int common_plus_signin_btn_icon_dark_pressed = 2130837613; // aapt resource value: 0x7f02006e - public const int common_plus_signin_btn_icon_light_disabled = 2130837614; + public const int common_plus_signin_btn_icon_light = 2130837614; // aapt resource value: 0x7f02006f - public const int common_plus_signin_btn_icon_light_focused = 2130837615; + public const int common_plus_signin_btn_icon_light_disabled = 2130837615; // aapt resource value: 0x7f020070 - public const int common_plus_signin_btn_icon_light_normal = 2130837616; + public const int common_plus_signin_btn_icon_light_focused = 2130837616; // aapt resource value: 0x7f020071 - public const int common_plus_signin_btn_icon_light_pressed = 2130837617; + public const int common_plus_signin_btn_icon_light_normal = 2130837617; // aapt resource value: 0x7f020072 - public const int common_plus_signin_btn_text_dark = 2130837618; + public const int common_plus_signin_btn_icon_light_pressed = 2130837618; // aapt resource value: 0x7f020073 - public const int common_plus_signin_btn_text_dark_disabled = 2130837619; + public const int common_plus_signin_btn_text_dark = 2130837619; // aapt resource value: 0x7f020074 - public const int common_plus_signin_btn_text_dark_focused = 2130837620; + public const int common_plus_signin_btn_text_dark_disabled = 2130837620; // aapt resource value: 0x7f020075 - public const int common_plus_signin_btn_text_dark_normal = 2130837621; + public const int common_plus_signin_btn_text_dark_focused = 2130837621; // aapt resource value: 0x7f020076 - public const int common_plus_signin_btn_text_dark_pressed = 2130837622; + public const int common_plus_signin_btn_text_dark_normal = 2130837622; // aapt resource value: 0x7f020077 - public const int common_plus_signin_btn_text_light = 2130837623; + public const int common_plus_signin_btn_text_dark_pressed = 2130837623; // aapt resource value: 0x7f020078 - public const int common_plus_signin_btn_text_light_disabled = 2130837624; + public const int common_plus_signin_btn_text_light = 2130837624; // aapt resource value: 0x7f020079 - public const int common_plus_signin_btn_text_light_focused = 2130837625; + public const int common_plus_signin_btn_text_light_disabled = 2130837625; // aapt resource value: 0x7f02007a - public const int common_plus_signin_btn_text_light_normal = 2130837626; + public const int common_plus_signin_btn_text_light_focused = 2130837626; // aapt resource value: 0x7f02007b - public const int common_plus_signin_btn_text_light_pressed = 2130837627; + public const int common_plus_signin_btn_text_light_normal = 2130837627; // aapt resource value: 0x7f02007c - public const int design_fab_background = 2130837628; + public const int common_plus_signin_btn_text_light_pressed = 2130837628; // aapt resource value: 0x7f02007d - public const int design_snackbar_background = 2130837629; + public const int design_fab_background = 2130837629; // aapt resource value: 0x7f02007e - public const int download = 2130837630; + public const int design_snackbar_background = 2130837630; // aapt resource value: 0x7f02007f - public const int envelope = 2130837631; + public const int download = 2130837631; // aapt resource value: 0x7f020080 - public const int eye = 2130837632; + public const int envelope = 2130837632; // aapt resource value: 0x7f020081 - public const int eye_slash = 2130837633; + public const int eye = 2130837633; // aapt resource value: 0x7f020082 - public const int fa_lock = 2130837634; + public const int eye_slash = 2130837634; // aapt resource value: 0x7f020083 - public const int fa_lock_selected = 2130837635; + public const int fa_lock = 2130837635; // aapt resource value: 0x7f020084 - public const int fingerprint = 2130837636; + public const int fa_lock_selected = 2130837636; // aapt resource value: 0x7f020085 - public const int fingerprint_white = 2130837637; + public const int fingerprint = 2130837637; // aapt resource value: 0x7f020086 - public const int folder = 2130837638; + public const int fingerprint_white = 2130837638; // aapt resource value: 0x7f020087 - public const int globe = 2130837639; + public const int folder = 2130837639; // aapt resource value: 0x7f020088 - public const int hockeyapp_btn_background = 2130837640; + public const int globe = 2130837640; // aapt resource value: 0x7f020089 - public const int ic_audiotrack = 2130837641; + public const int hockeyapp_btn_background = 2130837641; // aapt resource value: 0x7f02008a - public const int ic_audiotrack_light = 2130837642; + public const int ic_audiotrack = 2130837642; // aapt resource value: 0x7f02008b - public const int ic_bluetooth_grey = 2130837643; + public const int ic_audiotrack_light = 2130837643; // aapt resource value: 0x7f02008c - public const int ic_bluetooth_white = 2130837644; + public const int ic_bluetooth_grey = 2130837644; // aapt resource value: 0x7f02008d - public const int ic_cast_dark = 2130837645; + public const int ic_bluetooth_white = 2130837645; // aapt resource value: 0x7f02008e - public const int ic_cast_disabled_light = 2130837646; + public const int ic_cast_dark = 2130837646; // aapt resource value: 0x7f02008f - public const int ic_cast_grey = 2130837647; + public const int ic_cast_disabled_light = 2130837647; // aapt resource value: 0x7f020090 - public const int ic_cast_light = 2130837648; + public const int ic_cast_grey = 2130837648; // aapt resource value: 0x7f020091 - public const int ic_cast_off_light = 2130837649; + public const int ic_cast_light = 2130837649; // aapt resource value: 0x7f020092 - public const int ic_cast_on_0_light = 2130837650; + public const int ic_cast_off_light = 2130837650; // aapt resource value: 0x7f020093 - public const int ic_cast_on_1_light = 2130837651; + public const int ic_cast_on_0_light = 2130837651; // aapt resource value: 0x7f020094 - public const int ic_cast_on_2_light = 2130837652; + public const int ic_cast_on_1_light = 2130837652; // aapt resource value: 0x7f020095 - public const int ic_cast_on_light = 2130837653; + public const int ic_cast_on_2_light = 2130837653; // aapt resource value: 0x7f020096 - public const int ic_cast_white = 2130837654; + public const int ic_cast_on_light = 2130837654; // aapt resource value: 0x7f020097 - public const int ic_close_dark = 2130837655; + public const int ic_cast_white = 2130837655; // aapt resource value: 0x7f020098 - public const int ic_close_light = 2130837656; + public const int ic_close_dark = 2130837656; // aapt resource value: 0x7f020099 - public const int ic_collapse = 2130837657; + public const int ic_close_light = 2130837657; // aapt resource value: 0x7f02009a - public const int ic_collapse_00000 = 2130837658; + public const int ic_collapse = 2130837658; // aapt resource value: 0x7f02009b - public const int ic_collapse_00001 = 2130837659; + public const int ic_collapse_00000 = 2130837659; // aapt resource value: 0x7f02009c - public const int ic_collapse_00002 = 2130837660; + public const int ic_collapse_00001 = 2130837660; // aapt resource value: 0x7f02009d - public const int ic_collapse_00003 = 2130837661; + public const int ic_collapse_00002 = 2130837661; // aapt resource value: 0x7f02009e - public const int ic_collapse_00004 = 2130837662; + public const int ic_collapse_00003 = 2130837662; // aapt resource value: 0x7f02009f - public const int ic_collapse_00005 = 2130837663; + public const int ic_collapse_00004 = 2130837663; // aapt resource value: 0x7f0200a0 - public const int ic_collapse_00006 = 2130837664; + public const int ic_collapse_00005 = 2130837664; // aapt resource value: 0x7f0200a1 - public const int ic_collapse_00007 = 2130837665; + public const int ic_collapse_00006 = 2130837665; // aapt resource value: 0x7f0200a2 - public const int ic_collapse_00008 = 2130837666; + public const int ic_collapse_00007 = 2130837666; // aapt resource value: 0x7f0200a3 - public const int ic_collapse_00009 = 2130837667; + public const int ic_collapse_00008 = 2130837667; // aapt resource value: 0x7f0200a4 - public const int ic_collapse_00010 = 2130837668; + public const int ic_collapse_00009 = 2130837668; // aapt resource value: 0x7f0200a5 - public const int ic_collapse_00011 = 2130837669; + public const int ic_collapse_00010 = 2130837669; // aapt resource value: 0x7f0200a6 - public const int ic_collapse_00012 = 2130837670; + public const int ic_collapse_00011 = 2130837670; // aapt resource value: 0x7f0200a7 - public const int ic_collapse_00013 = 2130837671; + public const int ic_collapse_00012 = 2130837671; // aapt resource value: 0x7f0200a8 - public const int ic_collapse_00014 = 2130837672; + public const int ic_collapse_00013 = 2130837672; // aapt resource value: 0x7f0200a9 - public const int ic_collapse_00015 = 2130837673; + public const int ic_collapse_00014 = 2130837673; // aapt resource value: 0x7f0200aa - public const int ic_errorstatus = 2130837674; + public const int ic_collapse_00015 = 2130837674; // aapt resource value: 0x7f0200ab - public const int ic_expand = 2130837675; + public const int ic_errorstatus = 2130837675; // aapt resource value: 0x7f0200ac - public const int ic_expand_00000 = 2130837676; + public const int ic_expand = 2130837676; // aapt resource value: 0x7f0200ad - public const int ic_expand_00001 = 2130837677; + public const int ic_expand_00000 = 2130837677; // aapt resource value: 0x7f0200ae - public const int ic_expand_00002 = 2130837678; + public const int ic_expand_00001 = 2130837678; // aapt resource value: 0x7f0200af - public const int ic_expand_00003 = 2130837679; + public const int ic_expand_00002 = 2130837679; // aapt resource value: 0x7f0200b0 - public const int ic_expand_00004 = 2130837680; + public const int ic_expand_00003 = 2130837680; // aapt resource value: 0x7f0200b1 - public const int ic_expand_00005 = 2130837681; + public const int ic_expand_00004 = 2130837681; // aapt resource value: 0x7f0200b2 - public const int ic_expand_00006 = 2130837682; + public const int ic_expand_00005 = 2130837682; // aapt resource value: 0x7f0200b3 - public const int ic_expand_00007 = 2130837683; + public const int ic_expand_00006 = 2130837683; // aapt resource value: 0x7f0200b4 - public const int ic_expand_00008 = 2130837684; + public const int ic_expand_00007 = 2130837684; // aapt resource value: 0x7f0200b5 - public const int ic_expand_00009 = 2130837685; + public const int ic_expand_00008 = 2130837685; // aapt resource value: 0x7f0200b6 - public const int ic_expand_00010 = 2130837686; + public const int ic_expand_00009 = 2130837686; // aapt resource value: 0x7f0200b7 - public const int ic_expand_00011 = 2130837687; + public const int ic_expand_00010 = 2130837687; // aapt resource value: 0x7f0200b8 - public const int ic_expand_00012 = 2130837688; + public const int ic_expand_00011 = 2130837688; // aapt resource value: 0x7f0200b9 - public const int ic_expand_00013 = 2130837689; + public const int ic_expand_00012 = 2130837689; // aapt resource value: 0x7f0200ba - public const int ic_expand_00014 = 2130837690; + public const int ic_expand_00013 = 2130837690; // aapt resource value: 0x7f0200bb - public const int ic_expand_00015 = 2130837691; + public const int ic_expand_00014 = 2130837691; // aapt resource value: 0x7f0200bc - public const int ic_media_pause = 2130837692; + public const int ic_expand_00015 = 2130837692; // aapt resource value: 0x7f0200bd - public const int ic_media_play = 2130837693; + public const int ic_media_pause = 2130837693; // aapt resource value: 0x7f0200be - public const int ic_media_route_disabled_mono_dark = 2130837694; + public const int ic_media_play = 2130837694; // aapt resource value: 0x7f0200bf - public const int ic_media_route_off_mono_dark = 2130837695; + public const int ic_media_route_disabled_mono_dark = 2130837695; // aapt resource value: 0x7f0200c0 - public const int ic_media_route_on_0_mono_dark = 2130837696; + public const int ic_media_route_off_mono_dark = 2130837696; // aapt resource value: 0x7f0200c1 - public const int ic_media_route_on_1_mono_dark = 2130837697; + public const int ic_media_route_on_0_mono_dark = 2130837697; // aapt resource value: 0x7f0200c2 - public const int ic_media_route_on_2_mono_dark = 2130837698; + public const int ic_media_route_on_1_mono_dark = 2130837698; // aapt resource value: 0x7f0200c3 - public const int ic_media_route_on_mono_dark = 2130837699; + public const int ic_media_route_on_2_mono_dark = 2130837699; // aapt resource value: 0x7f0200c4 - public const int ic_pause_dark = 2130837700; + public const int ic_media_route_on_mono_dark = 2130837700; // aapt resource value: 0x7f0200c5 - public const int ic_pause_light = 2130837701; + public const int ic_pause_dark = 2130837701; // aapt resource value: 0x7f0200c6 - public const int ic_play_dark = 2130837702; + public const int ic_pause_light = 2130837702; // aapt resource value: 0x7f0200c7 - public const int ic_play_light = 2130837703; + public const int ic_play_dark = 2130837703; // aapt resource value: 0x7f0200c8 - public const int ic_speaker_dark = 2130837704; + public const int ic_play_light = 2130837704; // aapt resource value: 0x7f0200c9 - public const int ic_speaker_group_dark = 2130837705; + public const int ic_speaker_dark = 2130837705; // aapt resource value: 0x7f0200ca - public const int ic_speaker_group_light = 2130837706; + public const int ic_speaker_group_dark = 2130837706; // aapt resource value: 0x7f0200cb - public const int ic_speaker_light = 2130837707; + public const int ic_speaker_group_light = 2130837707; // aapt resource value: 0x7f0200cc - public const int ic_successstatus = 2130837708; + public const int ic_speaker_light = 2130837708; // aapt resource value: 0x7f0200cd - public const int ic_tv_dark = 2130837709; + public const int ic_successstatus = 2130837709; // aapt resource value: 0x7f0200ce - public const int ic_tv_light = 2130837710; + public const int ic_tv_dark = 2130837710; // aapt resource value: 0x7f0200cf - public const int icon = 2130837711; + public const int ic_tv_light = 2130837711; // aapt resource value: 0x7f0200d0 - public const int ion_chevron_right = 2130837712; + public const int icon = 2130837712; // aapt resource value: 0x7f0200d1 - public const int lightbulb = 2130837713; + public const int ion_chevron_right = 2130837713; // aapt resource value: 0x7f0200d2 - public const int list_selector = 2130837714; + public const int lightbulb = 2130837714; // aapt resource value: 0x7f0200d3 - public const int @lock = 2130837715; + public const int list_selector = 2130837715; // aapt resource value: 0x7f0200d4 - public const int logo = 2130837716; + public const int @lock = 2130837716; // aapt resource value: 0x7f0200d5 - public const int more = 2130837717; + public const int logo = 2130837717; // aapt resource value: 0x7f0200d6 - public const int mr_dialog_material_background_dark = 2130837718; + public const int more = 2130837718; // aapt resource value: 0x7f0200d7 - public const int mr_dialog_material_background_light = 2130837719; + public const int mr_dialog_material_background_dark = 2130837719; // aapt resource value: 0x7f0200d8 - public const int mr_ic_audiotrack_light = 2130837720; + public const int mr_dialog_material_background_light = 2130837720; // aapt resource value: 0x7f0200d9 - public const int mr_ic_cast_dark = 2130837721; + public const int mr_ic_audiotrack_light = 2130837721; // aapt resource value: 0x7f0200da - public const int mr_ic_cast_light = 2130837722; + public const int mr_ic_cast_dark = 2130837722; // aapt resource value: 0x7f0200db - public const int mr_ic_close_dark = 2130837723; + public const int mr_ic_cast_light = 2130837723; // aapt resource value: 0x7f0200dc - public const int mr_ic_close_light = 2130837724; + public const int mr_ic_close_dark = 2130837724; // aapt resource value: 0x7f0200dd - public const int mr_ic_media_route_connecting_mono_dark = 2130837725; + public const int mr_ic_close_light = 2130837725; // aapt resource value: 0x7f0200de - public const int mr_ic_media_route_connecting_mono_light = 2130837726; + public const int mr_ic_media_route_connecting_mono_dark = 2130837726; // aapt resource value: 0x7f0200df - public const int mr_ic_media_route_mono_dark = 2130837727; + public const int mr_ic_media_route_connecting_mono_light = 2130837727; // aapt resource value: 0x7f0200e0 - public const int mr_ic_media_route_mono_light = 2130837728; + public const int mr_ic_media_route_mono_dark = 2130837728; // aapt resource value: 0x7f0200e1 - public const int mr_ic_pause_dark = 2130837729; + public const int mr_ic_media_route_mono_light = 2130837729; // aapt resource value: 0x7f0200e2 - public const int mr_ic_pause_light = 2130837730; + public const int mr_ic_pause_dark = 2130837730; // aapt resource value: 0x7f0200e3 - public const int mr_ic_play_dark = 2130837731; + public const int mr_ic_pause_light = 2130837731; // aapt resource value: 0x7f0200e4 - public const int mr_ic_play_light = 2130837732; + public const int mr_ic_play_dark = 2130837732; // aapt resource value: 0x7f0200e5 - public const int notification_sm = 2130837733; - - // aapt resource value: 0x7f0200f5 - public const int notification_template_icon_bg = 2130837749; + public const int mr_ic_play_light = 2130837733; // aapt resource value: 0x7f0200e6 - public const int plus = 2130837734; + public const int notification_sm = 2130837734; + + // aapt resource value: 0x7f0200f6 + public const int notification_template_icon_bg = 2130837750; // aapt resource value: 0x7f0200e7 - public const int refresh = 2130837735; + public const int plus = 2130837735; // aapt resource value: 0x7f0200e8 - public const int roundedbg = 2130837736; + public const int refresh = 2130837736; // aapt resource value: 0x7f0200e9 - public const int roundedbgdark = 2130837737; + public const int roundedbg = 2130837737; // aapt resource value: 0x7f0200ea - public const int search = 2130837738; + public const int roundedbgdark = 2130837738; // aapt resource value: 0x7f0200eb - public const int share = 2130837739; + public const int search = 2130837739; // aapt resource value: 0x7f0200ec - public const int share_tools = 2130837740; + public const int share = 2130837740; // aapt resource value: 0x7f0200ed - public const int splash_screen = 2130837741; + public const int share_tools = 2130837741; // aapt resource value: 0x7f0200ee - public const int star = 2130837742; + public const int splash_screen = 2130837742; // aapt resource value: 0x7f0200ef - public const int star_selected = 2130837743; + public const int star = 2130837743; // aapt resource value: 0x7f0200f0 - public const int tools = 2130837744; + public const int star_selected = 2130837744; // aapt resource value: 0x7f0200f1 - public const int tools_selected = 2130837745; + public const int tools = 2130837745; // aapt resource value: 0x7f0200f2 - public const int upload = 2130837746; + public const int tools_selected = 2130837746; // aapt resource value: 0x7f0200f3 - public const int user = 2130837747; + public const int upload = 2130837747; // aapt resource value: 0x7f0200f4 - public const int yubikey = 2130837748; + public const int user = 2130837748; + + // aapt resource value: 0x7f0200f5 + public const int yubikey = 2130837749; static Drawable() { diff --git a/src/Android/Resources/drawable-hdpi/camera.png b/src/Android/Resources/drawable-hdpi/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..23b5d3dc57921acc93731b0c96820043a128dacc GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^iXhCv3?vh*jADV*^8lX^S0HWEyJy%V9g}j9mwift z{DK)6nV4DFIJvlac=`ARg+xTf#3iMqW#pB#wDk?m9GraP5>wJMo0?lYI=d%MnmT>^ z&OQ4M9zJ^f%(?TIuU@}->)DH!uiw7^{Pp|K-+$*ZtvbWNz$oJB;us^3bou;+t13dRy1w@)v5BfX9$LvG z(&%KKdF)a-*TMs(OxlI388+Q}-Y_+Je{5{qmv)_$w@j+NJlhlf#Wsl@ym+IabB#{Q z9>(QHd<*rNCBHj_yK&21g^O+KYmlwgcJvkF z5^1>lIqv(JR#Vo11;+hbFN89*#+gapt_tOFjh*uOX3fu_z%8Qdk2XGfYkWIwPMT0q osc-qbB$b&n|HrDG{QraH_kkP#%Mx7H0>hob)78&qol`;+0Fw?WbpQYW literal 0 HcmV?d00001 diff --git a/src/Android/Resources/drawable-xhdpi/camera.png b/src/Android/Resources/drawable-xhdpi/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..18687cf7e872d6abb0b9ebdc3b54f8fedfe2f049 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!3?wz9Rv9xeFmea@gt!8^HobdB5ikTMsb+iu z21i6mkY6wZBNHv*OV;Z>9-u(MFe~I(5=QAaL zSnBW9JGc17(|tY7;)2GZ#w!qk{1NA@pk;uS}DJA$)#y8R%|g_$#to0^;N&n35)hzGi`sqt}aaOlvLcq zkm40OQ!cJdJd&HLkS)Rd)%^F#ho@BcR48yq`aYQ1xA*XF9d60_4bQDMHhm9dGkUgg z-2=4?QyQC&9E@g_Zjjb?ILKF^aG3EnSHK3gB}PdPnwdmu7=IZlCHOLOSshr_BzLcm zNkqmnL#u*ghcfGl9gI4!k67I+l{|5S;ZC(|^!f+2QybS>rOjK{_U3NbxvKd=84?$cYRY^KUMKR`|#{t`PAbPt|#xsEm|aaKjfB}f5)s~dTI5;oyTV@&rRI2^?`-{Kc=afJO9j@|6~F%b{RZf{an^LB{Ts5_GopC literal 0 HcmV?d00001 diff --git a/src/Android/Resources/drawable-xxhdpi/camera.png b/src/Android/Resources/drawable-xxhdpi/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..19163e1c239e15d22ece54519c291aa0b737fd81 GIT binary patch literal 1208 zcmeAS@N?(olHy`uVBq!ia0vp^P9V&|3?#2~eYnNIz}O$)6XFWw+Vt)jMS~;+3VxL+ z0HdU(B*-tAfsu)sg_VtilZ%^&k6%DgNLWNvOk6@zN=8;rK~YInO?++|>33h{Jt z43Ut0d+@h?a3TZygZGljzHgjnz48rTR1&(-BdBvp(5@F*yE;_dOwFY4+wb{2@A2bL z``*vodbxiddv#fI=<(2t3jZ9Bevsmw#H(@bpo#65#TKEfzg%ftv}f`58Ua_1%@h1Y z7PhyZS;)byvx0ATRzf2GL&ba7u0EcXkT_HB`dMvv<{L$I6PHHF^BfYbI34tNRcnfB zD!F)9)lNs9Wr@dm{z02WDKCCRo5iosy zoAQO}OOtmA^1T)=Wx7&&P%!$*GDGf5|4Or1R(M8E5VFiO&UCDD=w&dyuGo6%P9jfG zhZJL$mO^jvMUI!up-dsZj$Of~yepfv7+0|=ehn6G({-H65PDrfb!BGb+DSmsC`H}C z%bd}YK(%ulw>bHl=P<5fS+R>DbJi^H4Xi7L7OdjG6r3fr!F7euf-IR!nX5L5<(v)S z44B%QayGb7`jSB?(-jU6-#eP34QHbkdNs^4FW@QI9U~H?ZOU}z>OsQ;x-VH&UaJE+ zwOb!##64*HC?HdNh4VrJhu-SU61B}!_6Rq>HsEE+xWqcyqm7Np@f7N5TH|X@)y1hIf#i0K3 zyf%aJ7ga8WY0LS`6=lzFPEjs6x^JV&%+)ta-h6zc_5bXzKfk{fz4`h6A5;A7?RV3p Se-!}JJAb zt)0Dtql>GXr?;PfKwwB{Sa@Vid{T0HW^O@oNqJ>;O3U|`_5f^_8mNY^u(z%=gwceeD(UxTX*g~c=Y7ii zGB7Z+d%8G=NJzdt_%}W{Rp$7^?~;!brTICtTr*jdCfeTcFj6($%$Y7orPtubZM zr86x-g~g9QhdYxYrT+^Rde1acKc}_YtL~l zh~2o1S*qNTbI#(#zg|xwrM|8enz_)?QuT^sa-YV+K&j$z&b!MLcTc_HCsi2MIae*p z`~QdPWN7f3y3O77sq0sDuG=D@btf$N@3iI1awC1q)=yP$ zsx-YD!yq!Xsd+->3K5$V8^TxKIQ-n}Xl7l2*0UepD)lD+8E8(V(SX2;ykRK>gp8u?)`x)za0VtTH5Ej zyod{ANvXbb+Un-HSnJP{*IuqZ)s}Pk%G17oOJ?0H-+X1SrnFJ-X0__9(9)%c8MF6I z;*6BrD)?&WYTjqJIkrwub)2T$GEe`trgv;h-^nJPr($!~O)~qrSX4cFBBSKF2PyAP zBu~3A-ALhZvBmMHrY)Zr@tnvvU9fDc(t3O5EF&X@{qGC;PF?6X*0+E1UGiM1q}?$~ zW&0=P9PZOx=N$gzT(>@W^3vIsm);qO6Lbpp7@mU zTnA8^bB?HFTA|$}`A@rhio@Ch=VSxr>mR?Fx{y8HweG}(<2zN?OU}uYobXWK-04qM zY|m?fOmU~jpDg@dOyfE6iOKK7VzZelTinG`W-3pado@^(ttIb7lh5InCjBi3C9>~L z;G7v|6><6d+*f+y5tFM`gg2dKy;9m26C1J9-o9`_^R5SNIU0vlCa%+9>MH8vcrME7 z`pc?W(Ritc#;qjrxV!tcq`CtCDkMyP5D{t^u;ytJxAc}C9c?kM1yzL#?i%I>aiL68 zruaO4_GPK}Wo}W`;H1EnKW1t!eI(_&^pWf*FIPFWsZE>;@u8PPKie2CS$5m~?2K7& zG#361H4QB7*!5@0tTd(bRjrS%BzgW1%q(0Lk#O7Ww0+2gR~pVC=cfQODubu1pUXO@ GgeCyV4VJqA literal 0 HcmV?d00001 diff --git a/src/Android/Resources/drawable/camera.png b/src/Android/Resources/drawable/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc21a7722b3145b62c0a1cf4ddead80fc5b2053 GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6>jHd2T!FMr@1CK83>-dL0bOia z666=mz{t$P%ErMZAS5CxE}@{Js%2zh<>?g~9h;V3Qd(EvH*wayW$QO>*?HjL;iKoy zU%qwc-h&q}KYsnm?aWaRG-R2li(`mH_}r7n#hM%hTrLW^IQk?U=#gX1+)11dz8GJYD@< J);T3K0RRjU&%gix literal 0 HcmV?d00001 diff --git a/src/App/Models/Api/Request/LoginRequest.cs b/src/App/Models/Api/Request/LoginRequest.cs index 13d7989fc..1faa594da 100644 --- a/src/App/Models/Api/Request/LoginRequest.cs +++ b/src/App/Models/Api/Request/LoginRequest.cs @@ -11,6 +11,7 @@ Username = login.Username?.EncryptedString; Password = login.Password?.EncryptedString; Notes = login.Notes?.EncryptedString; + Totp = login.Totp?.EncryptedString; Favorite = login.Favorite; } @@ -21,6 +22,7 @@ public string Username { get; set; } public string Password { get; set; } public string Notes { get; set; } + public string Totp { get; set; } public bool Favorite { get; set; } } } diff --git a/src/App/Pages/Vault/VaultAddLoginPage.cs b/src/App/Pages/Vault/VaultAddLoginPage.cs index 6eff23482..2836662f2 100644 --- a/src/App/Pages/Vault/VaultAddLoginPage.cs +++ b/src/App/Pages/Vault/VaultAddLoginPage.cs @@ -51,6 +51,7 @@ namespace Bit.App.Pages public FormEntryCell UsernameCell { get; private set; } public FormEntryCell UriCell { get; private set; } public FormEntryCell NameCell { get; private set; } + public FormEntryCell TotpCell { get; private set; } public FormEditorCell NotesCell { get; private set; } public FormPickerCell FolderCell { get; private set; } public ExtendedTextCell GenerateCell { get; private set; } @@ -58,7 +59,15 @@ namespace Bit.App.Pages private void Init() { NotesCell = new FormEditorCell(height: 180); - PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: NotesCell.Editor, + + TotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor, + useButton: true); + TotpCell.Button.Image = "camera"; + TotpCell.Entry.DisableAutocapitalize = true; + TotpCell.Entry.Autocorrect = false; + TotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); + + PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: TotpCell.Entry, useButton: true); PasswordCell.Button.Image = "eye"; PasswordCell.Entry.DisableAutocapitalize = true; @@ -115,6 +124,7 @@ namespace Bit.App.Pages }, new TableSection(" ") { + TotpCell, FolderCell, favoriteCell }, @@ -132,7 +142,7 @@ namespace Bit.App.Pages } else if(Device.RuntimePlatform == Device.Android) { - PasswordCell.Button.WidthRequest = 40; + PasswordCell.Button.WidthRequest = TotpCell.Button.WidthRequest = 40; } var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async () => @@ -163,6 +173,7 @@ namespace Bit.App.Pages Username = UsernameCell.Entry.Text?.Encrypt(), Password = PasswordCell.Entry.Text?.Encrypt(), Notes = NotesCell.Editor.Text?.Encrypt(), + Totp = TotpCell.Entry.Text?.Encrypt(), Favorite = favoriteCell.On }; @@ -220,8 +231,10 @@ namespace Bit.App.Pages UriCell.InitEvents(); NameCell.InitEvents(); NotesCell.InitEvents(); + TotpCell.InitEvents(); FolderCell.InitEvents(); PasswordCell.Button.Clicked += PasswordButton_Clicked; + TotpCell.Button.Clicked += TotpButton_Clicked; GenerateCell.Tapped += GenerateCell_Tapped; if(!_fromAutofill && !_settings.GetValueOrDefault(AddedLoginAlertKey, false)) @@ -250,8 +263,10 @@ namespace Bit.App.Pages UriCell.Dispose(); NameCell.Dispose(); NotesCell.Dispose(); + TotpCell.Dispose(); FolderCell.Dispose(); PasswordCell.Button.Clicked -= PasswordButton_Clicked; + TotpCell.Button.Clicked -= TotpButton_Clicked; GenerateCell.Tapped -= GenerateCell_Tapped; } @@ -261,6 +276,11 @@ namespace Bit.App.Pages PasswordCell.Button.Image = "eye" + (!PasswordCell.Entry.IsPasswordFromToggled ? "_slash" : string.Empty); } + private void TotpButton_Clicked(object sender, EventArgs e) + { + // launch camera + } + private async void GenerateCell_Tapped(object sender, EventArgs e) { var page = new ToolsPasswordGeneratorPage((password) => diff --git a/src/App/Pages/Vault/VaultEditLoginPage.cs b/src/App/Pages/Vault/VaultEditLoginPage.cs index 08e6463c9..c16979356 100644 --- a/src/App/Pages/Vault/VaultEditLoginPage.cs +++ b/src/App/Pages/Vault/VaultEditLoginPage.cs @@ -38,6 +38,7 @@ namespace Bit.App.Pages public FormEntryCell UsernameCell { get; private set; } public FormEntryCell UriCell { get; private set; } public FormEntryCell NameCell { get; private set; } + public FormEntryCell TotpCell { get; private set; } public FormEditorCell NotesCell { get; private set; } public FormPickerCell FolderCell { get; private set; } public ExtendedTextCell GenerateCell { get; private set; } @@ -55,7 +56,15 @@ namespace Bit.App.Pages NotesCell = new FormEditorCell(height: 180); NotesCell.Editor.Text = login.Notes?.Decrypt(login.OrganizationId); - PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: NotesCell.Editor, + TotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor, + useButton: true); + TotpCell.Entry.Text = login.Totp?.Decrypt(login.OrganizationId); + TotpCell.Button.Image = "camera"; + TotpCell.Entry.DisableAutocapitalize = true; + TotpCell.Entry.Autocorrect = false; + TotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); + + PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: TotpCell.Entry, useButton: true); PasswordCell.Entry.Text = login.Password?.Decrypt(login.OrganizationId); PasswordCell.Button.Image = "eye"; @@ -122,6 +131,7 @@ namespace Bit.App.Pages }, new TableSection(" ") { + TotpCell, FolderCell, favoriteCell }, @@ -143,7 +153,7 @@ namespace Bit.App.Pages } else if(Device.RuntimePlatform == Device.Android) { - PasswordCell.Button.WidthRequest = 40; + PasswordCell.Button.WidthRequest = TotpCell.Button.WidthRequest = 40; } var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async () => @@ -172,6 +182,7 @@ namespace Bit.App.Pages login.Username = UsernameCell.Entry.Text?.Encrypt(login.OrganizationId); login.Password = PasswordCell.Entry.Text?.Encrypt(login.OrganizationId); login.Notes = NotesCell.Editor.Text?.Encrypt(login.OrganizationId); + login.Totp = TotpCell.Entry.Text?.Encrypt(login.OrganizationId); login.Favorite = favoriteCell.On; if(FolderCell.Picker.SelectedIndex > 0) @@ -226,12 +237,17 @@ namespace Bit.App.Pages UriCell?.InitEvents(); NameCell?.InitEvents(); NotesCell?.InitEvents(); + TotpCell?.InitEvents(); FolderCell?.InitEvents(); if(PasswordCell?.Button != null) { PasswordCell.Button.Clicked += PasswordButton_Clicked; } + if(TotpCell?.Button != null) + { + TotpCell.Button.Clicked += TotpButton_Clicked; + } if(GenerateCell != null) { GenerateCell.Tapped += GenerateCell_Tapped; @@ -246,6 +262,7 @@ namespace Bit.App.Pages { base.OnDisappearing(); PasswordCell?.Dispose(); + TotpCell?.Dispose(); UsernameCell?.Dispose(); UriCell?.Dispose(); NameCell?.Dispose(); @@ -256,6 +273,10 @@ namespace Bit.App.Pages { PasswordCell.Button.Clicked -= PasswordButton_Clicked; } + if(TotpCell?.Button != null) + { + TotpCell.Button.Clicked -= TotpButton_Clicked; + } if(GenerateCell != null) { GenerateCell.Tapped -= GenerateCell_Tapped; @@ -272,6 +293,11 @@ namespace Bit.App.Pages PasswordCell.Button.Image = "eye" + (!PasswordCell.Entry.IsPasswordFromToggled ? "_slash" : string.Empty); } + private void TotpButton_Clicked(object sender, EventArgs e) + { + // launch camera + } + private async void GenerateCell_Tapped(object sender, EventArgs e) { if(!string.IsNullOrWhiteSpace(PasswordCell.Entry.Text) diff --git a/src/App/Resources/AppResources.Designer.cs b/src/App/Resources/AppResources.Designer.cs index b058a0d8f..d9c1a58d7 100644 --- a/src/App/Resources/AppResources.Designer.cs +++ b/src/App/Resources/AppResources.Designer.cs @@ -178,6 +178,15 @@ namespace Bit.App.Resources { } } + /// + /// Looks up a localized string similar to Authenticator Key (TOTP). + /// + public static string AuthenticatorKey { + get { + return ResourceManager.GetString("AuthenticatorKey", resourceCulture); + } + } + /// /// Looks up a localized string similar to Auto-fill. /// diff --git a/src/App/Resources/AppResources.resx b/src/App/Resources/AppResources.resx index 8d9fb6b19..628be1fca 100644 --- a/src/App/Resources/AppResources.resx +++ b/src/App/Resources/AppResources.resx @@ -922,4 +922,7 @@ This attachment is {0} in size. Are you sure you want to download it onto your device? The placeholder will show the file size of the attachment. Ex "25 MB" + + Authenticator Key (TOTP) + \ No newline at end of file diff --git a/src/iOS/Resources/camera.png b/src/iOS/Resources/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc21a7722b3145b62c0a1cf4ddead80fc5b2053 GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6>jHd2T!FMr@1CK83>-dL0bOia z666=mz{t$P%ErMZAS5CxE}@{Js%2zh<>?g~9h;V3Qd(EvH*wayW$QO>*?HjL;iKoy zU%qwc-h&q}KYsnm?aWaRG-R2li(`mH_}r7n#hM%hTrLW^IQk?U=#gX1+)11dz8GJYD@< J);T3K0RRjU&%gix literal 0 HcmV?d00001 diff --git a/src/iOS/Resources/camera@2x.png b/src/iOS/Resources/camera@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..18687cf7e872d6abb0b9ebdc3b54f8fedfe2f049 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!3?wz9Rv9xeFmea@gt!8^HobdB5ikTMsb+iu z21i6mkY6wZBNHv*OV;Z>9-u(MFe~I(5=QAaL zSnBW9JGc17(|tY7;)2GZ#w!qk{1NA@pk;uS}DJA$)#y8R%|g_$#to0^;N&n35)hzGi`sqt}aaOlvLcq zkm40OQ!cJdJd&HLkS)Rd)%^F#ho@BcR48yq`aYQ1xA*XF9d60_4bQDMHhm9dGkUgg z-2=4?QyQC&9E@g_Zjjb?ILKF^aG3EnSHK3gB}PdPnwdmu7=IZlCHOLOSshr_BzLcm zNkqmnL#u*ghcfGl9gI4!k67I+l{|5S;ZC(|^!f+2QybS>rOjK{_U3NbxvKd=84?$cYRY^KUMKR`|#{t`PAbPt|#xsEm|aaKjfB}f5)s~dTI5;oyTV@&rRI2^?`-{Kc=afJO9j@|6~F%b{RZf{an^LB{Ts5_GopC literal 0 HcmV?d00001 diff --git a/src/iOS/Resources/camera@3x.png b/src/iOS/Resources/camera@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..19163e1c239e15d22ece54519c291aa0b737fd81 GIT binary patch literal 1208 zcmeAS@N?(olHy`uVBq!ia0vp^P9V&|3?#2~eYnNIz}O$)6XFWw+Vt)jMS~;+3VxL+ z0HdU(B*-tAfsu)sg_VtilZ%^&k6%DgNLWNvOk6@zN=8;rK~YInO?++|>33h{Jt z43Ut0d+@h?a3TZygZGljzHgjnz48rTR1&(-BdBvp(5@F*yE;_dOwFY4+wb{2@A2bL z``*vodbxiddv#fI=<(2t3jZ9Bevsmw#H(@bpo#65#TKEfzg%ftv}f`58Ua_1%@h1Y z7PhyZS;)byvx0ATRzf2GL&ba7u0EcXkT_HB`dMvv<{L$I6PHHF^BfYbI34tNRcnfB zD!F)9)lNs9Wr@dm{z02WDKCCRo5iosy zoAQO}OOtmA^1T)=Wx7&&P%!$*GDGf5|4Or1R(M8E5VFiO&UCDD=w&dyuGo6%P9jfG zhZJL$mO^jvMUI!up-dsZj$Of~yepfv7+0|=ehn6G({-H65PDrfb!BGb+DSmsC`H}C z%bd}YK(%ulw>bHl=P<5fS+R>DbJi^H4Xi7L7OdjG6r3fr!F7euf-IR!nX5L5<(v)S z44B%QayGb7`jSB?(-jU6-#eP34QHbkdNs^4FW@QI9U~H?ZOU}z>OsQ;x-VH&UaJE+ zwOb!##64*HC?HdNh4VrJhu-SU61B}!_6Rq>HsEE+xWqcyqm7Np@f7N5TH|X@)y1hIf#i0K3 zyf%aJ7ga8WY0LS`6=lzFPEjs6x^JV&%+)ta-h6zc_5bXzKfk{fz4`h6A5;A7?RV3p Se-!}JJA + + + + + + + + +