Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5daeb0ee95 | ||
|
|
1bcfd57193 | ||
|
|
dbd697a473 | ||
|
|
24722d3644 | ||
|
|
a7f6205030 | ||
|
|
2ce4f31a41 | ||
|
|
22ac095dce | ||
|
|
0cba25fc0c | ||
|
|
ee883571da |
@@ -87,7 +87,7 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="FormsViewGroup, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\MonoAndroid10\FormsViewGroup.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\MonoAndroid10\FormsViewGroup.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="HockeySDK, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
@@ -235,19 +235,19 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\MonoAndroid10\Xamarin.Forms.Core.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\MonoAndroid10\Xamarin.Forms.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\MonoAndroid10\Xamarin.Forms.Platform.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\MonoAndroid10\Xamarin.Forms.Platform.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Platform.Android, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.GooglePlayServices.Analytics, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
@@ -725,10 +725,10 @@
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.GooglePlayServices.Basement.29.0.0.2\build\Xamarin.GooglePlayServices.Basement.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.GooglePlayServices.Basement.29.0.0.2\build\Xamarin.GooglePlayServices.Basement.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\..\packages\Xamarin.GooglePlayServices.Basement.29.0.0.2\build\Xamarin.GooglePlayServices.Basement.targets" Condition="Exists('..\..\packages\Xamarin.GooglePlayServices.Basement.29.0.0.2\build\Xamarin.GooglePlayServices.Basement.targets')" />
|
||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="0.0.3" android:installLocation="auto" android:versionCode="3">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="0.0.6" android:installLocation="auto" android:versionCode="6">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0" targetFramework="monoandroid60" />
|
||||
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid60" />
|
||||
<package id="Xamarin.Android.Support.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
|
||||
<package id="Xamarin.Forms" version="2.3.1.114" targetFramework="monoandroid60" />
|
||||
<package id="Xamarin.Forms" version="2.3.2.127" targetFramework="monoandroid60" />
|
||||
<package id="Xamarin.GooglePlayServices.Analytics" version="29.0.0.2" targetFramework="monoandroid60" />
|
||||
<package id="Xamarin.GooglePlayServices.Base" version="29.0.0.2" targetFramework="monoandroid60" />
|
||||
<package id="Xamarin.GooglePlayServices.Basement" version="29.0.0.2" targetFramework="monoandroid60" />
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace Bit.App
|
||||
}
|
||||
else
|
||||
{
|
||||
MainPage = new HomePage();
|
||||
MainPage = new ExtendedNavigationPage(new HomePage());
|
||||
}
|
||||
|
||||
MessagingCenter.Subscribe<Application, bool>(Current, "Resumed", async (sender, args) =>
|
||||
@@ -203,7 +203,7 @@ namespace Bit.App
|
||||
_googleAnalyticsService.TrackAppEvent("LoggedOut");
|
||||
_googleAnalyticsService.RefreshUserId();
|
||||
|
||||
Current.MainPage = new HomePage();
|
||||
Current.MainPage = new ExtendedNavigationPage(new HomePage());
|
||||
if(!string.IsNullOrWhiteSpace(logoutMessage))
|
||||
{
|
||||
_userDialogs.Toast(logoutMessage);
|
||||
|
||||
@@ -293,15 +293,15 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="XLabs.Ioc, Version=2.0.5782.12218, Culture=neutral, processorArchitecture=MSIL">
|
||||
@@ -319,12 +319,12 @@
|
||||
<Compile Include="Services\PushNotificationListener.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
||||
@@ -77,6 +77,7 @@ namespace Bit.App.Pages
|
||||
};
|
||||
|
||||
Title = "bitwarden";
|
||||
NavigationPage.SetHasNavigationBar(this, false);
|
||||
Content = new ScrollView { Content = buttonStackLayout };
|
||||
}
|
||||
|
||||
@@ -88,18 +89,18 @@ namespace Bit.App.Pages
|
||||
|
||||
public async Task LoginAsync()
|
||||
{
|
||||
await Navigation.PushModalAsync(new ExtendedNavigationPage(new LoginPage()));
|
||||
await Navigation.PushForDeviceAsync(new LoginPage());
|
||||
}
|
||||
|
||||
public async Task RegisterAsync()
|
||||
{
|
||||
await Navigation.PushModalAsync(new ExtendedNavigationPage(new RegisterPage(this)));
|
||||
await Navigation.PushForDeviceAsync(new RegisterPage(this));
|
||||
}
|
||||
|
||||
public async Task DismissRegisterAndLoginAsync(string email)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PushModalAsync(new ExtendedNavigationPage(new LoginPage(email)));
|
||||
await Navigation.PopForDeviceAsync();
|
||||
await Navigation.PushForDeviceAsync(new LoginPage(email));
|
||||
_userDialogs.Toast("Your new account has been created! You may now log in.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +77,14 @@ namespace Bit.App.Pages
|
||||
Children = { table, logoutButton }
|
||||
};
|
||||
|
||||
var scrollView = new ScrollView { Content = stackLayout };
|
||||
|
||||
if(Device.OS == TargetPlatform.iOS)
|
||||
{
|
||||
table.RowHeight = -1;
|
||||
table.EstimatedRowHeight = 70;
|
||||
}
|
||||
|
||||
var loginToolbarItem = new ToolbarItem("Submit", null, async () =>
|
||||
{
|
||||
await CheckPasswordAsync();
|
||||
@@ -84,7 +92,7 @@ namespace Bit.App.Pages
|
||||
|
||||
ToolbarItems.Add(loginToolbarItem);
|
||||
Title = "Verify Master Password";
|
||||
Content = stackLayout;
|
||||
Content = scrollView;
|
||||
}
|
||||
|
||||
private void Entry_Completed(object sender, EventArgs e)
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace Bit.App.Pages
|
||||
entryKeyboard: Keyboard.Email, useLabelAsPlaceholder: true, imageSource: "envelope",
|
||||
containerPadding: padding);
|
||||
|
||||
var lastLoginEmail = _settings.GetValueOrDefault<string>(Constants.LastLoginEmail);
|
||||
var lastLoginEmail = _settings.GetValueOrDefault(Constants.LastLoginEmail, string.Empty);
|
||||
if(!string.IsNullOrWhiteSpace(_email))
|
||||
{
|
||||
EmailCell.Entry.Text = _email;
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace Bit.App.Pages
|
||||
|
||||
if(saveResult.Succeeded)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
_userDialogs.Toast("New folder created.");
|
||||
_googleAnalyticsService.TrackAppEvent("CreatedFolder");
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ namespace Bit.App.Pages
|
||||
|
||||
if(saveResult.Succeeded)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
_userDialogs.Toast("Folder updated.");
|
||||
_googleAnalyticsService.TrackAppEvent("EditedFolder");
|
||||
}
|
||||
@@ -147,7 +147,7 @@ namespace Bit.App.Pages
|
||||
|
||||
if(deleteTask.Succeeded)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
_userDialogs.Toast("Folder deleted.");
|
||||
}
|
||||
else if(deleteTask.Errors.Count() > 0)
|
||||
|
||||
@@ -55,11 +55,11 @@ namespace Bit.App.Pages
|
||||
Folders.ResetWithRange(pageFolders);
|
||||
}
|
||||
|
||||
private void FolderSelected(object sender, SelectedItemChangedEventArgs e)
|
||||
private async void FolderSelected(object sender, SelectedItemChangedEventArgs e)
|
||||
{
|
||||
var folder = e.SelectedItem as SettingsFolderPageModel;
|
||||
var page = new ExtendedNavigationPage(new SettingsEditFolderPage(folder.Id));
|
||||
Navigation.PushModalAsync(page);
|
||||
var page = new SettingsEditFolderPage(folder.Id);
|
||||
await Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
|
||||
private class AddFolderToolBarItem : ToolbarItem
|
||||
@@ -76,8 +76,8 @@ namespace Bit.App.Pages
|
||||
|
||||
private async void ClickedItem(object sender, EventArgs e)
|
||||
{
|
||||
var page = new ExtendedNavigationPage(new SettingsAddFolderPage());
|
||||
await _page.Navigation.PushModalAsync(page);
|
||||
var page = new SettingsAddFolderPage();
|
||||
await _page.Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Bit.App.Pages
|
||||
PinCell = new ExtendedSwitchCell
|
||||
{
|
||||
Text = "Unlock with PIN Code",
|
||||
On = _settings.GetValueOrDefault<bool>(Constants.SettingPinUnlockOn)
|
||||
On = _settings.GetValueOrDefault(Constants.SettingPinUnlockOn, false)
|
||||
};
|
||||
PinCell.OnChanged += PinCell_Changed;
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace Bit.App.Pages
|
||||
FingerprintCell = new ExtendedSwitchCell
|
||||
{
|
||||
Text = "Unlock with " + fingerprintName,
|
||||
On = _settings.GetValueOrDefault<bool>(Constants.SettingFingerprintUnlockOn),
|
||||
On = _settings.GetValueOrDefault(Constants.SettingFingerprintUnlockOn, false),
|
||||
IsEnabled = _fingerprint.IsAvailable
|
||||
};
|
||||
FingerprintCell.OnChanged += FingerprintCell_Changed;
|
||||
|
||||
@@ -72,7 +72,7 @@ namespace Bit.App.Pages
|
||||
|
||||
private void SetLastSync()
|
||||
{
|
||||
var lastSyncDate = _settings.GetValueOrDefault<DateTime?>(Constants.LastSync);
|
||||
var lastSyncDate = _settings.GetValueOrDefault<DateTime?>(Constants.LastSync, null);
|
||||
try
|
||||
{
|
||||
LastSyncLabel.Text = "Last Sync: " + lastSyncDate?.ToLocalTime().ToString() ?? "Never";
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace Bit.App.Pages
|
||||
"Use the bitwarden accessibility service to auto-fill your logins.", "upload");
|
||||
autofillServiceCell.Tapped += (object sender, EventArgs e) =>
|
||||
{
|
||||
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsAutofillServicePage()));
|
||||
Navigation.PushAsync(new ToolsAutofillServicePage());
|
||||
};
|
||||
section.Add(autofillServiceCell);
|
||||
}
|
||||
@@ -81,9 +81,9 @@ namespace Bit.App.Pages
|
||||
Content = table;
|
||||
}
|
||||
|
||||
private void GeneratorCell_Tapped(object sender, EventArgs e)
|
||||
private async void GeneratorCell_Tapped(object sender, EventArgs e)
|
||||
{
|
||||
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsPasswordGeneratorPage()));
|
||||
await Navigation.PushForDeviceAsync(new ToolsPasswordGeneratorPage());
|
||||
}
|
||||
|
||||
private void WebCell_Tapped(object sender, EventArgs e)
|
||||
|
||||
@@ -112,7 +112,7 @@ namespace Bit.App.Pages
|
||||
{
|
||||
_googleAnalyticsService.TrackAppEvent("SelectedGeneratedPassword");
|
||||
_passwordValueAction(Password.Text);
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
}, ToolbarItemOrder.Default, 0);
|
||||
|
||||
ToolbarItems.Add(selectToolBarItem);
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace Bit.App.Pages
|
||||
_userDialogs.HideLoading();
|
||||
if(saveTask.Succeeded)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
_userDialogs.Toast("New site created.");
|
||||
_googleAnalyticsService.TrackAppEvent("CreatedSite");
|
||||
}
|
||||
@@ -187,14 +187,14 @@ namespace Bit.App.Pages
|
||||
}
|
||||
}
|
||||
|
||||
private void GenerateCell_Tapped(object sender, EventArgs e)
|
||||
private async void GenerateCell_Tapped(object sender, EventArgs e)
|
||||
{
|
||||
var page = new ToolsPasswordGeneratorPage((password) =>
|
||||
{
|
||||
PasswordCell.Entry.Text = password;
|
||||
_userDialogs.Toast("Password generated.");
|
||||
});
|
||||
Navigation.PushModalAsync(new ExtendedNavigationPage(page));
|
||||
await Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
|
||||
private void AlertNoConnection()
|
||||
|
||||
@@ -176,7 +176,7 @@ namespace Bit.App.Pages
|
||||
|
||||
if(saveTask.Succeeded)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
_userDialogs.Toast("Site updated.");
|
||||
_googleAnalyticsService.TrackAppEvent("EditedSite");
|
||||
}
|
||||
@@ -222,7 +222,7 @@ namespace Bit.App.Pages
|
||||
PasswordCell.Entry.Text = password;
|
||||
_userDialogs.Toast("Password generated.");
|
||||
});
|
||||
await Navigation.PushModalAsync(new ExtendedNavigationPage(page));
|
||||
await Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
|
||||
private async void DeleteCell_Tapped(object sender, EventArgs e)
|
||||
@@ -244,7 +244,7 @@ namespace Bit.App.Pages
|
||||
|
||||
if(deleteTask.Succeeded)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
_userDialogs.Toast("Site deleted.");
|
||||
_googleAnalyticsService.TrackAppEvent("DeletedSite");
|
||||
}
|
||||
|
||||
@@ -224,10 +224,10 @@ namespace Bit.App.Pages
|
||||
|
||||
if(_connectivity.IsConnected && Device.OS == TargetPlatform.iOS && !_favorites)
|
||||
{
|
||||
var pushPromptShow = _settings.GetValueOrDefault<bool>(Constants.PushInitialPromptShown);
|
||||
var pushPromptShow = _settings.GetValueOrDefault(Constants.PushInitialPromptShown, false);
|
||||
Action registerAction = () =>
|
||||
{
|
||||
var lastPushRegistration = _settings.GetValueOrDefault<DateTime?>(Constants.PushLastRegistrationDate);
|
||||
var lastPushRegistration = _settings.GetValueOrDefault<DateTime?>(Constants.PushLastRegistrationDate, null);
|
||||
if(!pushPromptShow || !lastPushRegistration.HasValue
|
||||
|| (DateTime.UtcNow - lastPushRegistration) > TimeSpan.FromDays(1))
|
||||
{
|
||||
@@ -258,7 +258,7 @@ namespace Bit.App.Pages
|
||||
|
||||
private void AdjustContent()
|
||||
{
|
||||
if(PresentationFolders.Count > 0)
|
||||
if(PresentationFolders.Count > 0 || !string.IsNullOrWhiteSpace(Search.Text))
|
||||
{
|
||||
Content = ResultsStackLayout;
|
||||
}
|
||||
@@ -354,11 +354,11 @@ namespace Bit.App.Pages
|
||||
});
|
||||
}
|
||||
|
||||
private void SiteSelected(object sender, SelectedItemChangedEventArgs e)
|
||||
private async void SiteSelected(object sender, SelectedItemChangedEventArgs e)
|
||||
{
|
||||
var site = e.SelectedItem as VaultListPageModel.Site;
|
||||
var page = new ExtendedNavigationPage(new VaultViewSitePage(site.Id));
|
||||
Navigation.PushModalAsync(page);
|
||||
var page = new VaultViewSitePage(site.Id);
|
||||
await Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
|
||||
private async void MoreClickedAsync(VaultListPageModel.Site site)
|
||||
@@ -382,13 +382,13 @@ namespace Bit.App.Pages
|
||||
|
||||
if(selection == AppResources.View)
|
||||
{
|
||||
var page = new ExtendedNavigationPage(new VaultViewSitePage(site.Id));
|
||||
await Navigation.PushModalAsync(page);
|
||||
var page = new VaultViewSitePage(site.Id);
|
||||
await Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
else if(selection == AppResources.Edit)
|
||||
{
|
||||
var page = new ExtendedNavigationPage(new VaultEditSitePage(site.Id));
|
||||
await Navigation.PushModalAsync(page);
|
||||
var page = new VaultEditSitePage(site.Id);
|
||||
await Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
else if(selection == AppResources.CopyPassword)
|
||||
{
|
||||
@@ -412,8 +412,8 @@ namespace Bit.App.Pages
|
||||
|
||||
private async void AddSite()
|
||||
{
|
||||
var page = new ExtendedNavigationPage(new VaultAddSitePage());
|
||||
await Navigation.PushModalAsync(page);
|
||||
var page = new VaultAddSitePage();
|
||||
await Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
|
||||
private class AddSiteToolBarItem : ToolbarItem
|
||||
|
||||
@@ -116,7 +116,7 @@ namespace Bit.App.Pages
|
||||
var site = await _siteService.GetByIdAsync(_siteId);
|
||||
if(site == null)
|
||||
{
|
||||
await Navigation.PopModalAsync();
|
||||
await Navigation.PopForDeviceAsync();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -182,8 +182,8 @@ namespace Bit.App.Pages
|
||||
|
||||
private async void ClickedItem(object sender, EventArgs e)
|
||||
{
|
||||
var page = new ExtendedNavigationPage(new VaultEditSitePage(_siteId));
|
||||
await _page.Navigation.PushModalAsync(page);
|
||||
var page = new VaultEditSitePage(_siteId);
|
||||
await _page.Navigation.PushForDeviceAsync(page);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,12 +76,17 @@ namespace Bit.App.Services
|
||||
{
|
||||
get
|
||||
{
|
||||
if(_userId != null)
|
||||
if(!string.IsNullOrWhiteSpace(_userId))
|
||||
{
|
||||
return _userId;
|
||||
}
|
||||
|
||||
_userId = _settings.GetValueOrDefault<string>(UserIdKey);
|
||||
var userId = _settings.GetValueOrDefault(UserIdKey, string.Empty);
|
||||
if(!string.IsNullOrWhiteSpace(userId))
|
||||
{
|
||||
_userId = userId;
|
||||
}
|
||||
|
||||
return _userId;
|
||||
}
|
||||
set
|
||||
@@ -104,12 +109,17 @@ namespace Bit.App.Services
|
||||
{
|
||||
get
|
||||
{
|
||||
if(_previousUserId != null)
|
||||
if(!string.IsNullOrWhiteSpace(_previousUserId))
|
||||
{
|
||||
return _previousUserId;
|
||||
}
|
||||
|
||||
_previousUserId = _settings.GetValueOrDefault<string>(PreviousUserIdKey);
|
||||
var previousUserId = _settings.GetValueOrDefault(PreviousUserIdKey, string.Empty);
|
||||
if(!string.IsNullOrWhiteSpace(previousUserId))
|
||||
{
|
||||
_previousUserId = previousUserId;
|
||||
}
|
||||
|
||||
return _previousUserId;
|
||||
}
|
||||
private set
|
||||
@@ -128,12 +138,17 @@ namespace Bit.App.Services
|
||||
{
|
||||
get
|
||||
{
|
||||
if(_email != null)
|
||||
if(!string.IsNullOrWhiteSpace(_email))
|
||||
{
|
||||
return _email;
|
||||
}
|
||||
|
||||
_email = _settings.GetValueOrDefault<string>(EmailKey);
|
||||
var email = _settings.GetValueOrDefault(EmailKey, string.Empty);
|
||||
if(!string.IsNullOrWhiteSpace(email))
|
||||
{
|
||||
_email = email;
|
||||
}
|
||||
|
||||
return _email;
|
||||
}
|
||||
set
|
||||
@@ -155,14 +170,14 @@ namespace Bit.App.Services
|
||||
{
|
||||
get
|
||||
{
|
||||
return _cryptoService.Key != null && Token != null && UserId != null;
|
||||
return _cryptoService.Key != null && !string.IsNullOrWhiteSpace(Token) && !string.IsNullOrWhiteSpace(UserId);
|
||||
}
|
||||
}
|
||||
public bool IsAuthenticatedTwoFactor
|
||||
{
|
||||
get
|
||||
{
|
||||
return _cryptoService.Key != null && Token != null && UserId == null;
|
||||
return _cryptoService.Key != null && !string.IsNullOrWhiteSpace(Token) && string.IsNullOrWhiteSpace(UserId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@ namespace Bit.App.Services
|
||||
}
|
||||
|
||||
// What method are we using to unlock?
|
||||
var fingerprintUnlock = _settings.GetValueOrDefault<bool>(Constants.SettingFingerprintUnlockOn);
|
||||
var pinUnlock = _settings.GetValueOrDefault<bool>(Constants.SettingPinUnlockOn);
|
||||
var fingerprintUnlock = _settings.GetValueOrDefault(Constants.SettingFingerprintUnlockOn, false);
|
||||
var pinUnlock = _settings.GetValueOrDefault(Constants.SettingPinUnlockOn, false);
|
||||
if(fingerprintUnlock && _fingerprint.IsAvailable)
|
||||
{
|
||||
return LockType.Fingerprint;
|
||||
|
||||
@@ -170,7 +170,7 @@ namespace Bit.App.Services
|
||||
|
||||
public async Task<bool> IncrementalSyncAsync(TimeSpan syncThreshold)
|
||||
{
|
||||
DateTime? lastSync = _settings.GetValueOrDefault<DateTime?>(Constants.LastSync);
|
||||
DateTime? lastSync = _settings.GetValueOrDefault<DateTime?>(Constants.LastSync, null);
|
||||
if(lastSync != null && DateTime.UtcNow - lastSync.Value < syncThreshold)
|
||||
{
|
||||
return false;
|
||||
@@ -187,7 +187,7 @@ namespace Bit.App.Services
|
||||
}
|
||||
|
||||
var now = DateTime.UtcNow;
|
||||
DateTime? lastSync = _settings.GetValueOrDefault<DateTime?>(Constants.LastSync);
|
||||
DateTime? lastSync = _settings.GetValueOrDefault<DateTime?>(Constants.LastSync, null);
|
||||
if(lastSync == null)
|
||||
{
|
||||
return await FullSyncAsync().ConfigureAwait(false);
|
||||
|
||||
@@ -3,6 +3,8 @@ using Bit.App.Abstractions;
|
||||
using Bit.App.Models;
|
||||
using Xamarin.Forms;
|
||||
using XLabs.Ioc;
|
||||
using System.Threading.Tasks;
|
||||
using Bit.App.Controls;
|
||||
|
||||
namespace Bit.App
|
||||
{
|
||||
@@ -33,9 +35,9 @@ namespace Bit.App
|
||||
{
|
||||
if(Device.OS == TargetPlatform.Android)
|
||||
{
|
||||
System.Threading.Tasks.Task.Run(async () =>
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await System.Threading.Tasks.Task.Delay(delay);
|
||||
await Task.Delay(delay);
|
||||
Device.BeginInvokeOnMainThread(() => entry.Focus());
|
||||
});
|
||||
}
|
||||
@@ -45,6 +47,30 @@ namespace Bit.App
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task PushForDeviceAsync(this INavigation navigation, Page page)
|
||||
{
|
||||
if(Device.OS == TargetPlatform.iOS)
|
||||
{
|
||||
await navigation.PushModalAsync(new ExtendedNavigationPage(page), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
await navigation.PushAsync(page, true);
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task PopForDeviceAsync(this INavigation navigation)
|
||||
{
|
||||
if(Device.OS == TargetPlatform.iOS)
|
||||
{
|
||||
await navigation.PopModalAsync(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
await navigation.PopAsync(true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void AdjustMarginsForDevice(this View view)
|
||||
{
|
||||
if(Device.OS == TargetPlatform.Android)
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace Bit.App
|
||||
{
|
||||
var authService = Resolver.Resolve<IAuthService>();
|
||||
var appIdService = Resolver.Resolve<IAppIdService>();
|
||||
if(authService.IsAuthenticated)
|
||||
if(!string.IsNullOrWhiteSpace(authService.Token))
|
||||
{
|
||||
Headers.Add("Authorization", $"Bearer {authService.Token}");
|
||||
}
|
||||
|
||||
@@ -20,6 +20,6 @@
|
||||
<package id="Xam.Plugin.Connectivity" version="2.2.12" targetFramework="portable45-net45+win8+wpa81" />
|
||||
<package id="Xam.Plugin.PushNotification" version="1.2.2" targetFramework="portable45-net45+win8+wpa81" developmentDependency="true" />
|
||||
<package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="portable45-net45+win8+wpa81" />
|
||||
<package id="Xamarin.Forms" version="2.3.1.114" targetFramework="portable45-net45+win8+wpa81" />
|
||||
<package id="Xamarin.Forms" version="2.3.2.127" targetFramework="portable45-net45+win8+wpa81" />
|
||||
<package id="XLabs.IoC" version="2.0.5782" targetFramework="portable45-net45+win8+wpa81" />
|
||||
</packages>
|
||||
@@ -13,11 +13,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.0.3</string>
|
||||
<string>0.0.6</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3</string>
|
||||
<string>6</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionAttributes</key>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.8bit.bitwarden</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3</string>
|
||||
<string>6</string>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>Icon-72@2x.png</string>
|
||||
@@ -49,7 +49,7 @@
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.0.3</string>
|
||||
<string>0.0.6</string>
|
||||
<key>UIMainStoryboardFile~ipad</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
|
||||
@@ -360,19 +360,19 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Platform.iOS, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.1.114\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.2.3.2.127\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.iOS" />
|
||||
@@ -694,9 +694,9 @@
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets" Condition="Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" />
|
||||
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" />
|
||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.1.114\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||
</Project>
|
||||
@@ -23,7 +23,7 @@
|
||||
<package id="Xam.Plugin.PushNotification" version="1.2.2" targetFramework="xamarinios10" developmentDependency="true" />
|
||||
<package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Build.Download" version="0.2.2-beta2" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Forms" version="2.3.1.114" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Forms" version="2.3.2.127" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Google.iOS.Analytics" version="3.14.0.7" targetFramework="xamarinios10" />
|
||||
<package id="XLabs.IoC" version="2.0.5782" targetFramework="xamarinios10" />
|
||||
<package id="XLabs.IoC.Unity" version="2.0.5782" targetFramework="xamarinios10" />
|
||||
|
||||
|
Before Width: | Height: | Size: 255 KiB After Width: | Height: | Size: 255 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 227 KiB After Width: | Height: | Size: 227 KiB |
|
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 280 KiB |
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 242 KiB After Width: | Height: | Size: 242 KiB |
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 228 KiB |
|
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 204 KiB |
|
Before Width: | Height: | Size: 278 KiB After Width: | Height: | Size: 278 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 322 KiB |
|
Before Width: | Height: | Size: 306 KiB After Width: | Height: | Size: 306 KiB |
|
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 279 KiB |
|
Before Width: | Height: | Size: 369 KiB After Width: | Height: | Size: 369 KiB |
|
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 240 KiB |
|
Before Width: | Height: | Size: 657 KiB After Width: | Height: | Size: 657 KiB |
|
Before Width: | Height: | Size: 642 KiB After Width: | Height: | Size: 642 KiB |
|
Before Width: | Height: | Size: 581 KiB After Width: | Height: | Size: 581 KiB |
|
Before Width: | Height: | Size: 745 KiB After Width: | Height: | Size: 745 KiB |
|
Before Width: | Height: | Size: 502 KiB After Width: | Height: | Size: 502 KiB |
|
Before Width: | Height: | Size: 627 KiB After Width: | Height: | Size: 627 KiB |
|
Before Width: | Height: | Size: 497 KiB After Width: | Height: | Size: 497 KiB |
|
Before Width: | Height: | Size: 480 KiB After Width: | Height: | Size: 480 KiB |
|
Before Width: | Height: | Size: 700 KiB After Width: | Height: | Size: 700 KiB |
|
Before Width: | Height: | Size: 455 KiB After Width: | Height: | Size: 455 KiB |
|
Before Width: | Height: | Size: 910 KiB After Width: | Height: | Size: 910 KiB |
|
Before Width: | Height: | Size: 728 KiB After Width: | Height: | Size: 728 KiB |
|
Before Width: | Height: | Size: 676 KiB After Width: | Height: | Size: 676 KiB |
|
Before Width: | Height: | Size: 1022 KiB After Width: | Height: | Size: 1022 KiB |
|
Before Width: | Height: | Size: 703 KiB After Width: | Height: | Size: 703 KiB |
@@ -1,3 +1,7 @@
|
||||
# Feature Graphic
|
||||
|
||||
A secure and free password manager for all of your devices
|
||||
|
||||
# Screenshot 1
|
||||
|
||||
Manage all your logins and passwords from a secure vault
|
||||
BIN
store/google/en-US/assets/feature-graphic.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
store/google/en-US/assets/hi-res-icon.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 571 KiB After Width: | Height: | Size: 571 KiB |
|
Before Width: | Height: | Size: 492 KiB After Width: | Height: | Size: 492 KiB |
|
Before Width: | Height: | Size: 405 KiB After Width: | Height: | Size: 405 KiB |
|
Before Width: | Height: | Size: 507 KiB After Width: | Height: | Size: 507 KiB |
|
Before Width: | Height: | Size: 626 KiB After Width: | Height: | Size: 626 KiB |
|
Before Width: | Height: | Size: 397 KiB After Width: | Height: | Size: 397 KiB |
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 315 KiB |
|
Before Width: | Height: | Size: 283 KiB After Width: | Height: | Size: 283 KiB |
|
Before Width: | Height: | Size: 323 KiB After Width: | Height: | Size: 323 KiB |
|
Before Width: | Height: | Size: 466 KiB After Width: | Height: | Size: 466 KiB |