2016-08-24 06:15:28 +03:00
|
|
|
|
using Bit.App.Abstractions;
|
|
|
|
|
using System;
|
2016-05-24 04:56:38 +03:00
|
|
|
|
using Xamarin.Forms;
|
2016-08-24 06:15:28 +03:00
|
|
|
|
using XLabs.Ioc;
|
2016-05-13 07:11:32 +03:00
|
|
|
|
|
|
|
|
|
namespace Bit.App.Controls
|
|
|
|
|
{
|
2016-05-18 04:28:19 +03:00
|
|
|
|
public class FormEntryCell : ExtendedViewCell
|
2016-05-13 07:11:32 +03:00
|
|
|
|
{
|
2016-06-28 05:17:49 +03:00
|
|
|
|
public FormEntryCell(
|
|
|
|
|
string labelText,
|
|
|
|
|
Keyboard entryKeyboard = null,
|
|
|
|
|
bool IsPassword = false,
|
|
|
|
|
VisualElement nextElement = null,
|
|
|
|
|
bool useLabelAsPlaceholder = false,
|
2016-07-03 07:27:10 +03:00
|
|
|
|
string imageSource = null,
|
2016-11-08 06:07:33 +03:00
|
|
|
|
Thickness? containerPadding = null,
|
|
|
|
|
bool useButton = false)
|
2016-05-13 07:11:32 +03:00
|
|
|
|
{
|
2016-06-28 03:56:59 +03:00
|
|
|
|
if(!useLabelAsPlaceholder)
|
2016-05-13 07:11:32 +03:00
|
|
|
|
{
|
2016-06-28 03:56:59 +03:00
|
|
|
|
Label = new Label
|
|
|
|
|
{
|
|
|
|
|
Text = labelText,
|
|
|
|
|
FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label)),
|
2016-06-28 05:17:49 +03:00
|
|
|
|
Style = (Style)Application.Current.Resources["text-muted"],
|
|
|
|
|
HorizontalOptions = LayoutOptions.FillAndExpand
|
2016-06-28 03:56:59 +03:00
|
|
|
|
};
|
|
|
|
|
}
|
2016-05-13 07:11:32 +03:00
|
|
|
|
|
|
|
|
|
Entry = new ExtendedEntry
|
|
|
|
|
{
|
|
|
|
|
Keyboard = entryKeyboard,
|
2016-05-17 06:54:24 +03:00
|
|
|
|
HasBorder = false,
|
2016-06-28 05:17:49 +03:00
|
|
|
|
IsPassword = IsPassword,
|
|
|
|
|
AllowClear = true,
|
2016-08-23 01:59:15 +03:00
|
|
|
|
HorizontalOptions = LayoutOptions.FillAndExpand,
|
|
|
|
|
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Entry))
|
2016-05-13 07:11:32 +03:00
|
|
|
|
};
|
|
|
|
|
|
2016-06-28 03:56:59 +03:00
|
|
|
|
if(useLabelAsPlaceholder)
|
|
|
|
|
{
|
|
|
|
|
Entry.Placeholder = labelText;
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-24 04:56:38 +03:00
|
|
|
|
if(nextElement != null)
|
|
|
|
|
{
|
|
|
|
|
Entry.ReturnType = Enums.ReturnType.Next;
|
|
|
|
|
Entry.Completed += (object sender, EventArgs e) => { nextElement.Focus(); };
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-28 05:17:49 +03:00
|
|
|
|
var imageStackLayout = new StackLayout
|
2016-05-13 07:11:32 +03:00
|
|
|
|
{
|
2016-07-03 07:27:10 +03:00
|
|
|
|
Padding = containerPadding ?? new Thickness(15, 10),
|
2016-06-28 05:17:49 +03:00
|
|
|
|
Orientation = StackOrientation.Horizontal,
|
|
|
|
|
Spacing = 10,
|
|
|
|
|
HorizontalOptions = LayoutOptions.FillAndExpand,
|
|
|
|
|
VerticalOptions = LayoutOptions.FillAndExpand
|
2016-05-13 07:11:32 +03:00
|
|
|
|
};
|
|
|
|
|
|
2016-06-28 05:17:49 +03:00
|
|
|
|
if(imageSource != null)
|
|
|
|
|
{
|
|
|
|
|
var tgr = new TapGestureRecognizer();
|
|
|
|
|
tgr.Tapped += Tgr_Tapped;
|
|
|
|
|
|
|
|
|
|
var theImage = new Image
|
|
|
|
|
{
|
|
|
|
|
Source = imageSource,
|
|
|
|
|
HorizontalOptions = LayoutOptions.Start,
|
|
|
|
|
VerticalOptions = LayoutOptions.Center
|
|
|
|
|
};
|
|
|
|
|
theImage.GestureRecognizers.Add(tgr);
|
|
|
|
|
|
|
|
|
|
imageStackLayout.Children.Add(theImage);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var formStackLayout = new StackLayout
|
|
|
|
|
{
|
|
|
|
|
HorizontalOptions = LayoutOptions.FillAndExpand,
|
2016-08-14 07:54:07 +03:00
|
|
|
|
VerticalOptions = LayoutOptions.CenterAndExpand
|
2016-06-28 05:17:49 +03:00
|
|
|
|
};
|
2016-08-14 07:54:07 +03:00
|
|
|
|
|
|
|
|
|
if(Device.OS == TargetPlatform.Android)
|
|
|
|
|
{
|
2016-08-24 06:15:28 +03:00
|
|
|
|
var deviceInfo = Resolver.Resolve<IDeviceInfoService>();
|
|
|
|
|
if(useLabelAsPlaceholder)
|
2016-08-17 07:39:42 +03:00
|
|
|
|
{
|
2016-08-24 06:57:11 +03:00
|
|
|
|
if(deviceInfo.Version < 21)
|
|
|
|
|
{
|
2016-08-26 04:43:47 +03:00
|
|
|
|
Entry.Margin = new Thickness(-9, 1, -9, 0);
|
2016-08-24 06:57:11 +03:00
|
|
|
|
}
|
|
|
|
|
else if(deviceInfo.Version == 21)
|
2016-08-24 06:15:28 +03:00
|
|
|
|
{
|
|
|
|
|
Entry.Margin = new Thickness(0, 4, 0, -4);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2016-08-24 06:57:11 +03:00
|
|
|
|
Entry.AdjustMarginsForDevice();
|
2016-08-17 07:39:42 +03:00
|
|
|
|
}
|
2016-08-26 04:43:47 +03:00
|
|
|
|
|
|
|
|
|
if(containerPadding == null)
|
|
|
|
|
{
|
|
|
|
|
imageStackLayout.AdjustPaddingForDevice();
|
|
|
|
|
}
|
2016-08-14 07:54:07 +03:00
|
|
|
|
}
|
|
|
|
|
|
2016-06-28 03:56:59 +03:00
|
|
|
|
if(!useLabelAsPlaceholder)
|
|
|
|
|
{
|
2016-06-28 05:17:49 +03:00
|
|
|
|
formStackLayout.Children.Add(Label);
|
2016-06-28 03:56:59 +03:00
|
|
|
|
}
|
|
|
|
|
|
2016-06-28 05:17:49 +03:00
|
|
|
|
formStackLayout.Children.Add(Entry);
|
|
|
|
|
imageStackLayout.Children.Add(formStackLayout);
|
2016-05-13 07:11:32 +03:00
|
|
|
|
|
2016-11-08 06:07:33 +03:00
|
|
|
|
if(useButton)
|
|
|
|
|
{
|
|
|
|
|
Button = new ExtendedButton();
|
|
|
|
|
imageStackLayout.Children.Add(Button);
|
2016-11-08 07:45:46 +03:00
|
|
|
|
|
|
|
|
|
if(Device.OS == TargetPlatform.Android)
|
|
|
|
|
{
|
|
|
|
|
Button.Padding = new Thickness(0);
|
|
|
|
|
Button.BackgroundColor = Color.Transparent;
|
|
|
|
|
}
|
2016-11-08 06:07:33 +03:00
|
|
|
|
}
|
|
|
|
|
|
2016-07-05 05:35:49 +03:00
|
|
|
|
Tapped += FormEntryCell_Tapped;
|
|
|
|
|
|
2016-06-28 05:17:49 +03:00
|
|
|
|
View = imageStackLayout;
|
2016-05-13 07:11:32 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Label Label { get; private set; }
|
|
|
|
|
public ExtendedEntry Entry { get; private set; }
|
2016-11-08 06:07:33 +03:00
|
|
|
|
public ExtendedButton Button { get; private set; }
|
2016-06-28 05:17:49 +03:00
|
|
|
|
|
|
|
|
|
private void Tgr_Tapped(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Entry.Focus();
|
|
|
|
|
}
|
2016-07-05 05:35:49 +03:00
|
|
|
|
|
|
|
|
|
private void FormEntryCell_Tapped(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Entry.Focus();
|
|
|
|
|
}
|
2016-05-13 07:11:32 +03:00
|
|
|
|
}
|
|
|
|
|
}
|