diff --git a/Billing.Shared/Billing.Shared.projitems b/Billing.Shared/Billing.Shared.projitems
index e9c4261..cab1ba6 100644
--- a/Billing.Shared/Billing.Shared.projitems
+++ b/Billing.Shared/Billing.Shared.projitems
@@ -52,6 +52,7 @@
SettingPage.xaml
+
diff --git a/Billing.Shared/Themes/BaseTheme.cs b/Billing.Shared/Themes/BaseTheme.cs
index fec3db4..c82218b 100644
--- a/Billing.Shared/Themes/BaseTheme.cs
+++ b/Billing.Shared/Themes/BaseTheme.cs
@@ -55,6 +55,14 @@ namespace Billing.Themes
new Setter { Property = Entry.FontFamilyProperty, Value = robotoRegularFontFamily }
}
});
+ Add(new Style(typeof(OptionEditor))
+ {
+ Setters =
+ {
+ new Setter { Property = Editor.FontSizeProperty, Value = Device.GetNamedSize(NamedSize.Small, typeof(Entry)) },
+ new Setter { Property = Editor.FontFamilyProperty, Value = robotoRegularFontFamily }
+ }
+ });
Add(new Style(typeof(Button))
{
Setters =
diff --git a/Billing.Shared/UI/BillingDate.xaml b/Billing.Shared/UI/BillingDate.xaml
index 385ceeb..9ab73a0 100644
--- a/Billing.Shared/UI/BillingDate.xaml
+++ b/Billing.Shared/UI/BillingDate.xaml
@@ -17,7 +17,7 @@
-
+
@@ -32,7 +32,7 @@
-
+
diff --git a/Billing.Shared/UI/Converters.cs b/Billing.Shared/UI/Converters.cs
index e5dfbdb..766533c 100644
--- a/Billing.Shared/UI/Converters.cs
+++ b/Billing.Shared/UI/Converters.cs
@@ -38,4 +38,17 @@ namespace Billing.UI
return value;
}
}
+
+ public class NotNullConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return value != null;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return value;
+ }
+ }
}
\ No newline at end of file
diff --git a/Billing.Shared/UI/CustomControl.cs b/Billing.Shared/UI/CustomControl.cs
index e92985a..3e72352 100644
--- a/Billing.Shared/UI/CustomControl.cs
+++ b/Billing.Shared/UI/CustomControl.cs
@@ -1,5 +1,4 @@
-using Billing.Themes;
-using System;
+using System;
using Xamarin.Forms;
namespace Billing.UI
@@ -30,126 +29,4 @@ namespace Billing.UI
LongPressed?.Invoke(this, EventArgs.Empty);
}
}
-
- public class OptionEntry : Entry { }
-
- public abstract class OptionCell : ViewCell
- {
- public static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(OptionCell));
- public static readonly BindableProperty BackgroundColorProperty = BindableProperty.Create(nameof(BackgroundColor), typeof(Color), typeof(OptionCell));
-
- public string Title
- {
- get => (string)GetValue(TitleProperty);
- set => SetValue(TitleProperty, value);
- }
- public Color BackgroundColor
- {
- get => (Color)GetValue(BackgroundColorProperty);
- set => SetValue(BackgroundColorProperty, value);
- }
-
- protected abstract View Content { get; }
-
- public OptionCell()
- {
- View = new Grid
- {
- BindingContext = this,
- Padding = new Thickness(20, 0),
- ColumnDefinitions =
- {
- new ColumnDefinition { Width = new GridLength(.3, GridUnitType.Star) },
- new ColumnDefinition { Width = new GridLength(.7, GridUnitType.Star) }
- },
- Children =
- {
- new Label
- {
- LineBreakMode = LineBreakMode.TailTruncation,
- VerticalOptions = LayoutOptions.Center
- }
- .Binding(Label.TextProperty, nameof(Title))
- .DynamicResource(Label.TextColorProperty, BaseTheme.TextColor),
-
- Content.GridColumn(1)
- }
- }
- .DynamicResource(VisualElement.BackgroundColorProperty, BaseTheme.OptionTintColor);
- }
- }
-
- public class OptionTextCell : OptionCell
- {
- public static readonly BindableProperty DetailProperty = BindableProperty.Create(nameof(Detail), typeof(string), typeof(OptionTextCell));
-
- public string Detail
- {
- get => (string)GetValue(DetailProperty);
- set => SetValue(DetailProperty, value);
- }
-
- protected override View Content => new Label
- {
- HorizontalOptions = LayoutOptions.End,
- VerticalOptions = LayoutOptions.Center
- }
- .Binding(Label.TextProperty, nameof(Detail))
- .DynamicResource(Label.TextColorProperty, BaseTheme.SecondaryTextColor);
- }
-
- public class OptionSwitchCell : OptionCell
- {
- public static readonly BindableProperty IsToggledProperty = BindableProperty.Create(nameof(IsToggled), typeof(bool), typeof(OptionSwitchCell));
-
- public bool IsToggled
- {
- get => (bool)GetValue(IsToggledProperty);
- set => SetValue(IsToggledProperty, value);
- }
-
- protected override View Content => new Switch
- {
- HorizontalOptions = LayoutOptions.End,
- VerticalOptions = LayoutOptions.Center
- }
- .Binding(Switch.IsToggledProperty, nameof(IsToggled), BindingMode.TwoWay);
- }
-
- public class OptionEntryCell : OptionCell
- {
- public static readonly BindableProperty TextProperty = BindableProperty.Create(nameof(Text), typeof(string), typeof(OptionEntryCell));
- public static readonly BindableProperty KeyboardProperty = BindableProperty.Create(nameof(Keyboard), typeof(Keyboard), typeof(OptionEntryCell));
- public static readonly BindableProperty PlaceholderProperty = BindableProperty.Create(nameof(Placeholder), typeof(string), typeof(OptionEntryCell));
-
- public string Text
- {
- get => (string)GetValue(TextProperty);
- set => SetValue(TextProperty, value);
- }
- public Keyboard Keyboard
- {
- get => (Keyboard)GetValue(KeyboardProperty);
- set => SetValue(KeyboardProperty, value);
- }
- public string Placeholder
- {
- get => (string)GetValue(PlaceholderProperty);
- set => SetValue(PlaceholderProperty, value);
- }
-
- protected override View Content => new OptionEntry
- {
- HorizontalOptions = LayoutOptions.Fill,
- HorizontalTextAlignment = TextAlignment.End,
- VerticalOptions = LayoutOptions.Center,
- ReturnType = ReturnType.Next
- }
- .Binding(Entry.TextProperty, nameof(Text), BindingMode.TwoWay)
- .Binding(InputView.KeyboardProperty, nameof(Keyboard))
- .Binding(Entry.PlaceholderProperty, nameof(Placeholder))
- .DynamicResource(Entry.TextColorProperty, BaseTheme.TextColor)
- .DynamicResource(Entry.PlaceholderColorProperty, BaseTheme.SecondaryTextColor)
- .DynamicResource(VisualElement.BackgroundColorProperty, BaseTheme.OptionTintColor);
- }
}
\ No newline at end of file
diff --git a/Billing.Shared/UI/Definition.cs b/Billing.Shared/UI/Definition.cs
index 9fc42e5..b4556fb 100644
--- a/Billing.Shared/UI/Definition.cs
+++ b/Billing.Shared/UI/Definition.cs
@@ -13,10 +13,10 @@ namespace Billing.UI
public static class ExtensionHelper
{
- public static View Binding(this View view, BindableProperty property, string path, BindingMode mode = BindingMode.Default, IValueConverter converter = null)
+ public static T Binding(this T obj, BindableProperty property, string path, BindingMode mode = BindingMode.Default, IValueConverter converter = null) where T : BindableObject
{
- view.SetBinding(property, path, mode, converter);
- return view;
+ obj.SetBinding(property, path, mode, converter);
+ return obj;
}
public static View DynamicResource(this View view, BindableProperty property, string key)
@@ -36,6 +36,24 @@ namespace Billing.UI
Grid.SetRow(view, row);
return view;
}
+
+ public static View GridColumnSpan(this View view, int columnSpan)
+ {
+ Grid.SetColumnSpan(view, columnSpan);
+ return view;
+ }
+
+ public static View GridRowSpan(this View view, int rowSpan)
+ {
+ Grid.SetRowSpan(view, rowSpan);
+ return view;
+ }
+
+ public static View Margin(this View view, Thickness margin)
+ {
+ view.Margin = margin;
+ return view;
+ }
}
public class Tap : IDisposable
diff --git a/Billing.Shared/UI/OptionsCells.cs b/Billing.Shared/UI/OptionsCells.cs
new file mode 100644
index 0000000..a3e9efd
--- /dev/null
+++ b/Billing.Shared/UI/OptionsCells.cs
@@ -0,0 +1,286 @@
+using Billing.Themes;
+using Xamarin.Forms;
+
+namespace Billing.UI
+{
+
+ public class OptionEntry : Entry { }
+ public class OptionEditor : Editor { }
+
+ public abstract class OptionCell : ViewCell
+ {
+ public static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(OptionCell));
+ public static readonly BindableProperty BackgroundColorProperty = BindableProperty.Create(nameof(BackgroundColor), typeof(Color), typeof(OptionCell));
+ public static readonly BindableProperty IconProperty = BindableProperty.Create(nameof(Icon), typeof(ImageSource), typeof(OptionCell));
+
+ public string Title
+ {
+ get => (string)GetValue(TitleProperty);
+ set => SetValue(TitleProperty, value);
+ }
+ public Color BackgroundColor
+ {
+ get => (Color)GetValue(BackgroundColorProperty);
+ set => SetValue(BackgroundColorProperty, value);
+ }
+ [TypeConverter(typeof(ImageSourceConverter))]
+ public ImageSource Icon
+ {
+ get => (ImageSource)GetValue(IconProperty);
+ set => SetValue(IconProperty, value);
+ }
+
+ protected abstract View Content { get; }
+
+ public OptionCell()
+ {
+ View = new Grid
+ {
+ BindingContext = this,
+ Padding = new Thickness(20, 0),
+ ColumnDefinitions =
+ {
+ new ColumnDefinition { Width = GridLength.Auto },
+ new ColumnDefinition { Width = new GridLength(.3, GridUnitType.Star) },
+ new ColumnDefinition { Width = new GridLength(.7, GridUnitType.Star) }
+ },
+ Children =
+ {
+ new Image
+ {
+ WidthRequest = 20,
+ HeightRequest = 20,
+ Aspect = Aspect.AspectFit,
+ VerticalOptions = LayoutOptions.Center,
+ Margin = new Thickness(6, 0)
+ }
+ .Binding(VisualElement.IsVisibleProperty, nameof(Icon), converter: new NotNullConverter())
+ .Binding(Image.SourceProperty, nameof(Icon)),
+
+ new Label
+ {
+ LineBreakMode = LineBreakMode.TailTruncation,
+ VerticalOptions = LayoutOptions.Center
+ }
+ .GridColumn(1)
+ .Binding(Label.TextProperty, nameof(Title))
+ .DynamicResource(Label.TextColorProperty, BaseTheme.TextColor),
+
+ Content.GridColumn(2)
+ }
+ }
+ .DynamicResource(VisualElement.BackgroundColorProperty, BaseTheme.OptionTintColor);
+ }
+ }
+
+ public abstract class OptionVerticalCell : OptionCell
+ {
+ public OptionVerticalCell()
+ {
+ View = new Grid
+ {
+ BindingContext = this,
+ Padding = new Thickness(20, 0),
+ ColumnDefinitions =
+ {
+ new ColumnDefinition { Width = GridLength.Auto },
+ new ColumnDefinition { Width = GridLength.Star }
+ },
+ RowDefinitions =
+ {
+ new RowDefinition { Height = new GridLength(40) },
+ new RowDefinition { Height = GridLength.Star }
+ },
+ Children =
+ {
+ new Image
+ {
+ WidthRequest = 20,
+ HeightRequest = 20,
+ Aspect = Aspect.AspectFit,
+ VerticalOptions = LayoutOptions.Center,
+ Margin = new Thickness(6, 0)
+ }
+ .Binding(VisualElement.IsVisibleProperty, nameof(Icon), converter: new NotNullConverter())
+ .Binding(Image.SourceProperty, nameof(Icon)),
+
+ new Label
+ {
+ LineBreakMode = LineBreakMode.TailTruncation,
+ VerticalOptions = LayoutOptions.Center
+ }
+ .GridColumn(1)
+ .Binding(Label.TextProperty, nameof(Title))
+ .DynamicResource(Label.TextColorProperty, BaseTheme.TextColor),
+
+ Content.GridRow(1).GridColumnSpan(2)
+ }
+ }
+ .DynamicResource(VisualElement.BackgroundColorProperty, BaseTheme.OptionTintColor);
+ }
+ }
+
+ public class OptionTextCell : OptionCell
+ {
+ public static readonly BindableProperty DetailProperty = BindableProperty.Create(nameof(Detail), typeof(string), typeof(OptionTextCell));
+
+ public string Detail
+ {
+ get => (string)GetValue(DetailProperty);
+ set => SetValue(DetailProperty, value);
+ }
+
+ protected override View Content => new Label
+ {
+ HorizontalOptions = LayoutOptions.End,
+ VerticalOptions = LayoutOptions.Center
+ }
+ .Binding(Label.TextProperty, nameof(Detail))
+ .DynamicResource(Label.TextColorProperty, BaseTheme.SecondaryTextColor);
+ }
+
+ public class OptionSelectCell : OptionTextCell
+ {
+ public static readonly BindableProperty CommandProperty = BindableProperty.Create(nameof(Command), typeof(Command), typeof(OptionSelectCell));
+ public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create(nameof(CommandParameter), typeof(object), typeof(OptionSelectCell));
+
+ public Command Command
+ {
+ get => (Command)GetValue(CommandProperty);
+ set => SetValue(CommandProperty, value);
+ }
+ public object CommandParameter
+ {
+ get => GetValue(CommandParameterProperty);
+ set => SetValue(CommandParameterProperty, value);
+ }
+
+ protected override View Content => new StackLayout
+ {
+ Orientation = StackOrientation.Horizontal,
+ HorizontalOptions = LayoutOptions.End,
+ Children =
+ {
+ new Label
+ {
+ HorizontalOptions = LayoutOptions.End,
+ VerticalOptions = LayoutOptions.Center
+ }
+ .Binding(Label.TextProperty, nameof(Detail))
+ .DynamicResource(Label.TextColorProperty, BaseTheme.SecondaryTextColor),
+
+ new TintImage
+ {
+ HeightRequest = 20,
+ VerticalOptions = LayoutOptions.Center,
+ Margin = new Thickness(6, 0),
+ Source = "right.png"
+ }
+ },
+ GestureRecognizers =
+ {
+ new TapGestureRecognizer()
+ .Binding(TapGestureRecognizer.CommandProperty, nameof(Command))
+ .Binding(TapGestureRecognizer.CommandParameterProperty, nameof(CommandParameter))
+ }
+ };
+ }
+
+ public class OptionSwitchCell : OptionCell
+ {
+ public static readonly BindableProperty IsToggledProperty = BindableProperty.Create(nameof(IsToggled), typeof(bool), typeof(OptionSwitchCell));
+
+ public bool IsToggled
+ {
+ get => (bool)GetValue(IsToggledProperty);
+ set => SetValue(IsToggledProperty, value);
+ }
+
+ protected override View Content => new Switch
+ {
+ HorizontalOptions = LayoutOptions.End,
+ VerticalOptions = LayoutOptions.Center
+ }
+ .Binding(Switch.IsToggledProperty, nameof(IsToggled), BindingMode.TwoWay);
+ }
+
+ public class OptionEntryCell : OptionCell
+ {
+ public static readonly BindableProperty TextProperty = BindableProperty.Create(nameof(Text), typeof(string), typeof(OptionEntryCell));
+ public static readonly BindableProperty KeyboardProperty = BindableProperty.Create(nameof(Keyboard), typeof(Keyboard), typeof(OptionEntryCell));
+ public static readonly BindableProperty PlaceholderProperty = BindableProperty.Create(nameof(Placeholder), typeof(string), typeof(OptionEntryCell));
+
+ public string Text
+ {
+ get => (string)GetValue(TextProperty);
+ set => SetValue(TextProperty, value);
+ }
+ public Keyboard Keyboard
+ {
+ get => (Keyboard)GetValue(KeyboardProperty);
+ set => SetValue(KeyboardProperty, value);
+ }
+ public string Placeholder
+ {
+ get => (string)GetValue(PlaceholderProperty);
+ set => SetValue(PlaceholderProperty, value);
+ }
+
+ protected override View Content => new OptionEntry
+ {
+ HorizontalOptions = LayoutOptions.Fill,
+ HorizontalTextAlignment = TextAlignment.End,
+ VerticalOptions = LayoutOptions.Center,
+ ReturnType = ReturnType.Next
+ }
+ .Binding(Entry.TextProperty, nameof(Text), BindingMode.TwoWay)
+ .Binding(InputView.KeyboardProperty, nameof(Keyboard))
+ .Binding(Entry.PlaceholderProperty, nameof(Placeholder))
+ .DynamicResource(Entry.TextColorProperty, BaseTheme.TextColor)
+ .DynamicResource(Entry.PlaceholderColorProperty, BaseTheme.SecondaryTextColor)
+ .DynamicResource(VisualElement.BackgroundColorProperty, BaseTheme.OptionTintColor);
+ }
+
+ public class OptionEditorCell : OptionVerticalCell
+ {
+ public static readonly BindableProperty TextProperty = BindableProperty.Create(nameof(Text), typeof(string), typeof(OptionEditorCell));
+ public static readonly BindableProperty FontSizeProperty = BindableProperty.Create(nameof(FontSize), typeof(double), typeof(OptionEditorCell), defaultValue: Device.GetNamedSize(NamedSize.Default, typeof(Editor)));
+ public static readonly BindableProperty KeyboardProperty = BindableProperty.Create(nameof(Keyboard), typeof(Keyboard), typeof(OptionEditorCell), defaultValue: Keyboard.Default);
+ public static readonly BindableProperty PlaceholderProperty = BindableProperty.Create(nameof(Placeholder), typeof(string), typeof(OptionEditorCell));
+
+ public string Text
+ {
+ get => (string)GetValue(TextProperty);
+ set => SetValue(TextProperty, value);
+ }
+ [TypeConverter(typeof(FontSizeConverter))]
+ public double FontSize
+ {
+ get => (double)GetValue(FontSizeProperty);
+ set => SetValue(FontSizeProperty, value);
+ }
+ public Keyboard Keyboard
+ {
+ get => (Keyboard)GetValue(KeyboardProperty);
+ set => SetValue(KeyboardProperty, value);
+ }
+ public string Placeholder
+ {
+ get => (string)GetValue(PlaceholderProperty);
+ set => SetValue(PlaceholderProperty, value);
+ }
+
+ protected override View Content => new OptionEditor
+ {
+ HorizontalOptions = LayoutOptions.Fill,
+ VerticalOptions = LayoutOptions.Fill
+ }
+ .Binding(Editor.TextProperty, nameof(Text), BindingMode.TwoWay)
+ .Binding(Editor.FontSizeProperty, nameof(FontSize))
+ .Binding(InputView.KeyboardProperty, nameof(Keyboard))
+ .Binding(Editor.PlaceholderProperty, nameof(Placeholder))
+ .DynamicResource(Editor.TextColorProperty, BaseTheme.TextColor)
+ .DynamicResource(Editor.PlaceholderColorProperty, BaseTheme.SecondaryTextColor)
+ .DynamicResource(VisualElement.BackgroundColorProperty, BaseTheme.OptionTintColor);
+ }
+}
diff --git a/Billing.Shared/Views/AddAccountPage.xaml b/Billing.Shared/Views/AddAccountPage.xaml
index 9f1905f..0cae955 100644
--- a/Billing.Shared/Views/AddAccountPage.xaml
+++ b/Billing.Shared/Views/AddAccountPage.xaml
@@ -15,25 +15,34 @@
-
-
-
-
+
+
+
+
+
-
+
+
+
-
-
+
+
+
+
diff --git a/Billing.Shared/Views/AddAccountPage.xaml.cs b/Billing.Shared/Views/AddAccountPage.xaml.cs
index 0caa427..76c4a6d 100644
--- a/Billing.Shared/Views/AddAccountPage.xaml.cs
+++ b/Billing.Shared/Views/AddAccountPage.xaml.cs
@@ -42,12 +42,16 @@ namespace Billing.Views
private readonly Account account;
public Command CheckAccount { get; }
+ public Command SelectIcon { get; }
+ public Command SelectCategory { get; }
public event EventHandler AccountChecked;
public AddAccountPage()
{
CheckAccount = new Command(OnCheckAccount);
+ SelectIcon = new Command(OnSelectIcon);
+ SelectCategory = new Command(OnSelectCategory);
InitializeComponent();
}
@@ -78,6 +82,16 @@ namespace Billing.Views
}
});
}
+
+ private void OnSelectIcon()
+ {
+
+ }
+
+ private void OnSelectCategory()
+ {
+
+ }
}
public class AccountEventArgs : EventArgs
diff --git a/Billing.sln b/Billing.sln
index ea1e6c2..a737a6b 100644
--- a/Billing.sln
+++ b/Billing.sln
@@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Billing.iOS", "Billing\Bill
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Billing.Shared", "Billing.Shared\Billing.Shared.shproj", "{6AC75D01-70D6-4A07-8685-BC52AFD97A7A}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Svg2Png", "Svg2Png\Svg2Png.csproj", "{43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Billing.Shared\Billing.Shared.projitems*{5c4f1c35-6f66-4063-9605-a9f37fcabba8}*SharedItemsImports = 4
@@ -60,6 +62,18 @@ Global
{5C4F1C35-6F66-4063-9605-A9F37FCABBA8}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{5C4F1C35-6F66-4063-9605-A9F37FCABBA8}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{5C4F1C35-6F66-4063-9605-A9F37FCABBA8}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Debug|iPhone.Build.0 = Debug|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Release|iPhone.Build.0 = Release|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
+ {43BB5B21-61E0-42BB-ADF1-DBCD662E61E1}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Billing/Billing.Android/Billing.Android.csproj b/Billing/Billing.Android/Billing.Android.csproj
index 2d5dae2..9671b07 100644
--- a/Billing/Billing.Android/Billing.Android.csproj
+++ b/Billing/Billing.Android/Billing.Android.csproj
@@ -78,6 +78,7 @@
+
@@ -104,6 +105,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Billing/Billing.Android/Renderers/OptionEditorRenderer.cs b/Billing/Billing.Android/Renderers/OptionEditorRenderer.cs
new file mode 100644
index 0000000..d413512
--- /dev/null
+++ b/Billing/Billing.Android/Renderers/OptionEditorRenderer.cs
@@ -0,0 +1,28 @@
+using Android.Content;
+using Android.Graphics.Drawables;
+using Billing.Droid.Renderers;
+using Billing.UI;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.Android;
+
+[assembly: ExportRenderer(typeof(OptionEditor), typeof(OptionEditorRenderer))]
+namespace Billing.Droid.Renderers
+{
+ public class OptionEditorRenderer : EditorRenderer
+ {
+ public OptionEditorRenderer(Context context) : base(context)
+ {
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+
+ if (e.NewElement != null)
+ {
+ var drawable = new ColorDrawable(e.NewElement.BackgroundColor.ToAndroid());
+ Control.SetBackground(drawable);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Billing/Billing.Android/Resources/Resource.designer.cs b/Billing/Billing.Android/Resources/Resource.designer.cs
index dc11e03..09f20b5 100644
--- a/Billing/Billing.Android/Resources/Resource.designer.cs
+++ b/Billing/Billing.Android/Resources/Resource.designer.cs
@@ -16544,154 +16544,172 @@ namespace Billing.Droid
public const int design_snackbar_background = 2131165287;
// aapt resource value: 0x7F070068
- public const int ic_arrow_down_24dp = 2131165288;
+ public const int dollar = 2131165288;
// aapt resource value: 0x7F070069
- public const int ic_clock_black_24dp = 2131165289;
+ public const int face = 2131165289;
// aapt resource value: 0x7F07006A
- public const int ic_default = 2131165290;
+ public const int ic_arrow_down_24dp = 2131165290;
// aapt resource value: 0x7F07006B
- public const int ic_keyboard_black_24dp = 2131165291;
+ public const int ic_clock_black_24dp = 2131165291;
// aapt resource value: 0x7F07006C
- public const int ic_mtrl_checked_circle = 2131165292;
+ public const int ic_default = 2131165292;
// aapt resource value: 0x7F07006D
- public const int ic_mtrl_chip_checked_black = 2131165293;
+ public const int ic_keyboard_black_24dp = 2131165293;
// aapt resource value: 0x7F07006E
- public const int ic_mtrl_chip_checked_circle = 2131165294;
+ public const int ic_mtrl_checked_circle = 2131165294;
// aapt resource value: 0x7F07006F
- public const int ic_mtrl_chip_close_circle = 2131165295;
+ public const int ic_mtrl_chip_checked_black = 2131165295;
// aapt resource value: 0x7F070070
- public const int material_cursor_drawable = 2131165296;
+ public const int ic_mtrl_chip_checked_circle = 2131165296;
// aapt resource value: 0x7F070071
- public const int material_ic_calendar_black_24dp = 2131165297;
+ public const int ic_mtrl_chip_close_circle = 2131165297;
// aapt resource value: 0x7F070072
- public const int material_ic_clear_black_24dp = 2131165298;
+ public const int material_cursor_drawable = 2131165298;
// aapt resource value: 0x7F070073
- public const int material_ic_edit_black_24dp = 2131165299;
+ public const int material_ic_calendar_black_24dp = 2131165299;
// aapt resource value: 0x7F070074
- public const int material_ic_keyboard_arrow_left_black_24dp = 2131165300;
+ public const int material_ic_clear_black_24dp = 2131165300;
// aapt resource value: 0x7F070075
- public const int material_ic_keyboard_arrow_next_black_24dp = 2131165301;
+ public const int material_ic_edit_black_24dp = 2131165301;
// aapt resource value: 0x7F070076
- public const int material_ic_keyboard_arrow_previous_black_24dp = 2131165302;
+ public const int material_ic_keyboard_arrow_left_black_24dp = 2131165302;
// aapt resource value: 0x7F070077
- public const int material_ic_keyboard_arrow_right_black_24dp = 2131165303;
+ public const int material_ic_keyboard_arrow_next_black_24dp = 2131165303;
// aapt resource value: 0x7F070078
- public const int material_ic_menu_arrow_down_black_24dp = 2131165304;
+ public const int material_ic_keyboard_arrow_previous_black_24dp = 2131165304;
// aapt resource value: 0x7F070079
- public const int material_ic_menu_arrow_up_black_24dp = 2131165305;
+ public const int material_ic_keyboard_arrow_right_black_24dp = 2131165305;
// aapt resource value: 0x7F07007A
- public const int mtrl_dialog_background = 2131165306;
+ public const int material_ic_menu_arrow_down_black_24dp = 2131165306;
// aapt resource value: 0x7F07007B
- public const int mtrl_dropdown_arrow = 2131165307;
+ public const int material_ic_menu_arrow_up_black_24dp = 2131165307;
// aapt resource value: 0x7F07007C
- public const int mtrl_ic_arrow_drop_down = 2131165308;
+ public const int mtrl_dialog_background = 2131165308;
// aapt resource value: 0x7F07007D
- public const int mtrl_ic_arrow_drop_up = 2131165309;
+ public const int mtrl_dropdown_arrow = 2131165309;
// aapt resource value: 0x7F07007E
- public const int mtrl_ic_cancel = 2131165310;
+ public const int mtrl_ic_arrow_drop_down = 2131165310;
// aapt resource value: 0x7F07007F
- public const int mtrl_ic_error = 2131165311;
+ public const int mtrl_ic_arrow_drop_up = 2131165311;
// aapt resource value: 0x7F070080
- public const int mtrl_navigation_bar_item_background = 2131165312;
+ public const int mtrl_ic_cancel = 2131165312;
// aapt resource value: 0x7F070081
- public const int mtrl_popupmenu_background = 2131165313;
+ public const int mtrl_ic_error = 2131165313;
// aapt resource value: 0x7F070082
- public const int mtrl_popupmenu_background_dark = 2131165314;
+ public const int mtrl_navigation_bar_item_background = 2131165314;
// aapt resource value: 0x7F070083
- public const int mtrl_tabs_default_indicator = 2131165315;
+ public const int mtrl_popupmenu_background = 2131165315;
// aapt resource value: 0x7F070084
- public const int navigation_empty_icon = 2131165316;
+ public const int mtrl_popupmenu_background_dark = 2131165316;
// aapt resource value: 0x7F070085
- public const int notification_action_background = 2131165317;
+ public const int mtrl_tabs_default_indicator = 2131165317;
// aapt resource value: 0x7F070086
- public const int notification_bg = 2131165318;
+ public const int navigation_empty_icon = 2131165318;
// aapt resource value: 0x7F070087
- public const int notification_bg_low = 2131165319;
+ public const int note = 2131165319;
// aapt resource value: 0x7F070088
- public const int notification_bg_low_normal = 2131165320;
+ public const int notification_action_background = 2131165320;
// aapt resource value: 0x7F070089
- public const int notification_bg_low_pressed = 2131165321;
+ public const int notification_bg = 2131165321;
// aapt resource value: 0x7F07008A
- public const int notification_bg_normal = 2131165322;
+ public const int notification_bg_low = 2131165322;
// aapt resource value: 0x7F07008B
- public const int notification_bg_normal_pressed = 2131165323;
+ public const int notification_bg_low_normal = 2131165323;
// aapt resource value: 0x7F07008C
- public const int notification_icon_background = 2131165324;
+ public const int notification_bg_low_pressed = 2131165324;
// aapt resource value: 0x7F07008D
- public const int notification_template_icon_bg = 2131165325;
+ public const int notification_bg_normal = 2131165325;
// aapt resource value: 0x7F07008E
- public const int notification_template_icon_low_bg = 2131165326;
+ public const int notification_bg_normal_pressed = 2131165326;
// aapt resource value: 0x7F07008F
- public const int notification_tile_bg = 2131165327;
+ public const int notification_icon_background = 2131165327;
// aapt resource value: 0x7F070090
- public const int notify_panel_notification_icon_bg = 2131165328;
+ public const int notification_template_icon_bg = 2131165328;
// aapt resource value: 0x7F070091
- public const int plus = 2131165329;
+ public const int notification_template_icon_low_bg = 2131165329;
// aapt resource value: 0x7F070092
- public const int preference_list_divider_material = 2131165330;
+ public const int notification_tile_bg = 2131165330;
// aapt resource value: 0x7F070093
- public const int right = 2131165331;
+ public const int notify_panel_notification_icon_bg = 2131165331;
// aapt resource value: 0x7F070094
- public const int settings = 2131165332;
+ public const int pencil = 2131165332;
// aapt resource value: 0x7F070095
- public const int test_custom_background = 2131165333;
+ public const int plus = 2131165333;
// aapt resource value: 0x7F070096
- public const int tooltip_frame_dark = 2131165334;
+ public const int preference_list_divider_material = 2131165334;
// aapt resource value: 0x7F070097
- public const int tooltip_frame_light = 2131165335;
+ public const int project = 2131165335;
// aapt resource value: 0x7F070098
- public const int wallet = 2131165336;
+ public const int right = 2131165336;
// aapt resource value: 0x7F070099
- public const int xamarin_logo = 2131165337;
+ public const int sackdollar = 2131165337;
+
+ // aapt resource value: 0x7F07009A
+ public const int settings = 2131165338;
+
+ // aapt resource value: 0x7F07009B
+ public const int test_custom_background = 2131165339;
+
+ // aapt resource value: 0x7F07009C
+ public const int tooltip_frame_dark = 2131165340;
+
+ // aapt resource value: 0x7F07009D
+ public const int tooltip_frame_light = 2131165341;
+
+ // aapt resource value: 0x7F07009E
+ public const int wallet = 2131165342;
+
+ // aapt resource value: 0x7F07009F
+ public const int xamarin_logo = 2131165343;
static Drawable()
{
diff --git a/Billing/Billing.Android/Resources/drawable-mdpi/dollar.png b/Billing/Billing.Android/Resources/drawable-mdpi/dollar.png
new file mode 100644
index 0000000..cd8e682
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-mdpi/dollar.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-mdpi/face.png b/Billing/Billing.Android/Resources/drawable-mdpi/face.png
new file mode 100644
index 0000000..abac410
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-mdpi/face.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-mdpi/note.png b/Billing/Billing.Android/Resources/drawable-mdpi/note.png
new file mode 100644
index 0000000..f8bf83c
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-mdpi/note.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-mdpi/pencil.png b/Billing/Billing.Android/Resources/drawable-mdpi/pencil.png
new file mode 100644
index 0000000..198c9fc
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-mdpi/pencil.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-mdpi/project.png b/Billing/Billing.Android/Resources/drawable-mdpi/project.png
new file mode 100644
index 0000000..3b7ea20
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-mdpi/project.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-mdpi/sackdollar.png b/Billing/Billing.Android/Resources/drawable-mdpi/sackdollar.png
new file mode 100644
index 0000000..cf79b5c
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-mdpi/sackdollar.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xhdpi/dollar.png b/Billing/Billing.Android/Resources/drawable-xhdpi/dollar.png
new file mode 100644
index 0000000..33cc63c
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xhdpi/dollar.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xhdpi/face.png b/Billing/Billing.Android/Resources/drawable-xhdpi/face.png
new file mode 100644
index 0000000..c357fd4
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xhdpi/face.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xhdpi/note.png b/Billing/Billing.Android/Resources/drawable-xhdpi/note.png
new file mode 100644
index 0000000..4d8600a
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xhdpi/note.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xhdpi/pencil.png b/Billing/Billing.Android/Resources/drawable-xhdpi/pencil.png
new file mode 100644
index 0000000..38cbc68
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xhdpi/pencil.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xhdpi/project.png b/Billing/Billing.Android/Resources/drawable-xhdpi/project.png
new file mode 100644
index 0000000..4130c0d
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xhdpi/project.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xhdpi/sackdollar.png b/Billing/Billing.Android/Resources/drawable-xhdpi/sackdollar.png
new file mode 100644
index 0000000..97f90c3
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xhdpi/sackdollar.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xxhdpi/dollar.png b/Billing/Billing.Android/Resources/drawable-xxhdpi/dollar.png
new file mode 100644
index 0000000..d2ecf12
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xxhdpi/dollar.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xxhdpi/face.png b/Billing/Billing.Android/Resources/drawable-xxhdpi/face.png
new file mode 100644
index 0000000..68ea618
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xxhdpi/face.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xxhdpi/note.png b/Billing/Billing.Android/Resources/drawable-xxhdpi/note.png
new file mode 100644
index 0000000..4730a66
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xxhdpi/note.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xxhdpi/pencil.png b/Billing/Billing.Android/Resources/drawable-xxhdpi/pencil.png
new file mode 100644
index 0000000..95df01d
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xxhdpi/pencil.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xxhdpi/project.png b/Billing/Billing.Android/Resources/drawable-xxhdpi/project.png
new file mode 100644
index 0000000..a386e08
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xxhdpi/project.png differ
diff --git a/Billing/Billing.Android/Resources/drawable-xxhdpi/sackdollar.png b/Billing/Billing.Android/Resources/drawable-xxhdpi/sackdollar.png
new file mode 100644
index 0000000..596e2d4
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable-xxhdpi/sackdollar.png differ
diff --git a/Billing/Billing.Android/Resources/drawable/dollar.png b/Billing/Billing.Android/Resources/drawable/dollar.png
new file mode 100644
index 0000000..4dc3787
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable/dollar.png differ
diff --git a/Billing/Billing.Android/Resources/drawable/face.png b/Billing/Billing.Android/Resources/drawable/face.png
new file mode 100644
index 0000000..25b69dc
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable/face.png differ
diff --git a/Billing/Billing.Android/Resources/drawable/note.png b/Billing/Billing.Android/Resources/drawable/note.png
new file mode 100644
index 0000000..a0cb5bf
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable/note.png differ
diff --git a/Billing/Billing.Android/Resources/drawable/pencil.png b/Billing/Billing.Android/Resources/drawable/pencil.png
new file mode 100644
index 0000000..cb5e735
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable/pencil.png differ
diff --git a/Billing/Billing.Android/Resources/drawable/project.png b/Billing/Billing.Android/Resources/drawable/project.png
new file mode 100644
index 0000000..48747a7
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable/project.png differ
diff --git a/Billing/Billing.Android/Resources/drawable/sackdollar.png b/Billing/Billing.Android/Resources/drawable/sackdollar.png
new file mode 100644
index 0000000..583cd28
Binary files /dev/null and b/Billing/Billing.Android/Resources/drawable/sackdollar.png differ
diff --git a/Billing/Billing.iOS/Billing.iOS.csproj b/Billing/Billing.iOS/Billing.iOS.csproj
index 481de8d..aa89e9d 100644
--- a/Billing/Billing.iOS/Billing.iOS.csproj
+++ b/Billing/Billing.iOS/Billing.iOS.csproj
@@ -79,6 +79,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Billing/Billing.iOS/Resources/dollar.png b/Billing/Billing.iOS/Resources/dollar.png
new file mode 100644
index 0000000..cd8e682
Binary files /dev/null and b/Billing/Billing.iOS/Resources/dollar.png differ
diff --git a/Billing/Billing.iOS/Resources/dollar@2x.png b/Billing/Billing.iOS/Resources/dollar@2x.png
new file mode 100644
index 0000000..33cc63c
Binary files /dev/null and b/Billing/Billing.iOS/Resources/dollar@2x.png differ
diff --git a/Billing/Billing.iOS/Resources/dollar@3x.png b/Billing/Billing.iOS/Resources/dollar@3x.png
new file mode 100644
index 0000000..d2ecf12
Binary files /dev/null and b/Billing/Billing.iOS/Resources/dollar@3x.png differ
diff --git a/Billing/Billing.iOS/Resources/face.png b/Billing/Billing.iOS/Resources/face.png
new file mode 100644
index 0000000..abac410
Binary files /dev/null and b/Billing/Billing.iOS/Resources/face.png differ
diff --git a/Billing/Billing.iOS/Resources/face@2x.png b/Billing/Billing.iOS/Resources/face@2x.png
new file mode 100644
index 0000000..c357fd4
Binary files /dev/null and b/Billing/Billing.iOS/Resources/face@2x.png differ
diff --git a/Billing/Billing.iOS/Resources/face@3x.png b/Billing/Billing.iOS/Resources/face@3x.png
new file mode 100644
index 0000000..68ea618
Binary files /dev/null and b/Billing/Billing.iOS/Resources/face@3x.png differ
diff --git a/Billing/Billing.iOS/Resources/note.png b/Billing/Billing.iOS/Resources/note.png
new file mode 100644
index 0000000..f8bf83c
Binary files /dev/null and b/Billing/Billing.iOS/Resources/note.png differ
diff --git a/Billing/Billing.iOS/Resources/note@2x.png b/Billing/Billing.iOS/Resources/note@2x.png
new file mode 100644
index 0000000..4d8600a
Binary files /dev/null and b/Billing/Billing.iOS/Resources/note@2x.png differ
diff --git a/Billing/Billing.iOS/Resources/note@3x.png b/Billing/Billing.iOS/Resources/note@3x.png
new file mode 100644
index 0000000..4730a66
Binary files /dev/null and b/Billing/Billing.iOS/Resources/note@3x.png differ
diff --git a/Billing/Billing.iOS/Resources/pencil.png b/Billing/Billing.iOS/Resources/pencil.png
new file mode 100644
index 0000000..198c9fc
Binary files /dev/null and b/Billing/Billing.iOS/Resources/pencil.png differ
diff --git a/Billing/Billing.iOS/Resources/pencil@2x.png b/Billing/Billing.iOS/Resources/pencil@2x.png
new file mode 100644
index 0000000..38cbc68
Binary files /dev/null and b/Billing/Billing.iOS/Resources/pencil@2x.png differ
diff --git a/Billing/Billing.iOS/Resources/pencil@3x.png b/Billing/Billing.iOS/Resources/pencil@3x.png
new file mode 100644
index 0000000..95df01d
Binary files /dev/null and b/Billing/Billing.iOS/Resources/pencil@3x.png differ
diff --git a/Billing/Billing.iOS/Resources/project.png b/Billing/Billing.iOS/Resources/project.png
new file mode 100644
index 0000000..3b7ea20
Binary files /dev/null and b/Billing/Billing.iOS/Resources/project.png differ
diff --git a/Billing/Billing.iOS/Resources/project@2x.png b/Billing/Billing.iOS/Resources/project@2x.png
new file mode 100644
index 0000000..4130c0d
Binary files /dev/null and b/Billing/Billing.iOS/Resources/project@2x.png differ
diff --git a/Billing/Billing.iOS/Resources/project@3x.png b/Billing/Billing.iOS/Resources/project@3x.png
new file mode 100644
index 0000000..a386e08
Binary files /dev/null and b/Billing/Billing.iOS/Resources/project@3x.png differ
diff --git a/Billing/Billing.iOS/Resources/sackdollar.png b/Billing/Billing.iOS/Resources/sackdollar.png
new file mode 100644
index 0000000..cf79b5c
Binary files /dev/null and b/Billing/Billing.iOS/Resources/sackdollar.png differ
diff --git a/Billing/Billing.iOS/Resources/sackdollar@2x.png b/Billing/Billing.iOS/Resources/sackdollar@2x.png
new file mode 100644
index 0000000..97f90c3
Binary files /dev/null and b/Billing/Billing.iOS/Resources/sackdollar@2x.png differ
diff --git a/Billing/Billing.iOS/Resources/sackdollar@3x.png b/Billing/Billing.iOS/Resources/sackdollar@3x.png
new file mode 100644
index 0000000..596e2d4
Binary files /dev/null and b/Billing/Billing.iOS/Resources/sackdollar@3x.png differ