diff --git a/src/App/Pages/Vault/ViewPage.xaml b/src/App/Pages/Vault/ViewPage.xaml index 1feb28e6a..3d8be522c 100644 --- a/src/App/Pages/Vault/ViewPage.xaml +++ b/src/App/Pages/Vault/ViewPage.xaml @@ -23,6 +23,7 @@ + @@ -472,7 +473,7 @@ - + @@ -580,6 +579,16 @@ + + diff --git a/src/App/Pages/Vault/ViewPageViewModel.cs b/src/App/Pages/Vault/ViewPageViewModel.cs index 3b502f05b..1ca2fdf1c 100644 --- a/src/App/Pages/Vault/ViewPageViewModel.cs +++ b/src/App/Pages/Vault/ViewPageViewModel.cs @@ -72,10 +72,12 @@ namespace Bit.App.Pages nameof(IsCard), nameof(IsSecureNote), nameof(ShowUris), - nameof(ShowFields), nameof(ShowAttachments), nameof(ShowTotp), nameof(ColoredPassword), + nameof(UpdatedText), + nameof(PasswordUpdatedText), + nameof(PasswordHistoryText), nameof(ShowIdentityAddress), }); } @@ -112,12 +114,67 @@ namespace Bit.App.Pages public bool IsCard => Cipher?.Type == Core.Enums.CipherType.Card; public bool IsSecureNote => Cipher?.Type == Core.Enums.CipherType.SecureNote; public FormattedString ColoredPassword => PasswordFormatter.FormatPassword(Cipher.Login.Password); + public FormattedString UpdatedText + { + get + { + var fs = new FormattedString(); + fs.Spans.Add(new Span + { + Text = string.Format("{0}:", AppResources.DateUpdated), + FontAttributes = FontAttributes.Bold + }); + fs.Spans.Add(new Span + { + Text = string.Format(" {0} {1}", + Cipher.RevisionDate.ToShortDateString(), + Cipher.RevisionDate.ToShortTimeString()) + }); + return fs; + } + } + public FormattedString PasswordUpdatedText + { + get + { + var fs = new FormattedString(); + fs.Spans.Add(new Span + { + Text = string.Format("{0}:", AppResources.DatePasswordUpdated), + FontAttributes = FontAttributes.Bold + }); + fs.Spans.Add(new Span + { + Text = string.Format(" {0} {1}", + Cipher.PasswordRevisionDisplayDate?.ToShortDateString(), + Cipher.PasswordRevisionDisplayDate?.ToShortTimeString()) + }); + return fs; + } + } + public FormattedString PasswordHistoryText + { + get + { + var fs = new FormattedString(); + fs.Spans.Add(new Span + { + Text = string.Format("{0}:", AppResources.PasswordHistory), + FontAttributes = FontAttributes.Bold + }); + fs.Spans.Add(new Span + { + Text = string.Format(" {0}", Cipher.PasswordHistory.Count.ToString()), + TextColor = (Color)Application.Current.Resources["PrimaryColor"] + }); + return fs; + } + } public bool ShowUris => IsLogin && Cipher.Login.HasUris; public bool ShowIdentityAddress => IsIdentity && ( !string.IsNullOrWhiteSpace(Cipher.Identity.Address1) || !string.IsNullOrWhiteSpace(Cipher.Identity.City) || !string.IsNullOrWhiteSpace(Cipher.Identity.Country)); - public bool ShowFields => Cipher.HasFields; public bool ShowAttachments => Cipher.HasAttachments && (CanAccessPremium || Cipher.OrganizationId != null); public bool ShowTotp => IsLogin && !string.IsNullOrWhiteSpace(Cipher.Login.Totp) && !string.IsNullOrWhiteSpace(TotpCodeFormatted); diff --git a/src/App/Resources/AppResources.Designer.cs b/src/App/Resources/AppResources.Designer.cs index e8ab87d12..2c9a6babe 100644 --- a/src/App/Resources/AppResources.Designer.cs +++ b/src/App/Resources/AppResources.Designer.cs @@ -2652,6 +2652,15 @@ namespace Bit.App.Resources { } } + /// + /// Looks up a localized string similar to Password History. + /// + internal static string PasswordHistory { + get { + return ResourceManager.GetString("PasswordHistory", resourceCulture); + } + } + /// /// Looks up a localized string similar to Are you sure you want to overwrite the current password?. /// diff --git a/src/App/Resources/AppResources.resx b/src/App/Resources/AppResources.resx index 2238c900d..3767ff445 100644 --- a/src/App/Resources/AppResources.resx +++ b/src/App/Resources/AppResources.resx @@ -1387,4 +1387,7 @@ Value + + Password History + \ No newline at end of file diff --git a/src/App/Styles/Base.xaml b/src/App/Styles/Base.xaml index 3ccaf880c..4ef144a37 100644 --- a/src/App/Styles/Base.xaml +++ b/src/App/Styles/Base.xaml @@ -16,6 +16,11 @@ + + + + + @@ -152,4 +181,11 @@ +