2016-07-01 05:04:45 +03:00
using System ;
using System.Threading.Tasks ;
using Acr.UserDialogs ;
using Bit.App.Abstractions ;
using Bit.App.Controls ;
using Bit.App.Resources ;
using Xamarin.Forms ;
using XLabs.Ioc ;
namespace Bit.App.Pages
{
public class ToolsPage : ExtendedContentPage
{
private readonly IUserDialogs _userDialogs ;
2016-08-05 07:20:45 +03:00
private readonly IGoogleAnalyticsService _googleAnalyticsService ;
2016-07-01 05:04:45 +03:00
public ToolsPage ( )
{
_userDialogs = Resolver . Resolve < IUserDialogs > ( ) ;
2016-08-05 07:20:45 +03:00
_googleAnalyticsService = Resolver . Resolve < IGoogleAnalyticsService > ( ) ;
2016-07-01 05:04:45 +03:00
Init ( ) ;
}
public void Init ( )
{
2016-07-01 07:03:54 +03:00
var generatorCell = new ToolsViewCell ( "Password Generator" , "Automatically generate strong, unique passwords for your logins." , "refresh" ) ;
2016-07-02 09:01:47 +03:00
generatorCell . Tapped + = GeneratorCell_Tapped ;
2016-07-01 07:03:54 +03:00
var webCell = new ToolsViewCell ( "bitwarden Web Vault" , "Manage your logins from any web browser with the bitwarden web vault." , "globe" ) ;
webCell . Tapped + = WebCell_Tapped ;
var importCell = new ToolsViewCell ( "Import Logins" , "Quickly bulk import your logins from other password management apps." , "cloudup" ) ;
importCell . Tapped + = ImportCell_Tapped ;
2016-08-14 05:07:44 +03:00
var section = new TableSection { generatorCell } ;
if ( Device . OS = = TargetPlatform . iOS )
{
var extensionCell = new ToolsViewCell ( "bitwarden App Extension" , "Use bitwarden in Safari and other apps to auto-fill your logins." , "upload" ) ;
extensionCell . Tapped + = ( object sender , EventArgs e ) = >
{
Navigation . PushModalAsync ( new ExtendedNavigationPage ( new ToolsExtensionPage ( ) ) ) ;
} ;
section . Add ( extensionCell ) ;
}
section . Add ( webCell ) ;
section . Add ( importCell ) ;
2016-07-01 07:03:54 +03:00
var table = new ExtendedTableView
{
EnableScrolling = true ,
2016-07-06 02:07:56 +03:00
Intent = TableIntent . Settings ,
2016-07-01 07:03:54 +03:00
HasUnevenRows = true ,
Root = new TableRoot
{
2016-08-14 05:07:44 +03:00
section
2016-07-01 07:03:54 +03:00
}
} ;
if ( Device . OS = = TargetPlatform . iOS )
{
table . RowHeight = - 1 ;
table . EstimatedRowHeight = 100 ;
}
2016-07-01 05:04:45 +03:00
Title = AppResources . Tools ;
2016-07-01 07:03:54 +03:00
Content = table ;
}
2016-07-02 09:01:47 +03:00
private void GeneratorCell_Tapped ( object sender , EventArgs e )
{
Navigation . PushModalAsync ( new ExtendedNavigationPage ( new ToolsPasswordGeneratorPage ( ) ) ) ;
}
2016-07-01 07:03:54 +03:00
private void WebCell_Tapped ( object sender , EventArgs e )
{
2016-08-05 07:20:45 +03:00
_googleAnalyticsService . TrackAppEvent ( "OpenedTool" , "Web" ) ;
2016-07-01 07:03:54 +03:00
Device . OpenUri ( new Uri ( "https://vault.bitwarden.com" ) ) ;
}
private async void ImportCell_Tapped ( object sender , EventArgs e )
{
if ( ! await _userDialogs . ConfirmAsync ( "You can bulk import logins from the bitwarden.com web vault. Do you want to visit the website now?" , null , AppResources . Yes , AppResources . Cancel ) )
{
return ;
}
2016-08-05 07:20:45 +03:00
_googleAnalyticsService . TrackAppEvent ( "OpenedTool" , "Import" ) ;
2016-07-01 07:03:54 +03:00
Device . OpenUri ( new Uri ( "https://vault.bitwarden.com" ) ) ;
}
public class ToolsViewCell : ExtendedViewCell
{
public ToolsViewCell ( string labelText , string detailText , string imageSource )
{
var label = new Label
{
LineBreakMode = LineBreakMode . TailTruncation ,
Text = labelText
} ;
var detail = new Label
{
FontSize = Device . GetNamedSize ( NamedSize . Small , typeof ( Label ) ) ,
LineBreakMode = LineBreakMode . WordWrap ,
Style = ( Style ) Application . Current . Resources [ "text-muted" ] ,
Text = detailText
} ;
2016-08-14 05:07:44 +03:00
if ( Device . OS = = TargetPlatform . Android )
{
label . TextColor = Color . Black ;
}
2016-07-01 07:03:54 +03:00
var labelDetailStackLayout = new StackLayout
{
HorizontalOptions = LayoutOptions . StartAndExpand ,
VerticalOptions = LayoutOptions . FillAndExpand ,
Children = { label , detail } ,
Spacing = 0
} ;
var image = new Image
{
HorizontalOptions = LayoutOptions . Start ,
VerticalOptions = LayoutOptions . FillAndExpand ,
Source = imageSource ,
Margin = new Thickness ( 0 , 0 , 10 , 0 )
} ;
var containerStackLayout = new StackLayout
{
Orientation = StackOrientation . Horizontal ,
Children = { image , labelDetailStackLayout } ,
2016-08-14 05:07:44 +03:00
Padding = Device . OnPlatform (
iOS : new Thickness ( 15 , 25 ) ,
Android : new Thickness ( 15 , 20 ) ,
WinPhone : new Thickness ( 15 , 25 ) )
2016-07-01 07:03:54 +03:00
} ;
ShowDisclousure = true ;
View = containerStackLayout ;
}
2016-07-01 05:04:45 +03:00
}
}
}