From a1741fdd67f02825bef032762e73ae41ec0a31cc Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Wed, 29 May 2019 15:50:20 -0400 Subject: [PATCH] themeing --- src/Android/MainActivity.cs | 18 ++ src/Android/Resources/Resource.designer.cs | 259 ++++++++++-------- src/Android/Resources/values/colors.xml | 15 +- src/Android/Resources/values/styles.xml | 17 ++ src/App/App.xaml.cs | 18 +- .../Pages/Settings/OptionsPageViewModel.cs | 9 +- src/App/Pages/TabsPage.cs | 4 + src/App/Pages/Vault/AddEditPageViewModel.cs | 2 +- src/App/Services/MobileStorageService.cs | 12 +- src/App/Services/PreferencesStorageService.cs | 9 +- src/App/Styles/Base.xaml | 12 +- src/App/Styles/Dark.xaml | 10 +- src/App/Styles/Light.xaml | 4 + src/App/Utilities/ThemeManager.cs | 15 +- 14 files changed, 265 insertions(+), 139 deletions(-) diff --git a/src/Android/MainActivity.cs b/src/Android/MainActivity.cs index 70f24bd67..bfb9282f3 100644 --- a/src/Android/MainActivity.cs +++ b/src/Android/MainActivity.cs @@ -15,6 +15,7 @@ using Bit.Droid.Receivers; using Bit.App.Models; using Bit.Core.Enums; using Android.Nfc; +using Bit.App.Utilities; namespace Bit.Droid { @@ -56,6 +57,7 @@ namespace Bit.Droid TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; + UpdateTheme(ThemeManager.GetTheme()); base.OnCreate(savedInstanceState); if(!CoreHelpers.InDebugMode()) { @@ -95,6 +97,10 @@ namespace Bit.Droid { ListenYubiKey((bool)message.Data); } + else if(message.Command == "updatedTheme") + { + Recreate(); + } }); } @@ -255,5 +261,17 @@ namespace Bit.Droid _messagingService.Send("gotYubiKeyOTP", otp); } } + + private void UpdateTheme(string theme) + { + if(theme == "dark") + { + SetTheme(Resource.Style.DarkTheme); + } + else + { + SetTheme(Resource.Style.MainTheme); + } + } } } diff --git a/src/Android/Resources/Resource.designer.cs b/src/Android/Resources/Resource.designer.cs index bfbcb96aa..d5178e478 100644 --- a/src/Android/Resources/Resource.designer.cs +++ b/src/Android/Resources/Resource.designer.cs @@ -6722,44 +6722,44 @@ namespace Bit.Droid public partial class Color { - // aapt resource value: 0x7f0b007b - public const int abc_background_cache_hint_selector_material_dark = 2131427451; + // aapt resource value: 0x7f0b0082 + public const int abc_background_cache_hint_selector_material_dark = 2131427458; - // aapt resource value: 0x7f0b007c - public const int abc_background_cache_hint_selector_material_light = 2131427452; + // aapt resource value: 0x7f0b0083 + public const int abc_background_cache_hint_selector_material_light = 2131427459; - // aapt resource value: 0x7f0b007d - public const int abc_btn_colored_borderless_text_material = 2131427453; + // aapt resource value: 0x7f0b0084 + public const int abc_btn_colored_borderless_text_material = 2131427460; - // aapt resource value: 0x7f0b007e - public const int abc_btn_colored_text_material = 2131427454; + // aapt resource value: 0x7f0b0085 + public const int abc_btn_colored_text_material = 2131427461; - // aapt resource value: 0x7f0b007f - public const int abc_color_highlight_material = 2131427455; + // aapt resource value: 0x7f0b0086 + public const int abc_color_highlight_material = 2131427462; - // aapt resource value: 0x7f0b0080 - public const int abc_hint_foreground_material_dark = 2131427456; + // aapt resource value: 0x7f0b0087 + public const int abc_hint_foreground_material_dark = 2131427463; - // aapt resource value: 0x7f0b0081 - public const int abc_hint_foreground_material_light = 2131427457; + // aapt resource value: 0x7f0b0088 + public const int abc_hint_foreground_material_light = 2131427464; // aapt resource value: 0x7f0b000c public const int abc_input_method_navigation_guard = 2131427340; - // aapt resource value: 0x7f0b0082 - public const int abc_primary_text_disable_only_material_dark = 2131427458; + // aapt resource value: 0x7f0b0089 + public const int abc_primary_text_disable_only_material_dark = 2131427465; - // aapt resource value: 0x7f0b0083 - public const int abc_primary_text_disable_only_material_light = 2131427459; + // aapt resource value: 0x7f0b008a + public const int abc_primary_text_disable_only_material_light = 2131427466; - // aapt resource value: 0x7f0b0084 - public const int abc_primary_text_material_dark = 2131427460; + // aapt resource value: 0x7f0b008b + public const int abc_primary_text_material_dark = 2131427467; - // aapt resource value: 0x7f0b0085 - public const int abc_primary_text_material_light = 2131427461; + // aapt resource value: 0x7f0b008c + public const int abc_primary_text_material_light = 2131427468; - // aapt resource value: 0x7f0b0086 - public const int abc_search_url_text = 2131427462; + // aapt resource value: 0x7f0b008d + public const int abc_search_url_text = 2131427469; // aapt resource value: 0x7f0b000d public const int abc_search_url_text_normal = 2131427341; @@ -6770,29 +6770,29 @@ namespace Bit.Droid // aapt resource value: 0x7f0b000f public const int abc_search_url_text_selected = 2131427343; - // aapt resource value: 0x7f0b0087 - public const int abc_secondary_text_material_dark = 2131427463; - - // aapt resource value: 0x7f0b0088 - public const int abc_secondary_text_material_light = 2131427464; - - // aapt resource value: 0x7f0b0089 - public const int abc_tint_btn_checkable = 2131427465; - - // aapt resource value: 0x7f0b008a - public const int abc_tint_default = 2131427466; - - // aapt resource value: 0x7f0b008b - public const int abc_tint_edittext = 2131427467; - - // aapt resource value: 0x7f0b008c - public const int abc_tint_seek_thumb = 2131427468; - - // aapt resource value: 0x7f0b008d - public const int abc_tint_spinner = 2131427469; - // aapt resource value: 0x7f0b008e - public const int abc_tint_switch_track = 2131427470; + public const int abc_secondary_text_material_dark = 2131427470; + + // aapt resource value: 0x7f0b008f + public const int abc_secondary_text_material_light = 2131427471; + + // aapt resource value: 0x7f0b0090 + public const int abc_tint_btn_checkable = 2131427472; + + // aapt resource value: 0x7f0b0091 + public const int abc_tint_default = 2131427473; + + // aapt resource value: 0x7f0b0092 + public const int abc_tint_edittext = 2131427474; + + // aapt resource value: 0x7f0b0093 + public const int abc_tint_seek_thumb = 2131427475; + + // aapt resource value: 0x7f0b0094 + public const int abc_tint_spinner = 2131427476; + + // aapt resource value: 0x7f0b0095 + public const int abc_tint_switch_track = 2131427477; // aapt resource value: 0x7f0b0078 public const int accent = 2131427448; @@ -6815,8 +6815,8 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0015 public const int background_material_light = 2131427349; - // aapt resource value: 0x7f0b0072 - public const int black = 2131427442; + // aapt resource value: 0x7f0b006f + public const int black = 2131427439; // aapt resource value: 0x7f0b0079 public const int border = 2131427449; @@ -6869,17 +6869,17 @@ namespace Bit.Droid // aapt resource value: 0x7f0b000b public const int cardview_shadow_start_color = 2131427339; - // aapt resource value: 0x7f0b0070 - public const int colorAccent = 2131427440; + // aapt resource value: 0x7f0b0075 + public const int colorAccent = 2131427445; - // aapt resource value: 0x7f0b006e - public const int colorPrimary = 2131427438; + // aapt resource value: 0x7f0b0073 + public const int colorPrimary = 2131427443; - // aapt resource value: 0x7f0b006f - public const int colorPrimaryDark = 2131427439; + // aapt resource value: 0x7f0b0074 + public const int colorPrimaryDark = 2131427444; - // aapt resource value: 0x7f0b008f - public const int common_google_signin_btn_text_dark = 2131427471; + // aapt resource value: 0x7f0b0096 + public const int common_google_signin_btn_text_dark = 2131427478; // aapt resource value: 0x7f0b0000 public const int common_google_signin_btn_text_dark_default = 2131427328; @@ -6893,8 +6893,8 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0003 public const int common_google_signin_btn_text_dark_pressed = 2131427331; - // aapt resource value: 0x7f0b0090 - public const int common_google_signin_btn_text_light = 2131427472; + // aapt resource value: 0x7f0b0097 + public const int common_google_signin_btn_text_light = 2131427479; // aapt resource value: 0x7f0b0004 public const int common_google_signin_btn_text_light_default = 2131427332; @@ -6908,14 +6908,35 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0007 public const int common_google_signin_btn_text_light_pressed = 2131427335; - // aapt resource value: 0x7f0b0091 - public const int common_google_signin_btn_tint = 2131427473; + // aapt resource value: 0x7f0b0098 + public const int common_google_signin_btn_tint = 2131427480; + + // aapt resource value: 0x7f0b007f + public const int dark_accent = 2131427455; + + // aapt resource value: 0x7f0b0080 + public const int dark_border = 2131427456; + + // aapt resource value: 0x7f0b007c + public const int dark_colorAccent = 2131427452; + + // aapt resource value: 0x7f0b007a + public const int dark_colorPrimary = 2131427450; + + // aapt resource value: 0x7f0b007b + public const int dark_colorPrimaryDark = 2131427451; + + // aapt resource value: 0x7f0b007e + public const int dark_darkaccent = 2131427454; + + // aapt resource value: 0x7f0b007d + public const int dark_primary = 2131427453; // aapt resource value: 0x7f0b0077 public const int darkaccent = 2131427447; - // aapt resource value: 0x7f0b0073 - public const int darkgray = 2131427443; + // aapt resource value: 0x7f0b0070 + public const int darkgray = 2131427440; // aapt resource value: 0x7f0b0049 public const int design_bottom_navigation_shadow_color = 2131427401; @@ -6926,8 +6947,8 @@ namespace Bit.Droid // aapt resource value: 0x7f0b004b public const int design_default_color_primary_dark = 2131427403; - // aapt resource value: 0x7f0b0092 - public const int design_error = 2131427474; + // aapt resource value: 0x7f0b0099 + public const int design_error = 2131427481; // aapt resource value: 0x7f0b004c public const int design_fab_shadow_end_color = 2131427404; @@ -6953,8 +6974,8 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0053 public const int design_snackbar_background_color = 2131427411; - // aapt resource value: 0x7f0b0093 - public const int design_tint_password_toggle = 2131427475; + // aapt resource value: 0x7f0b009a + public const int design_tint_password_toggle = 2131427482; // aapt resource value: 0x7f0b001e public const int dim_foreground_disabled_material_dark = 2131427358; @@ -6983,8 +7004,8 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0025 public const int foreground_material_light = 2131427365; - // aapt resource value: 0x7f0b0074 - public const int gray = 2131427444; + // aapt resource value: 0x7f0b0071 + public const int gray = 2131427441; // aapt resource value: 0x7f0b0026 public const int highlighted_text_material_dark = 2131427366; @@ -7022,14 +7043,14 @@ namespace Bit.Droid // aapt resource value: 0x7f0b006c public const int hockeyapp_text_white = 2131427436; - // aapt resource value: 0x7f0b007a - public const int ic_launcher_background = 2131427450; + // aapt resource value: 0x7f0b0081 + public const int ic_launcher_background = 2131427457; // aapt resource value: 0x7f0b006d public const int launcher_background = 2131427437; - // aapt resource value: 0x7f0b0075 - public const int lightgray = 2131427445; + // aapt resource value: 0x7f0b0072 + public const int lightgray = 2131427442; // aapt resource value: 0x7f0b0028 public const int material_blue_grey_800 = 2131427368; @@ -7067,71 +7088,71 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0033 public const int material_grey_900 = 2131427379; - // aapt resource value: 0x7f0b0094 - public const int mtrl_bottom_nav_colored_item_tint = 2131427476; + // aapt resource value: 0x7f0b009b + public const int mtrl_bottom_nav_colored_item_tint = 2131427483; - // aapt resource value: 0x7f0b0095 - public const int mtrl_bottom_nav_item_tint = 2131427477; + // aapt resource value: 0x7f0b009c + public const int mtrl_bottom_nav_item_tint = 2131427484; // aapt resource value: 0x7f0b0054 public const int mtrl_btn_bg_color_disabled = 2131427412; - // aapt resource value: 0x7f0b0096 - public const int mtrl_btn_bg_color_selector = 2131427478; + // aapt resource value: 0x7f0b009d + public const int mtrl_btn_bg_color_selector = 2131427485; - // aapt resource value: 0x7f0b0097 - public const int mtrl_btn_ripple_color = 2131427479; + // aapt resource value: 0x7f0b009e + public const int mtrl_btn_ripple_color = 2131427486; - // aapt resource value: 0x7f0b0098 - public const int mtrl_btn_stroke_color_selector = 2131427480; + // aapt resource value: 0x7f0b009f + public const int mtrl_btn_stroke_color_selector = 2131427487; - // aapt resource value: 0x7f0b0099 - public const int mtrl_btn_text_btn_ripple_color = 2131427481; + // aapt resource value: 0x7f0b00a0 + public const int mtrl_btn_text_btn_ripple_color = 2131427488; // aapt resource value: 0x7f0b0055 public const int mtrl_btn_text_color_disabled = 2131427413; - // aapt resource value: 0x7f0b009a - public const int mtrl_btn_text_color_selector = 2131427482; + // aapt resource value: 0x7f0b00a1 + public const int mtrl_btn_text_color_selector = 2131427489; // aapt resource value: 0x7f0b0056 public const int mtrl_btn_transparent_bg_color = 2131427414; - // aapt resource value: 0x7f0b009b - public const int mtrl_chip_background_color = 2131427483; + // aapt resource value: 0x7f0b00a2 + public const int mtrl_chip_background_color = 2131427490; - // aapt resource value: 0x7f0b009c - public const int mtrl_chip_close_icon_tint = 2131427484; + // aapt resource value: 0x7f0b00a3 + public const int mtrl_chip_close_icon_tint = 2131427491; - // aapt resource value: 0x7f0b009d - public const int mtrl_chip_ripple_color = 2131427485; + // aapt resource value: 0x7f0b00a4 + public const int mtrl_chip_ripple_color = 2131427492; - // aapt resource value: 0x7f0b009e - public const int mtrl_chip_text_color = 2131427486; + // aapt resource value: 0x7f0b00a5 + public const int mtrl_chip_text_color = 2131427493; - // aapt resource value: 0x7f0b009f - public const int mtrl_fab_ripple_color = 2131427487; + // aapt resource value: 0x7f0b00a6 + public const int mtrl_fab_ripple_color = 2131427494; // aapt resource value: 0x7f0b0057 public const int mtrl_scrim_color = 2131427415; - // aapt resource value: 0x7f0b00a0 - public const int mtrl_tabs_colored_ripple_color = 2131427488; + // aapt resource value: 0x7f0b00a7 + public const int mtrl_tabs_colored_ripple_color = 2131427495; - // aapt resource value: 0x7f0b00a1 - public const int mtrl_tabs_icon_color_selector = 2131427489; + // aapt resource value: 0x7f0b00a8 + public const int mtrl_tabs_icon_color_selector = 2131427496; - // aapt resource value: 0x7f0b00a2 - public const int mtrl_tabs_icon_color_selector_colored = 2131427490; + // aapt resource value: 0x7f0b00a9 + public const int mtrl_tabs_icon_color_selector_colored = 2131427497; - // aapt resource value: 0x7f0b00a3 - public const int mtrl_tabs_legacy_text_color_selector = 2131427491; + // aapt resource value: 0x7f0b00aa + public const int mtrl_tabs_legacy_text_color_selector = 2131427498; - // aapt resource value: 0x7f0b00a4 - public const int mtrl_tabs_ripple_color = 2131427492; + // aapt resource value: 0x7f0b00ab + public const int mtrl_tabs_ripple_color = 2131427499; - // aapt resource value: 0x7f0b00a5 - public const int mtrl_text_btn_text_color_selector = 2131427493; + // aapt resource value: 0x7f0b00ac + public const int mtrl_text_btn_text_color_selector = 2131427500; // aapt resource value: 0x7f0b0058 public const int mtrl_textinput_default_box_stroke_color = 2131427416; @@ -7205,11 +7226,11 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0043 public const int switch_thumb_disabled_material_light = 2131427395; - // aapt resource value: 0x7f0b00a6 - public const int switch_thumb_material_dark = 2131427494; + // aapt resource value: 0x7f0b00ad + public const int switch_thumb_material_dark = 2131427501; - // aapt resource value: 0x7f0b00a7 - public const int switch_thumb_material_light = 2131427495; + // aapt resource value: 0x7f0b00ae + public const int switch_thumb_material_light = 2131427502; // aapt resource value: 0x7f0b0044 public const int switch_thumb_normal_material_dark = 2131427396; @@ -7223,8 +7244,8 @@ namespace Bit.Droid // aapt resource value: 0x7f0b0047 public const int tooltip_background_light = 2131427399; - // aapt resource value: 0x7f0b0071 - public const int white = 2131427441; + // aapt resource value: 0x7f0b006e + public const int white = 2131427438; static Color() { @@ -11039,8 +11060,8 @@ namespace Bit.Droid // aapt resource value: 0x7f0e016d public const int Animation_Design_BottomSheetDialog = 2131624301; - // aapt resource value: 0x7f0e0205 - public const int AppCompatDialogStyle = 2131624453; + // aapt resource value: 0x7f0e0207 + public const int AppCompatDialogStyle = 2131624455; // aapt resource value: 0x7f0e009d public const int Base_AlertDialog_AppCompat = 2131624093; @@ -11615,6 +11636,12 @@ namespace Bit.Droid // aapt resource value: 0x7f0e000e public const int CardView_Light = 2131623950; + // aapt resource value: 0x7f0e0205 + public const int DarkTheme = 2131624453; + + // aapt resource value: 0x7f0e0206 + public const int DarkTheme_Base = 2131624454; + // aapt resource value: 0x7f0e01ff public const int HockeyApp_ButtonStyle = 2131624447; diff --git a/src/Android/Resources/values/colors.xml b/src/Android/Resources/values/colors.xml index f3bb05bad..fa02a8c7a 100644 --- a/src/Android/Resources/values/colors.xml +++ b/src/Android/Resources/values/colors.xml @@ -1,16 +1,25 @@ #FFFFFF - #3c8dbc - #222d32 - #3883af #FFFFFF #000000 #333333 #738182 #efeff4 + + #3c8dbc + #222d32 + #3883af #3c8dbc #222d32 #3883af #dddddd + + #52bdfb + #222d32 + #449BCE + #52bdfb + #222d32 + #449BCE + #545454 diff --git a/src/Android/Resources/values/styles.xml b/src/Android/Resources/values/styles.xml index ee0e69426..4df4b819a 100644 --- a/src/Android/Resources/values/styles.xml +++ b/src/Android/Resources/values/styles.xml @@ -22,6 +22,23 @@ @style/ThemeOverlay.AppCompat.Light + + + + diff --git a/src/App/App.xaml.cs b/src/App/App.xaml.cs index e029ced9c..18e01535c 100644 --- a/src/App/App.xaml.cs +++ b/src/App/App.xaml.cs @@ -62,13 +62,7 @@ namespace Bit.App _i18nService = ServiceContainer.Resolve("i18nService") as MobileI18nService; _deviceActionService = ServiceContainer.Resolve("deviceActionService"); - InitializeComponent(); - SetCulture(); - ThemeManager.SetThemeStyle("light"); - MainPage = new HomePage(); - var mainPageTask = SetMainPageAsync(); - - ServiceContainer.Resolve("platformUtilsService").Init(); + Bootstrap(); _broadcasterService.Subscribe(nameof(App), async (message) => { if(message.Command == "showDialog") @@ -257,5 +251,15 @@ namespace Bit.App var parsedDomain = DomainName.TryParse("https://bitwarden.com", out var domainName); }); } + + private void Bootstrap() + { + InitializeComponent(); + SetCulture(); + ThemeManager.SetTheme(); + MainPage = new HomePage(); + var mainPageTask = SetMainPageAsync(); + ServiceContainer.Resolve("platformUtilsService").Init(); + } } } diff --git a/src/App/Pages/Settings/OptionsPageViewModel.cs b/src/App/Pages/Settings/OptionsPageViewModel.cs index 6a41366e8..e833a1f1d 100644 --- a/src/App/Pages/Settings/OptionsPageViewModel.cs +++ b/src/App/Pages/Settings/OptionsPageViewModel.cs @@ -7,6 +7,7 @@ using Bit.Core.Enums; using Bit.Core.Utilities; using System.Collections.Generic; using System.Threading.Tasks; +using Xamarin.Forms; namespace Bit.App.Pages { @@ -17,6 +18,7 @@ namespace Bit.App.Pages private readonly IStorageService _storageService; private readonly ITotpService _totpService; private readonly IStateService _stateService; + private readonly IMessagingService _messagingService; private bool _disableFavicon; private bool _disableAutoTotpCopy; @@ -32,6 +34,7 @@ namespace Bit.App.Pages _storageService = ServiceContainer.Resolve("storageService"); _totpService = ServiceContainer.Resolve("totpService"); _stateService = ServiceContainer.Resolve("stateService"); + _messagingService = ServiceContainer.Resolve("messagingService"); PageTitle = AppResources.Options; @@ -172,7 +175,11 @@ namespace Bit.App.Pages { var theme = ThemeOptions[ThemeSelectedIndex].Key; await _storageService.SaveAsync(Constants.ThemeKey, theme); - ThemeManager.SetThemeStyle(theme); + if(Device.RuntimePlatform == Device.Android) + { + await _deviceActionService.ShowLoadingAsync(AppResources.Saving); + } + _messagingService.Send("updatedTheme", theme); } } diff --git a/src/App/Pages/TabsPage.cs b/src/App/Pages/TabsPage.cs index 781fea707..e1bf67822 100644 --- a/src/App/Pages/TabsPage.cs +++ b/src/App/Pages/TabsPage.cs @@ -32,6 +32,10 @@ namespace Bit.App.Pages Xamarin.Forms.PlatformConfiguration.AndroidSpecific.ToolbarPlacement.Bottom); Xamarin.Forms.PlatformConfiguration.AndroidSpecific.TabbedPage.SetIsSwipePagingEnabled(this, false); Xamarin.Forms.PlatformConfiguration.AndroidSpecific.TabbedPage.SetIsSmoothScrollEnabled(this, false); + Xamarin.Forms.PlatformConfiguration.AndroidSpecific.TabbedPage.SetBarSelectedItemColor(this, + (Color)Application.Current.Resources["TabBarSelectedItemColor"]); + Xamarin.Forms.PlatformConfiguration.AndroidSpecific.TabbedPage.SetBarItemColor(this, + (Color)Application.Current.Resources["TabBarItemColor"]); } protected async override void OnCurrentPageChanged() diff --git a/src/App/Pages/Vault/AddEditPageViewModel.cs b/src/App/Pages/Vault/AddEditPageViewModel.cs index c4644f11e..c7646bcba 100644 --- a/src/App/Pages/Vault/AddEditPageViewModel.cs +++ b/src/App/Pages/Vault/AddEditPageViewModel.cs @@ -349,7 +349,7 @@ namespace Bit.App.Pages col.Checked = CollectionIds.Contains(col.Collection.Id); } } - if(Cipher.Login.Uris != null) + if(Cipher.Login?.Uris != null) { Uris.ResetWithRange(Cipher.Login.Uris); } diff --git a/src/App/Services/MobileStorageService.cs b/src/App/Services/MobileStorageService.cs index c74eb52c4..ce36ecf9d 100644 --- a/src/App/Services/MobileStorageService.cs +++ b/src/App/Services/MobileStorageService.cs @@ -12,7 +12,17 @@ namespace Bit.App.Services private readonly HashSet _preferenceStorageKeys = new HashSet { - Constants.LockOptionKey + Constants.LockOptionKey, + Constants.ThemeKey, + Constants.DefaultUriMatch, + Constants.DisableAutoTotpCopyKey, + Constants.DisableFaviconKey, + Constants.ClearClipboardKey, + Constants.AccessibilityAutofillPasswordFieldKey, + Constants.AccessibilityAutofillPersistNotificationKey, + Constants.LastActiveKey, + Constants.PushInitialPromptShownKey, + Constants.LastFileCacheClearKey }; public MobileStorageService( diff --git a/src/App/Services/PreferencesStorageService.cs b/src/App/Services/PreferencesStorageService.cs index f7a54c3a3..f67b9c621 100644 --- a/src/App/Services/PreferencesStorageService.cs +++ b/src/App/Services/PreferencesStorageService.cs @@ -8,7 +8,8 @@ namespace Bit.App.Services { public class PreferencesStorageService : IStorageService { - private readonly string _keyFormat = "bwPreferencesStorage:{0}"; + public static string KeyFormat = "bwPreferencesStorage:{0}"; + private readonly string _sharedName; private readonly JsonSerializerSettings _jsonSettings = new JsonSerializerSettings { @@ -22,7 +23,7 @@ namespace Bit.App.Services public Task GetAsync(string key) { - var formattedKey = string.Format(_keyFormat, key); + var formattedKey = string.Format(KeyFormat, key); if(!Xamarin.Essentials.Preferences.ContainsKey(formattedKey, _sharedName)) { return Task.FromResult(default(T)); @@ -73,7 +74,7 @@ namespace Bit.App.Services return RemoveAsync(key); } - var formattedKey = string.Format(_keyFormat, key); + var formattedKey = string.Format(KeyFormat, key); var objType = typeof(T); if(objType == typeof(string)) { @@ -109,7 +110,7 @@ namespace Bit.App.Services public Task RemoveAsync(string key) { - var formattedKey = string.Format(_keyFormat, key); + var formattedKey = string.Format(KeyFormat, key); if(Xamarin.Essentials.Preferences.ContainsKey(formattedKey, _sharedName)) { Xamarin.Essentials.Preferences.Remove(formattedKey, _sharedName); diff --git a/src/App/Styles/Base.xaml b/src/App/Styles/Base.xaml index 93401d14b..bd17a9585 100644 --- a/src/App/Styles/Base.xaml +++ b/src/App/Styles/Base.xaml @@ -2,6 +2,7 @@ @@ -62,6 +63,13 @@ Value="{StaticResource SliderThumbBorderColor}" /> + + + - + - +