using System; using System.Globalization; namespace Xamarin.Forms.Platform.Tizen { public class TimePickerRenderer : ViewRenderer { //TODO need to add internationalization support const string DialogTitle = "Choose Time"; static readonly string s_defaultFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern; TimeSpan _time; public TimePickerRenderer() { RegisterPropertyHandler(TimePicker.FormatProperty, UpdateFormat); RegisterPropertyHandler(TimePicker.TimeProperty, UpdateTime); RegisterPropertyHandler(TimePicker.TextColorProperty, UpdateTextColor); } protected override void OnElementChanged(ElementChangedEventArgs e) { if (Control == null) { var entry = new Native.EditfieldEntry(Forms.Context.MainWindow) { IsSingleLine = true, HorizontalTextAlignment = Native.TextAlignment.Center, }; entry.SetVerticalTextAlignment("elm.text", 0.5); entry.AllowFocus(false); SetNativeControl(entry); } if (e.OldElement != null) { Control.Clicked -= ClickedHandler; } if (e.NewElement != null) { _time = DateTime.Now.TimeOfDay; UpdateTimeAndFormat(); Control.Clicked += ClickedHandler; } base.OnElementChanged(e); } protected override Size MinimumSize() { return Control.Measure(Control.MinimumWidth, Control.MinimumHeight).ToDP(); } void ClickedHandler(object o, EventArgs e) { Native.DateTimePickerDialog dialog = new Native.DateTimePickerDialog(Forms.Context.MainWindow) { Title = DialogTitle }; dialog.InitializeTimePicker(_time, null); dialog.DateTimeChanged += DialogDateTimeChangedHandler; dialog.Dismissed += DialogDismissedHandler; dialog.Show(); } void DialogDateTimeChangedHandler(object sender, Native.DateChangedEventArgs dcea) { Element.Time = dcea.NewDate.TimeOfDay; UpdateTime(); } void DialogDismissedHandler(object sender, EventArgs e) { var dialog = sender as Native.DateTimePickerDialog; dialog.DateTimeChanged -= DialogDateTimeChangedHandler; dialog.Dismissed -= DialogDismissedHandler; } void UpdateFormat() { UpdateTimeAndFormat(); } void UpdateTextColor() { Control.TextColor = Element.TextColor.ToNative(); } void UpdateTime() { _time = Element.Time; UpdateTimeAndFormat(); } void UpdateTimeAndFormat() { // Xamarin using DateTime formatting (https://developer.xamarin.com/api/property/Xamarin.Forms.TimePicker.Format/) Control.Text = new DateTime(_time.Ticks).ToString(Element.Format ?? s_defaultFormat); } } }