From a7c5fe1332c40be3ca158b07d2d847fa69336266 Mon Sep 17 00:00:00 2001 From: Allan Ritchie Date: Fri, 6 May 2016 19:44:40 -0400 Subject: [PATCH] date & time dialogs done on android --- .../Acr.UserDialogs.Android.csproj | 2 +- .../Acr.UserDialogs.Android.csproj.bak | 110 ++++++++++++++++++ .../Builders/DatePromptBuilder.cs | 23 ++-- .../Builders/TimePromptBuilder.cs | 53 +++++---- .../Samples.Droid/Samples.Droid.csproj | 24 +++- src/Samples/Samples.Uwp/project.lock.json | 2 +- src/Samples/Samples/MainPage.xaml | 3 +- 7 files changed, 174 insertions(+), 43 deletions(-) create mode 100644 src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj.bak diff --git a/src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj b/src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj index b519b6c9..ee4166e4 100644 --- a/src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj +++ b/src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj @@ -12,7 +12,7 @@ 512 Off True - v6.0 + v6.0.99 True diff --git a/src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj.bak b/src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj.bak new file mode 100644 index 00000000..b519b6c9 --- /dev/null +++ b/src/Acr.UserDialogs.Android/Acr.UserDialogs.Android.csproj.bak @@ -0,0 +1,110 @@ + + + + Debug + AnyCPU + {4A67E27E-0E7F-4EF2-B3E6-2C24E18EF442} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Acr.UserDialogs + Acr.UserDialogs + 512 + Off + True + v6.0 + True + + + true + full + false + bin\Debug\ + TRACE;DEBUG;__ANDROID__;__PLATFORM__ + prompt + 4 + None + + + pdbonly + true + bin\Release\ + TRACE;__ANDROID__;__PLATFORM__ + prompt + 4 + false + + + + ..\packages\Acr.Support.2.0.2\lib\MonoAndroid10\Acr.Support.Android.dll + True + + + ..\packages\AndHUD.1.2.0\lib\MonoAndroid\AndHUD.dll + True + + + + + ..\packages\Splat.1.6.2\lib\monoandroid\Splat.dll + True + + + + + + ..\packages\Xamarin.Android.Support.Design.23.0.1.3\lib\MonoAndroid403\Xamarin.Android.Support.Design.dll + True + + + ..\packages\Xamarin.Android.Support.v4.23.1.1.0\lib\MonoAndroid403\Xamarin.Android.Support.v4.dll + True + + + ..\packages\Xamarin.Android.Support.v7.AppCompat.23.0.1.3\lib\MonoAndroid403\Xamarin.Android.Support.v7.AppCompat.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {6A0AE941-711D-4C36-A311-960B65534B22} + Acr.UserDialogs.Interface + + + + + + + + + \ No newline at end of file diff --git a/src/Acr.UserDialogs.Android/Builders/DatePromptBuilder.cs b/src/Acr.UserDialogs.Android/Builders/DatePromptBuilder.cs index 3a4ce330..79a7a515 100644 --- a/src/Acr.UserDialogs.Android/Builders/DatePromptBuilder.cs +++ b/src/Acr.UserDialogs.Android/Builders/DatePromptBuilder.cs @@ -13,11 +13,13 @@ public static DatePickerDialog Build(Activity activity, DatePromptConfig config) var dateTime = config.SelectedDate ?? DateTime.Now; var dialog = new DatePickerDialog( activity, - (sender, args) => dateTime = args.Date, + (sender, args) => { }, dateTime.Year, dateTime.Month + 1, dateTime.Day ); + dialog.SetCancelable(false); + if (!String.IsNullOrWhiteSpace(config.Title)) dialog.SetTitle(config.Title); @@ -27,33 +29,32 @@ public static DatePickerDialog Build(Activity activity, DatePromptConfig config) if (config.MaximumDate != null) dialog.DatePicker.MaxDate = config.MaximumDate.Value.ToUnixTimestamp(); - dialog.SetCancelable(config.IsCancellable); if (config.IsCancellable) { dialog.SetButton( (int) DialogButtonType.Negative, new SpannableString(config.CancelText), - (sender, args) => config.OnResult?.Invoke(new DatePromptResult(false, dateTime)) + (sender, args) => + { + config.OnResult?.Invoke(new DatePromptResult(false, dialog.DatePicker.DateTime.Date)); + } ); } dialog.SetButton( (int)DialogButtonType.Positive, new SpannableString(config.OkText), - (sender, args) => config.OnResult?.Invoke(new DatePromptResult(true, dateTime)) + (sender, args) => + { + config.OnResult?.Invoke(new DatePromptResult(true, dialog.DatePicker.DateTime.Date)); + } ); - // hook these, not called by fragments though - dialog.DismissEvent += (sender, args) => config.OnResult?.Invoke(new DatePromptResult(true, dateTime)); - dialog.CancelEvent += (sender, args) => config.OnResult?.Invoke(new DatePromptResult(false, dateTime)); - return dialog; } - public static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); public static long ToUnixTimestamp(this DateTime dateTime) { - var utc = TimeZoneInfo.ConvertTimeToUtc(dateTime); - return Convert.ToInt64((utc - Epoch).TotalSeconds); + return new DateTimeOffset(dateTime).ToUnixTimeMilliseconds(); } } } \ No newline at end of file diff --git a/src/Acr.UserDialogs.Android/Builders/TimePromptBuilder.cs b/src/Acr.UserDialogs.Android/Builders/TimePromptBuilder.cs index 8a20495f..fac79f1b 100644 --- a/src/Acr.UserDialogs.Android/Builders/TimePromptBuilder.cs +++ b/src/Acr.UserDialogs.Android/Builders/TimePromptBuilder.cs @@ -2,46 +2,49 @@ using Android.App; using Android.Content; using Android.Text; +using Android.Widget; namespace Acr.UserDialogs.Builders { public static class TimePromptBuilder { - public static TimePickerDialog Build(Activity activity, TimePromptConfig config) + public static Dialog Build(Activity activity, TimePromptConfig config) { - var time = config.SelectedTime ?? DateTime.Now.TimeOfDay; - var dateTime = DateTime.Now; + var picker = new TimePicker(activity); + var builder = new AlertDialog + .Builder(activity) + .SetCancelable(false) + .SetTitle(config.Title) + .SetView(picker); - var dialog = new TimePickerDialog( - activity, - (sender, args) => dateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, args.HourOfDay, args.Minute, 0), - time.Hours, - time.Minutes, - false - ); - if (!String.IsNullOrWhiteSpace(config.Title)) - dialog.SetTitle(config.Title); + if (config.SelectedTime != null) + { + picker.Hour = config.SelectedTime.Value.Hours; + picker.Minute = config.SelectedTime.Value.Minutes; + } - dialog.SetCancelable(config.IsCancellable); if (config.IsCancellable) { - dialog.SetButton( - (int) DialogButtonType.Negative, - new SpannableString(config.CancelText), - (sender, args) => config.OnResult?.Invoke(new TimePromptResult(false, dateTime.TimeOfDay)) + builder.SetNegativeButton( + config.CancelText, + (sender, args) => + { + var ts = new TimeSpan(0, picker.Hour, picker.Minute, 0); + config.OnResult?.Invoke(new TimePromptResult(false, ts)); + } ); } - dialog.SetButton( - (int)DialogButtonType.Positive, - new SpannableString(config.OkText), - (sender, args) => config.OnResult?.Invoke(new TimePromptResult(true, dateTime.TimeOfDay)) + builder.SetPositiveButton( + config.OkText, + (sender, args) => + { + var ts = new TimeSpan(0, picker.Hour, picker.Minute, 0); + config.OnResult?.Invoke(new TimePromptResult(true, ts)); + } ); - // hook these, not called by fragments though - dialog.DismissEvent += (sender, args) => config.OnResult?.Invoke(new TimePromptResult(true, dateTime.TimeOfDay)); - dialog.CancelEvent += (sender, args) => config.OnResult?.Invoke(new TimePromptResult(false, dateTime.TimeOfDay)); - return dialog; + return builder.Show(); } } } \ No newline at end of file diff --git a/src/Samples/Samples.Droid/Samples.Droid.csproj b/src/Samples/Samples.Droid/Samples.Droid.csproj index 9cdecbf7..5db2a66c 100644 --- a/src/Samples/Samples.Droid/Samples.Droid.csproj +++ b/src/Samples/Samples.Droid/Samples.Droid.csproj @@ -24,7 +24,7 @@ v6.0 - true + True full false bin\Debug\ @@ -32,7 +32,14 @@ prompt 4 None - armeabi;armeabi-v7a;x86 + armeabi,armeabi-v7a,x86 + True + False + False + False + 1G + Xamarin + False full @@ -42,7 +49,18 @@ prompt 4 False - armeabi;armeabi-v7a;x86 + armeabi,armeabi-v7a,x86 + SdkOnly + True + False + False + 1G + Xamarin + False + False + False + False + False diff --git a/src/Samples/Samples.Uwp/project.lock.json b/src/Samples/Samples.Uwp/project.lock.json index 555904b5..cbcceceb 100644 --- a/src/Samples/Samples.Uwp/project.lock.json +++ b/src/Samples/Samples.Uwp/project.lock.json @@ -12224,7 +12224,7 @@ ] }, "Microsoft.NETCore.Runtime.CoreCLR-arm/1.0.0": { - "sha512": "vUQyaKbHCa7BJAAzdfCP2FfBYOSt0YnDw7VMJLmD1/k68HIJgw1QO7GAfHhqoa39zkkvimC47QBH27wG4C5OGQ==", + "sha512": "hoJfIl981eXwn9Tz8onO/J1xaYApIfp/YrhjSh9rRhml1U5Wj80LBgyp/6n+KI3VlvcAraThhnHnCTp+M3Uh+w==", "type": "package", "files": [ "Microsoft.NETCore.Runtime.CoreCLR-arm.1.0.0.nupkg.sha512", diff --git a/src/Samples/Samples/MainPage.xaml b/src/Samples/Samples/MainPage.xaml index 3e7410f2..bb70f44f 100644 --- a/src/Samples/Samples/MainPage.xaml +++ b/src/Samples/Samples/MainPage.xaml @@ -3,8 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:samples="clr-namespace:Samples;assembly=Samples" x:Class="Samples.MainPage" - Title="ACR UserDialogs" - Padding="0, 30, 0, 0"> + Title="ACR UserDialogs">