mirror of
https://github.com/bitwarden/mobile
synced 2026-01-07 11:03:54 +00:00
[SG-471] Added text resources and arguments to Page.
This commit is contained in:
@@ -22,67 +22,65 @@
|
|||||||
<u:InverseBoolConverter x:Key="inverseBool" />
|
<u:InverseBoolConverter x:Key="inverseBool" />
|
||||||
<u:StringHasValueConverter x:Key="stringHasValue" />
|
<u:StringHasValueConverter x:Key="stringHasValue" />
|
||||||
<u:IsNotNullConverter x:Key="notNull" />
|
<u:IsNotNullConverter x:Key="notNull" />
|
||||||
<ToolbarItem Text="{u:I18n Cancel}" Clicked="Close_Clicked" Order="Primary" Priority="-1"
|
|
||||||
x:Key="closeItem" x:Name="_closeItem" />
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</ContentPage.Resources>
|
</ContentPage.Resources>
|
||||||
<ScrollView x:Name="_scrollView" Padding="7, 0, 7, 20">
|
<ScrollView x:Name="_scrollView" Padding="7, 0, 7, 20">
|
||||||
<StackLayout>
|
<StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="Are you trying to log in?"
|
Text="{u:I18n AreYouTryingToLogIn}"
|
||||||
FontSize="Title"
|
FontSize="Title"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
Margin="0,14,0,21"/>
|
Margin="0,14,0,21"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Log in attempt by jtouchstone@bitwarden on bitwaden.com"
|
Text="{Binding LogInAttempByLabel}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,24"/>
|
Margin="0,0,0,24"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Fingerprint phrase"
|
Text="{u:I18n FingerprintPhrase}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"/>
|
FontAttributes="Bold"/>
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="longinus-spear-black-moon-scrolls"
|
FormattedText="{Binding FingerprintPhraseFormatted}"
|
||||||
FontSize="Medium"
|
FontSize="Medium"
|
||||||
Margin="0,0,0,27"/>
|
Margin="0,0,0,27"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Device Type"
|
Text="{u:I18n DeviceType}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"/>
|
FontAttributes="Bold"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Intel Mac OS X 10_15_7"
|
Text="{Binding DeviceType}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,21"/>
|
Margin="0,0,0,21"/>
|
||||||
<Label
|
<Label
|
||||||
Text="IP Address"
|
Text="{u:I18n IpAddress}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"/>
|
FontAttributes="Bold"/>
|
||||||
<Label
|
<Label
|
||||||
Text="192.168. 1.1"
|
Text="{Binding IpAddress}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,21"/>
|
Margin="0,0,0,21"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Near"
|
Text="{u:I18n Near}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"/>
|
FontAttributes="Bold"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Panama City Beach, FL 32407 USA"
|
Text="{Binding NearLocation}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,21"/>
|
Margin="0,0,0,21"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Time"
|
Text="{u:I18n Time}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"/>
|
FontAttributes="Bold"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Just now"
|
Text="{Binding TimeOfRequest}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,57"/>
|
Margin="0,0,0,57"/>
|
||||||
<Button
|
<Button
|
||||||
Text="Confirm Log In"
|
Text="{u:I18n ConfirmLogIn}"
|
||||||
Margin="0,0,0,17"
|
Margin="0,0,0,17"
|
||||||
StyleClass="btn-primary"/>
|
StyleClass="btn-primary"/>
|
||||||
<Button
|
<Button
|
||||||
Text="Deny Log In"
|
Text="{u:I18n DenyLogIn}"
|
||||||
StyleClass="btn-secundary"/>
|
StyleClass="btn-secundary"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|||||||
@@ -1,16 +1,25 @@
|
|||||||
using Bit.App.Models;
|
namespace Bit.App.Pages
|
||||||
using Bit.App.Resources;
|
|
||||||
using Bit.App.Utilities;
|
|
||||||
using Bit.Core.Utilities;
|
|
||||||
using Xamarin.Forms;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
|
||||||
{
|
{
|
||||||
public partial class LoginPasswordlessPage : Bit.App.Pages.BaseContentPage
|
public partial class LoginPasswordlessPage : BaseContentPage
|
||||||
{
|
{
|
||||||
public LoginPasswordlessPage()
|
private LoginPasswordlessViewModel _vm;
|
||||||
|
|
||||||
|
public LoginPasswordlessPage(string email, string deviceType, string ipAddress, string location, string fingerprintPhrase)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
_vm = BindingContext as LoginPasswordlessViewModel;
|
||||||
|
_vm.Page = this;
|
||||||
|
_vm.Email = email;
|
||||||
|
_vm.DeviceType = deviceType;
|
||||||
|
_vm.IpAddress = ipAddress;
|
||||||
|
_vm.NearLocation = location;
|
||||||
|
_vm.FingerprintPhrase = fingerprintPhrase;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnAppearing()
|
||||||
|
{
|
||||||
|
_vm.InitAsync();
|
||||||
|
base.OnAppearing();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void Close_Clicked(object sender, System.EventArgs e)
|
private async void Close_Clicked(object sender, System.EventArgs e)
|
||||||
|
|||||||
@@ -1,12 +1,94 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Bit.App.Resources;
|
||||||
|
using Bit.Core.Abstractions;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using Bit.App.Utilities;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
public class LoginPasswordlessViewModel : BaseViewModel
|
public class LoginPasswordlessViewModel : BaseViewModel
|
||||||
{
|
{
|
||||||
|
private IStateService _stateService;
|
||||||
|
|
||||||
|
public string Email { get; set; }
|
||||||
|
public string LogInAttempByLabel { get; set; }
|
||||||
|
public string FingerprintPhrase { get; set; }
|
||||||
|
public FormattedString FingerprintPhraseFormatted { get; set; }
|
||||||
|
public string DeviceType { get; set; }
|
||||||
|
public string IpAddress { get; set; }
|
||||||
|
public string NearLocation { get; set; }
|
||||||
|
public string TimeOfRequest { get; set; }
|
||||||
|
public DateTime RequestDate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public LoginPasswordlessViewModel()
|
public LoginPasswordlessViewModel()
|
||||||
{
|
{
|
||||||
PageTitle = "Log In requested";
|
_stateService = ServiceContainer.Resolve<IStateService>("stateService");
|
||||||
|
PageTitle = AppResources.LogInRequested;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task InitAsync()
|
||||||
|
{
|
||||||
|
LogInAttempByLabel = string.Format(AppResources.LogInAttemptByOn, Email, "bitwarden login test");
|
||||||
|
FingerprintPhraseFormatted = CreateFingerprintPhrase();
|
||||||
|
TimeOfRequest = CreateRequestDate();
|
||||||
|
UpdateScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
private FormattedString CreateFingerprintPhrase()
|
||||||
|
{
|
||||||
|
var fingerprintList = FingerprintPhrase.Split('-').ToList();
|
||||||
|
var fs = new FormattedString();
|
||||||
|
var lastFingerprint = fingerprintList.LastOrDefault();
|
||||||
|
|
||||||
|
foreach (var fingerprint in fingerprintList)
|
||||||
|
{
|
||||||
|
fs.Spans.Add(new Span
|
||||||
|
{
|
||||||
|
Text = fingerprint
|
||||||
|
});
|
||||||
|
|
||||||
|
if(fingerprint == lastFingerprint)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.Spans.Add(new Span
|
||||||
|
{
|
||||||
|
Text = "-",
|
||||||
|
TextColor = ThemeManager.GetResourceColor("DangerColor")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return fs;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string CreateRequestDate()
|
||||||
|
{
|
||||||
|
var minutesSinceRequest = RequestDate.ToUniversalTime().Minute - DateTime.UtcNow.Minute;
|
||||||
|
if(minutesSinceRequest < 5)
|
||||||
|
{
|
||||||
|
return AppResources.JustNow;
|
||||||
|
}
|
||||||
|
if(minutesSinceRequest < 59)
|
||||||
|
{
|
||||||
|
return $"{minutesSinceRequest} {AppResources.MinutesAgo}";
|
||||||
|
}
|
||||||
|
|
||||||
|
return RequestDate.ToShortTimeString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateScreen()
|
||||||
|
{
|
||||||
|
TriggerPropertyChanged(nameof(LogInAttempByLabel));
|
||||||
|
TriggerPropertyChanged(nameof(FingerprintPhraseFormatted));
|
||||||
|
TriggerPropertyChanged(nameof(DeviceType));
|
||||||
|
TriggerPropertyChanged(nameof(IpAddress));
|
||||||
|
TriggerPropertyChanged(nameof(NearLocation));
|
||||||
|
TriggerPropertyChanged(nameof(TimeOfRequest));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9321
src/App/Resources/AppResources.Designer.cs
generated
9321
src/App/Resources/AppResources.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@@ -2269,4 +2269,40 @@
|
|||||||
<data name="AreYouSureYouWantToEnableScreenCapture" xml:space="preserve">
|
<data name="AreYouSureYouWantToEnableScreenCapture" xml:space="preserve">
|
||||||
<value>Are you sure you want to enable Screen Capture?</value>
|
<value>Are you sure you want to enable Screen Capture?</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="LogInRequested" xml:space="preserve">
|
||||||
|
<value>Log in requested</value>
|
||||||
|
</data>
|
||||||
|
<data name="AreYouTryingToLogIn" xml:space="preserve">
|
||||||
|
<value>Are you trying to log in?</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogInAttemptByOn" xml:space="preserve">
|
||||||
|
<value>Log in attempt by {0} on {1}</value>
|
||||||
|
</data>
|
||||||
|
<data name="FingerprintPhrase" xml:space="preserve">
|
||||||
|
<value>Fingerprint phrase</value>
|
||||||
|
</data>
|
||||||
|
<data name="DeviceType" xml:space="preserve">
|
||||||
|
<value>Device Type</value>
|
||||||
|
</data>
|
||||||
|
<data name="IpAddress" xml:space="preserve">
|
||||||
|
<value>IP Address</value>
|
||||||
|
</data>
|
||||||
|
<data name="Time" xml:space="preserve">
|
||||||
|
<value>Time</value>
|
||||||
|
</data>
|
||||||
|
<data name="Near" xml:space="preserve">
|
||||||
|
<value>Near</value>
|
||||||
|
</data>
|
||||||
|
<data name="ConfirmLogIn" xml:space="preserve">
|
||||||
|
<value>Confirm Log In</value>
|
||||||
|
</data>
|
||||||
|
<data name="DenyLogIn" xml:space="preserve">
|
||||||
|
<value>Deny Log In</value>
|
||||||
|
</data>
|
||||||
|
<data name="JustNow" xml:space="preserve">
|
||||||
|
<value>Just Now</value>
|
||||||
|
</data>
|
||||||
|
<data name="MinutesAgo" xml:space="preserve">
|
||||||
|
<value>minutes ago</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Reference in New Issue
Block a user