| | |
| | | { |
| | | public class TimeSettignPage : DoorLockCommonLayout, ZigBee.Common.IStatus |
| | | { |
| | | #region 上报数据处理 |
| | | /// <summary> |
| | | /// 处理变化事件 |
| | | /// </summary> |
| | |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 构造函数 |
| | | /// <summary> |
| | | /// 构造函数 |
| | | /// </summary> |
| | |
| | | BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor; |
| | | ZigBee.Device.ZbGateway.StatusList.Add(this); |
| | | } |
| | | #endregion |
| | | |
| | | #region UI内容 |
| | | #region 变量申明 |
| | | /// <summary> |
| | | /// 当前门锁 |
| | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// 重写移除方法 |
| | | /// </summary> |
| | | public override void RemoveFromParent() |
| | | { |
| | | ZbGateway.StatusList.Remove(this); |
| | | base.RemoveFromParent(); |
| | | } |
| | | |
| | | /// <summary>
|
| | | /// UI显示 |
| | | /// UI显示
|
| | | /// </summary> |
| | | public void Show() |
| | | { |
| | |
| | | this.MidFrameLayout(this); |
| | | MidFrameLayoutContent(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 中部布局 |
| | | /// </summary> |
| | |
| | | { |
| | | if (setTimeType == "DoorLockTime") |
| | | { |
| | | CommonPage.Loading.Start(""); |
| | | // 只有重新启动时会慢,然后其他时刻都是有值的 |
| | | new System.Threading.Thread(() => |
| | | { |
| | | while (this.Parent != null) |
| | | { |
| | | if (DateTime.Now > waitGetDoorLockTime) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(CommonPage.Instance); |
| | | CommonPage.Loading.Hide(); |
| | | }); |
| | | } |
| | | //读门锁时间 |
| | | //等待10秒,没有收到提示超时退出 |
| | | waitGetDoorLockTime = DateTime.Now.AddSeconds(+5); |
| | | doorLock.ReadAttri(ZigBee.Device.Cluster_ID.DoorLock, ZigBee.Device.AttriButeId.DoorLock); |
| | | System.Threading.Thread.Sleep(5 * 1000); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | ReadDoorlockTime(); |
| | | } |
| | | |
| | | var MidTopFrameLayout = new FrameLayout() |
| | | var zoneFrameLayout = new FrameLayout() |
| | | { |
| | | BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, |
| | | }; |
| | | this.midFrameLayout.AddChidren(MidTopFrameLayout); |
| | | this.midFrameLayout.AddChidren(zoneFrameLayout); |
| | | |
| | | if (setTimeType == "DoorLockTime") |
| | | { |
| | | zoneFrameLayout.Height = Application.GetRealHeight(150) + 1; |
| | | AddDoorLocksTimeRow(zoneFrameLayout); |
| | | } |
| | | else |
| | | { |
| | | zoneFrameLayout.Height = Application.GetRealHeight(0); |
| | | } |
| | | |
| | | var midTopFrameLayout = new FrameLayout() |
| | | { |
| | | Y = zoneFrameLayout.Bottom, |
| | | }; |
| | | this.midFrameLayout.AddChidren(midTopFrameLayout); |
| | | |
| | | var dtNow = DateTime.Now; |
| | | for (int i = 0; i < 2; i++) |
| | |
| | | Height = Application.GetRealHeight(127 + 23), |
| | | BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, |
| | | }; |
| | | MidTopFrameLayout.AddChidren(rowLayout); |
| | | midTopFrameLayout.AddChidren(rowLayout); |
| | | |
| | | var btnDateTime = new Button() |
| | | { |
| | |
| | | X = Application.GetRealWidth(58), |
| | | BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine, |
| | | }; |
| | | MidTopFrameLayout.AddChidren(btnLine); |
| | | midTopFrameLayout.AddChidren(btnLine); |
| | | #endregion |
| | | |
| | | #region 显示处理 |
| | |
| | | } |
| | | btnLine.Visible = false; |
| | | } |
| | | #endregion |
| | | #endregion |
| | | |
| | | #region 事件处理 |
| | | int curIndex = i; |
| | | EventHandler<MouseEventArgs> hander = (sender, e) => |
| | | { |
| | | this.midFrameLayout.AddChidren(this.shadowRadiusFrameLayout); |
| | | this.bottomRadiusFrameLayout.RemoveAll(); |
| | | this.BottomRadiusFrameLayout(this); |
| | | var mUIPickerView = new UIPickerView() |
| | | { |
| | | X = Application.GetRealWidth(0), |
| | | Height = Application.GetRealHeight(440), |
| | | }; |
| | | this.bottomRadiusFrameLayout.AddChidren(mUIPickerView); |
| | | |
| | | if (curIndex == 0) |
| | | { |
| | | //日期 |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.Date; |
| | | } |
| | | else |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.CurrentDate; |
| | | } |
| | | |
| | | mUIPickerView.Y = Application.GetRealWidth(245); |
| | | var mList1 = new List<string>(); |
| | | var mList2 = new List<string>(); |
| | | var mList3 = new List<string>(); |
| | | var oldMonth = dtNow.Month; |
| | | |
| | | int year = dtNow.Year + 1; |
| | | int days = DateTime.DaysInMonth(dtNow.Year, dtNow.Month); |
| | | |
| | | for (int y = dtNow.Year - 9; y < dtNow.Year + 1; y++) |
| | | { |
| | | mList1.Add(y.ToString()); |
| | | } |
| | | for (int m = 1; m < 13; m++) |
| | | { |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | mList2.Add(m.ToString() + "月"); |
| | | } |
| | | else |
| | | { |
| | | mList2.Add(m.ToString()); |
| | | } |
| | | } |
| | | for (int d = 1; d < days + 1; d++) |
| | | { |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | mList3.Add(d.ToString() + "日"); |
| | | } |
| | | else |
| | | { |
| | | mList3.Add(d.ToString()); |
| | | } |
| | | } |
| | | |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | mUIPickerView.setNPicker(mList2, mList3, null); |
| | | mUIPickerView.setCurrentItems(dtNow.Month - 1, dtNow.Day - 1, 0); |
| | | curMonth = dtNow.Month; |
| | | curDay = dtNow.Day; |
| | | |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateYear = dtNow.Year; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMonth = curMonth; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateDay = curDay; |
| | | } |
| | | else |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateYear = dtNow.Year; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth = curMonth; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateDay = curDay; |
| | | } |
| | | var btnOk = new Button |
| | | { |
| | | X = Application.GetRealWidth(919), |
| | | Y = Application.GetRealHeight(40), |
| | | Height = Application.GetRealHeight(58), |
| | | Width = Application.GetRealWidth(101), |
| | | Text = Language.StringByID(R.MyInternationalizationString.Complete), |
| | | TextColor = Shared.Common.ZigbeeColor.Current.XMOrange, |
| | | TextSize = 14, |
| | | }; |
| | | this.bottomRadiusFrameLayout.AddChidren(btnOk); |
| | | btnOk.MouseUpEventHandler += (sender1, e1) => |
| | | { |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateYear = dtNow.Year; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMonth = curMonth; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateDay = curDay; |
| | | } |
| | | else |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateYear = dtNow.Year; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth = curMonth; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateDay = curDay; |
| | | } |
| | | if (timeSetAction != null) |
| | | { |
| | | timeSetAction(); |
| | | } |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | MidFrameLayoutContent(); |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | mUIPickerView.setNPicker(mList1, mList2, mList3); |
| | | mUIPickerView.setCurrentItems(9, dtNow.Month - 1, dtNow.Day - 1); |
| | | curYear = dtNow.Year; |
| | | curMonth = dtNow.Month; |
| | | curDay = dtNow.Day; |
| | | if (CurentDoorLockTime != null) |
| | | { |
| | | curHour = CurentDoorLockTime.Hour; |
| | | curMin = CurentDoorLockTime.Minute; |
| | | curSec = CurentDoorLockTime.Second; |
| | | } |
| | | else |
| | | { |
| | | curHour = dtNow.Hour; |
| | | curMin = dtNow.Minute; |
| | | curSec = dtNow.Second; |
| | | } |
| | | } |
| | | |
| | | Action dAction = () => |
| | | { |
| | | if (curMonth != oldMonth) |
| | | { |
| | | oldMonth = curMonth; |
| | | days = DateTime.DaysInMonth(curYear, curMonth); |
| | | mList3.Clear(); |
| | | |
| | | for (int d = 1; d < days + 1; d++) |
| | | { |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | mList3.Add(d.ToString() + "日"); |
| | | } |
| | | else |
| | | { |
| | | mList3.Add(d.ToString()); |
| | | } |
| | | } |
| | | |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | mUIPickerView.setNPicker(mList2, mList3, null); |
| | | mUIPickerView.setCurrentItems(curMonth - 1, curDay - 1, 0); |
| | | } |
| | | else |
| | | { |
| | | mUIPickerView.setNPicker(mList1, mList2, mList3); |
| | | mUIPickerView.setCurrentItems(9, curMonth - 1, curDay - 1); |
| | | } |
| | | } |
| | | }; |
| | | mUIPickerView.OnSelectChangeEvent += (y, m, d) => |
| | | { |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | curYear = dtNow.Year; |
| | | curMonth = y + 1; |
| | | curDay = m + 1; |
| | | } |
| | | else |
| | | { |
| | | curYear = y + 2009; |
| | | curMonth = m + 1; |
| | | curDay = d + 1; |
| | | } |
| | | dAction(); |
| | | }; |
| | | } |
| | | if (curIndex == 1) |
| | | { |
| | | //时间 |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.Time; |
| | | } |
| | | else |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.CurrentTime; |
| | | } |
| | | |
| | | mUIPickerView.Y = Application.GetRealWidth(245); |
| | | var mList1 = new List<string>(); |
| | | var mList2 = new List<string>(); |
| | | for (int h = 0; h < 24; h++) |
| | | { |
| | | if (h < 10) |
| | | { |
| | | mList1.Add("0" + h.ToString()); |
| | | } |
| | | else |
| | | { |
| | | mList1.Add(h.ToString()); |
| | | } |
| | | } |
| | | for (int m = 0; m < 60; m++) |
| | | { |
| | | if (m < 10) |
| | | { |
| | | mList2.Add("0" + m.ToString()); |
| | | } |
| | | else |
| | | { |
| | | mList2.Add(m.ToString()); |
| | | } |
| | | } |
| | | mUIPickerView.setNPicker(mList1, mList2, null); |
| | | mUIPickerView.setCurrentItems(dtNow.Hour, dtNow.Minute, 0); |
| | | if (CurentDoorLockTime != null) |
| | | { |
| | | curYear = CurentDoorLockTime.Year; |
| | | curMonth = CurentDoorLockTime.Month; |
| | | curDay = CurentDoorLockTime.Day; |
| | | } |
| | | else |
| | | { |
| | | curYear = dtNow.Year; |
| | | curMonth = dtNow.Month; |
| | | curDay = dtNow.Day; |
| | | } |
| | | curHour = dtNow.Hour; |
| | | curMin = dtNow.Minute; |
| | | curSec = dtNow.Second; |
| | | mUIPickerView.OnSelectChangeEvent += (h, m, s) => |
| | | { |
| | | curHour = h; |
| | | curMin = m; |
| | | curSec = dtNow.Second; |
| | | }; |
| | | |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateHour = curHour; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMinute = curMin; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateSecond = curSec; |
| | | } |
| | | else |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateHour = curHour; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMinute = curMin; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateSecond = curSec; |
| | | } |
| | | |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | var btnOk = new Button |
| | | { |
| | | X = Application.GetRealWidth(919), |
| | | Y = Application.GetRealHeight(40), |
| | | Height = Application.GetRealHeight(58), |
| | | Width = Application.GetRealWidth(101), |
| | | Text = Language.StringByID(R.MyInternationalizationString.Complete), |
| | | TextColor = Shared.Common.ZigbeeColor.Current.XMOrange, |
| | | TextSize = 14, |
| | | }; |
| | | this.bottomRadiusFrameLayout.AddChidren(btnOk); |
| | | btnOk.MouseUpEventHandler += (sender1, e1) => |
| | | { |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateHour = curHour; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMinute = curMin; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateSecond = curSec; |
| | | } |
| | | else |
| | | { |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateHour = curHour; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMinute = curMin; |
| | | Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateSecond = curSec; |
| | | } |
| | | if (timeSetAction != null) |
| | | { |
| | | timeSetAction(); |
| | | } |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | MidFrameLayoutContent(); |
| | | }; |
| | | } |
| | | } |
| | | ClickHandle(curIndex, dtNow); |
| | | }; |
| | | rowLayout.MouseDownEventHandler += hander; |
| | | btnDateTime.MouseDownEventHandler += hander; |
| | |
| | | { |
| | | textDisplayTime.MouseDownEventHandler += hander; |
| | | } |
| | | #endregion |
| | | #endregion |
| | | } |
| | | |
| | | btnCancel.MouseUpEventHandler += (sender1, e1) => |
| | | { |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | }; |
| | | btnFinish.MouseUpEventHandler += (sender1, e1) => |
| | | btnFinish.MouseUpEventHandler += (sender1, e1) => |
| | | { |
| | | if (setTimeType == "DoorLockTime") |
| | | { |
| | | System.Threading.Tasks.Task.Run(async () => { |
| | | try |
| | | { |
| | | var curDateTime = new DateTime(curYear, curMonth, curDay, curHour, curMin, curSec); |
| | | var setTimestamp = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetUnixTimeStamp(curDateTime); |
| | | Application.RunOnMainThread(() => { |
| | | CommonPage.Loading.Start(""); |
| | | }); |
| | | var rectifyResult = await doorLock.RectifyDoorLockTimeAsync(int.Parse(setTimestamp)); |
| | | if (rectifyResult != null && rectifyResult.setWritableValueResponData != null) |
| | | { |
| | | Application.RunOnMainThread(() => { |
| | | if (rectifyResult.setWritableValueResponData.Status == 0) |
| | | { |
| | | doorLock.ReadAttri(ZigBee.Device.Cluster_ID.DoorLock, ZigBee.Device.AttriButeId.DoorLock); |
| | | System.Threading.Thread.Sleep(1000); |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | } |
| | | else |
| | | { |
| | | new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RectifyFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish); |
| | | } |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | Application.RunOnMainThread(() => { |
| | | new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish); |
| | | }); |
| | | } |
| | | } |
| | | catch { } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); }); |
| | | } |
| | | }); |
| | | { |
| | | DoorLockTimeFinishHandle(); |
| | | } |
| | | }; |
| | | this.shadowRadiusFrameLayout.MouseUpEventHandler += (sender1, e1) => |
| | | { |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | }; |
| | | |
| | | if (setTimeType == "DoorLockTime") |
| | | { |
| | | if (CurentDoorLockTime != null && CurentDoorLockTime.Year != 1) |
| | |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 接口实现 |
| | | #region 时区 |
| | | /// <summary> |
| | | /// 处理变化事件 --将弃用 改用DeviceInfoChange() |
| | | /// 添加【门锁时间】行(门锁专用) |
| | | /// </summary> |
| | | /// <returns>The changed.</returns> |
| | | /// <param name="common">Common.</param> |
| | | public void Changed(CommonDevice common) |
| | | private void AddDoorLocksTimeRow(FrameLayout zoneFrameLayout) |
| | | { |
| | | //门锁时间 |
| | | var rowLayout = new FrameLayout() |
| | | { |
| | | Height = Application.GetRealHeight(150), |
| | | BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, |
| | | }; |
| | | zoneFrameLayout.AddChidren(rowLayout); |
| | | |
| | | //当前时区 |
| | | var btnCurZone = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(560), |
| | | Height = Application.GetRealHeight(58), |
| | | X = Application.GetRealWidth(58), |
| | | TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextSize = 12, |
| | | Y = Application.GetRealHeight(46), |
| | | Text = Language.StringByID(R.MyInternationalizationString.CurZone), |
| | | }; |
| | | rowLayout.AddChidren(btnCurZone); |
| | | |
| | | //哪个时区 |
| | | var textZone = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(333), |
| | | Height = Application.GetRealHeight(58), |
| | | X = Application.GetRealWidth(689), |
| | | Y = Application.GetRealHeight(46), |
| | | TextAlignment = TextAlignment.CenterRight, |
| | | TextColor = Shared.Common.ZigbeeColor.Current.XMGray4, |
| | | TextSize = 14, |
| | | }; |
| | | rowLayout.AddChidren(textZone); |
| | | textZone.Text = zoneData(); |
| | | textZone.MouseDownEventHandler += (sender, e) => |
| | | { |
| | | GetSpecificZoneNowDate(); |
| | | }; |
| | | |
| | | var btnLine = new FrameLayout() |
| | | { |
| | | Width = Application.GetRealWidth(965), |
| | | Height = 1, |
| | | X = Application.GetRealWidth(58), |
| | | Y = Application.GetRealHeight(150), |
| | | BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine, |
| | | }; |
| | | zoneFrameLayout.AddChidren(btnLine); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 时区数据 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | private string zoneData() |
| | | { |
| | | string zoneText = ""; |
| | | var gwZone = caculateTimeZone(Common.Config.Instance.Home.Longitude); |
| | | if (gwZone.Contains('+')) |
| | | { |
| | | zoneText = Language.StringByID(R.MyInternationalizationString.East); |
| | | } |
| | | else |
| | | { |
| | | zoneText = Language.StringByID(R.MyInternationalizationString.West); |
| | | } |
| | | var num = ToNum(int.Parse(gwZone)); |
| | | return zoneText += num + Language.StringByID(R.MyInternationalizationString.CurZoneText); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取时区 |
| | | /// <para>currentLon:"+"为东区,“-”为西区</para> |
| | | /// </summary> |
| | | public static String caculateTimeZone(double currentLon) |
| | | { |
| | | int timeZone; |
| | | int shangValue = (int)(currentLon / 15); |
| | | double yushuValue = Math.Abs(currentLon % 15); |
| | | if (yushuValue <= 7.5) |
| | | { |
| | | timeZone = shangValue; |
| | | } |
| | | else |
| | | { |
| | | timeZone = shangValue + (currentLon > 0 ? 1 : -1); |
| | | } |
| | | return timeZone >= 0 ? "+" + Math.Abs(timeZone) : "-" + Math.Abs(timeZone); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换数字 |
| | | /// </summary> |
| | | private string ToNum(int x) |
| | | { |
| | | var numString = new string[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" }; |
| | | var strChnNamesList = new List<string>(numString); |
| | | return strChnNamesList[x]; |
| | | } |
| | | |
| | | //如何显示时区所在的时间 |
| | | public DateTime GetSpecificZoneNowDate(string zoneName = "") |
| | | { |
| | | DateTime curZoneDateTime; |
| | | |
| | | // 列举所有支持的时区列表 |
| | | System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> lst = TimeZoneInfo.GetSystemTimeZones(); |
| | | foreach (TimeZoneInfo tzi in lst) |
| | | { |
| | | var aa = tzi; |
| | | var aa1 = tzi.Id; |
| | | } |
| | | GetSpecificZoneNowDate1(); |
| | | zoneName = "Central America Standard Time";//美国 |
| | | //将本地时间转换为美国标准中部时间 |
| | | DateTime dt = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, TimeZoneInfo.Local); |
| | | curZoneDateTime = TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById(zoneName)); |
| | | |
| | | zoneName = "China Standard Time";//中国 |
| | | //首先将服务器的时间转化为utc时间, |
| | | var utcdate = DateTime.Now.ToUniversalTime(); |
| | | //然后转换成指定时区的日期 |
| | | TimeZoneInfo beiJingZone = TimeZoneInfo.FindSystemTimeZoneById(zoneName); |
| | | curZoneDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcdate, beiJingZone); |
| | | |
| | | return curZoneDateTime; |
| | | } |
| | | |
| | | public void GetSpecificZoneNowDate1() |
| | | { |
| | | // Get time in local time zone |
| | | DateTime thisTime = DateTime.Now; |
| | | Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ? |
| | | TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime); |
| | | Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local)); |
| | | // Get Tokyo Standard Time zone |
| | | TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time"); |
| | | DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst); |
| | | Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ? |
| | | tst.DaylightName : tst.StandardName, tstTime); |
| | | Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst)); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region 门锁时间 |
| | | /// <summary> |
| | | /// 读取门锁时间 |
| | | /// </summary> |
| | | private void ReadDoorlockTime() |
| | | { |
| | | CommonPage.Loading.Start(""); |
| | | // 只有重新启动时会慢,然后其他时刻都是有值的 |
| | | new System.Threading.Thread(() => |
| | | { |
| | | while (this.Parent != null) |
| | | { |
| | | if (DateTime.Now > waitGetDoorLockTime) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(CommonPage.Instance); |
| | | CommonPage.Loading.Hide(); |
| | | }); |
| | | } |
| | | //读门锁时间 |
| | | //等待10秒,没有收到提示超时退出 |
| | | waitGetDoorLockTime = DateTime.Now.AddSeconds(+5); |
| | | doorLock.ReadAttri(ZigBee.Device.Cluster_ID.DoorLock, ZigBee.Device.AttriButeId.DoorLock); |
| | | System.Threading.Thread.Sleep(5 * 1000); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 门锁时间确认按钮处理 |
| | | /// </summary> |
| | | private void DoorLockTimeFinishHandle() |
| | | { |
| | | System.Threading.Tasks.Task.Run(async () => |
| | | { |
| | | try |
| | | { |
| | | var curDateTime = new DateTime(curYear, curMonth, curDay, curHour, curMin, curSec); |
| | | var setTimestamp = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetUnixTimeStamp(curDateTime); |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | CommonPage.Loading.Start(""); |
| | | }); |
| | | var rectifyResult = await doorLock.RectifyDoorLockTimeAsync(int.Parse(setTimestamp)); |
| | | if (rectifyResult != null && rectifyResult.setWritableValueResponData != null) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | if (rectifyResult.setWritableValueResponData.Status == 0) |
| | | { |
| | | doorLock.ReadAttri(ZigBee.Device.Cluster_ID.DoorLock, ZigBee.Device.AttriButeId.DoorLock); |
| | | System.Threading.Thread.Sleep(1000); |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | } |
| | | else |
| | | { |
| | | new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RectifyFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish); |
| | | } |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish); |
| | | }); |
| | | } |
| | | } |
| | | catch { } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); }); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region 公共事件处理 |
| | | /// <summary> |
| | | /// Changeds the IL ogic status. |
| | | /// 事件处理 |
| | | /// </summary> |
| | | /// <param name="logic">Logic.</param> |
| | | public void ChangedILogicStatus(ZigBee.Device.Logic logic) |
| | | private void ClickHandle(int curIndex, DateTime dtNow) |
| | | { |
| | | this.midFrameLayout.AddChidren(this.shadowRadiusFrameLayout); |
| | | this.bottomRadiusFrameLayout.RemoveAll(); |
| | | this.BottomRadiusFrameLayout(this); |
| | | var mUIPickerView = new UIPickerView() |
| | | { |
| | | X = Application.GetRealWidth(0), |
| | | Height = Application.GetRealHeight(440), |
| | | }; |
| | | this.bottomRadiusFrameLayout.AddChidren(mUIPickerView); |
| | | |
| | | if (curIndex == 0) |
| | | { |
| | | //日期 |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.Date; |
| | | } |
| | | else |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.CurrentDate; |
| | | } |
| | | |
| | | mUIPickerView.Y = Application.GetRealWidth(245); |
| | | var mList1 = new List<string>(); |
| | | var mList2 = new List<string>(); |
| | | var mList3 = new List<string>(); |
| | | var oldMonth = dtNow.Month; |
| | | |
| | | int year = dtNow.Year + 1; |
| | | int days = DateTime.DaysInMonth(dtNow.Year, dtNow.Month); |
| | | |
| | | for (int y = dtNow.Year - 9; y < dtNow.Year + 1; y++) |
| | | { |
| | | mList1.Add(y.ToString()); |
| | | } |
| | | for (int m = 1; m < 13; m++) |
| | | { |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | mList2.Add(m.ToString() + "月"); |
| | | } |
| | | else |
| | | { |
| | | mList2.Add(m.ToString()); |
| | | } |
| | | } |
| | | for (int d = 1; d < days + 1; d++) |
| | | { |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | mList3.Add(d.ToString() + "日"); |
| | | } |
| | | else |
| | | { |
| | | mList3.Add(d.ToString()); |
| | | } |
| | | } |
| | | |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | mUIPickerView.setNPicker(mList2, mList3, null); |
| | | mUIPickerView.setCurrentItems(dtNow.Month - 1, dtNow.Day - 1, 0); |
| | | curMonth = dtNow.Month; |
| | | curDay = dtNow.Day; |
| | | |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | DoorLockCommonInfo.ValidDateYear = dtNow.Year; |
| | | DoorLockCommonInfo.ValidDateMonth = curMonth; |
| | | DoorLockCommonInfo.ValidDateDay = curDay; |
| | | } |
| | | else |
| | | { |
| | | DoorLockCommonInfo.InValidDateYear = dtNow.Year; |
| | | DoorLockCommonInfo.InValidDateMonth = curMonth; |
| | | DoorLockCommonInfo.InValidDateDay = curDay; |
| | | } |
| | | var btnOk = new Button |
| | | { |
| | | X = Application.GetRealWidth(919), |
| | | Y = Application.GetRealHeight(40), |
| | | Height = Application.GetRealHeight(58), |
| | | Width = Application.GetRealWidth(101), |
| | | Text = Language.StringByID(R.MyInternationalizationString.Complete), |
| | | TextColor = Shared.Common.ZigbeeColor.Current.XMOrange, |
| | | TextSize = 14, |
| | | }; |
| | | this.bottomRadiusFrameLayout.AddChidren(btnOk); |
| | | btnOk.MouseUpEventHandler += (sender1, e1) => |
| | | { |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | DoorLockCommonInfo.ValidDateYear = dtNow.Year; |
| | | DoorLockCommonInfo.ValidDateMonth = curMonth; |
| | | DoorLockCommonInfo.ValidDateDay = curDay; |
| | | } |
| | | else |
| | | { |
| | | DoorLockCommonInfo.InValidDateYear = dtNow.Year; |
| | | DoorLockCommonInfo.InValidDateMonth = curMonth; |
| | | DoorLockCommonInfo.InValidDateDay = curDay; |
| | | } |
| | | if (timeSetAction != null) |
| | | { |
| | | timeSetAction(); |
| | | } |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | MidFrameLayoutContent(); |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | mUIPickerView.setNPicker(mList1, mList2, mList3); |
| | | mUIPickerView.setCurrentItems(9, dtNow.Month - 1, dtNow.Day - 1); |
| | | curYear = dtNow.Year; |
| | | curMonth = dtNow.Month; |
| | | curDay = dtNow.Day; |
| | | if (CurentDoorLockTime != null) |
| | | { |
| | | curHour = CurentDoorLockTime.Hour; |
| | | curMin = CurentDoorLockTime.Minute; |
| | | curSec = CurentDoorLockTime.Second; |
| | | } |
| | | else |
| | | { |
| | | curHour = dtNow.Hour; |
| | | curMin = dtNow.Minute; |
| | | curSec = dtNow.Second; |
| | | } |
| | | } |
| | | |
| | | Action dAction = () => |
| | | { |
| | | if (curMonth != oldMonth) |
| | | { |
| | | oldMonth = curMonth; |
| | | days = DateTime.DaysInMonth(curYear, curMonth); |
| | | mList3.Clear(); |
| | | |
| | | for (int d = 1; d < days + 1; d++) |
| | | { |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | mList3.Add(d.ToString() + "日"); |
| | | } |
| | | else |
| | | { |
| | | mList3.Add(d.ToString()); |
| | | } |
| | | } |
| | | |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | mUIPickerView.setNPicker(mList2, mList3, null); |
| | | mUIPickerView.setCurrentItems(curMonth - 1, curDay - 1, 0); |
| | | } |
| | | else |
| | | { |
| | | mUIPickerView.setNPicker(mList1, mList2, mList3); |
| | | mUIPickerView.setCurrentItems(9, curMonth - 1, curDay - 1); |
| | | } |
| | | } |
| | | }; |
| | | mUIPickerView.OnSelectChangeEvent += (y, m, d) => |
| | | { |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | curYear = dtNow.Year; |
| | | curMonth = y + 1; |
| | | curDay = m + 1; |
| | | } |
| | | else |
| | | { |
| | | curYear = y + 2009; |
| | | curMonth = m + 1; |
| | | curDay = d + 1; |
| | | } |
| | | dAction(); |
| | | }; |
| | | } |
| | | if (curIndex == 1) |
| | | { |
| | | //时间 |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.Time; |
| | | } |
| | | else |
| | | { |
| | | this.btnBottomTitle.TextID = R.MyInternationalizationString.CurrentTime; |
| | | } |
| | | |
| | | mUIPickerView.Y = Application.GetRealWidth(245); |
| | | var mList1 = new List<string>(); |
| | | var mList2 = new List<string>(); |
| | | for (int h = 0; h < 24; h++) |
| | | { |
| | | if (h < 10) |
| | | { |
| | | mList1.Add("0" + h.ToString()); |
| | | } |
| | | else |
| | | { |
| | | mList1.Add(h.ToString()); |
| | | } |
| | | } |
| | | for (int m = 0; m < 60; m++) |
| | | { |
| | | if (m < 10) |
| | | { |
| | | mList2.Add("0" + m.ToString()); |
| | | } |
| | | else |
| | | { |
| | | mList2.Add(m.ToString()); |
| | | } |
| | | } |
| | | mUIPickerView.setNPicker(mList1, mList2, null); |
| | | mUIPickerView.setCurrentItems(dtNow.Hour, dtNow.Minute, 0); |
| | | if (CurentDoorLockTime != null) |
| | | { |
| | | curYear = CurentDoorLockTime.Year; |
| | | curMonth = CurentDoorLockTime.Month; |
| | | curDay = CurentDoorLockTime.Day; |
| | | } |
| | | else |
| | | { |
| | | curYear = dtNow.Year; |
| | | curMonth = dtNow.Month; |
| | | curDay = dtNow.Day; |
| | | } |
| | | curHour = dtNow.Hour; |
| | | curMin = dtNow.Minute; |
| | | curSec = dtNow.Second; |
| | | mUIPickerView.OnSelectChangeEvent += (h, m, s) => |
| | | { |
| | | curHour = h; |
| | | curMin = m; |
| | | curSec = dtNow.Second; |
| | | }; |
| | | |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | DoorLockCommonInfo.ValidDateHour = curHour; |
| | | DoorLockCommonInfo.ValidDateMinute = curMin; |
| | | DoorLockCommonInfo.ValidDateSecond = curSec; |
| | | } |
| | | else |
| | | { |
| | | DoorLockCommonInfo.InValidDateHour = curHour; |
| | | DoorLockCommonInfo.InValidDateMinute = curMin; |
| | | DoorLockCommonInfo.InValidDateSecond = curSec; |
| | | } |
| | | |
| | | if (setTimeType != "DoorLockTime") |
| | | { |
| | | var btnOk = new Button |
| | | { |
| | | X = Application.GetRealWidth(919), |
| | | Y = Application.GetRealHeight(40), |
| | | Height = Application.GetRealHeight(58), |
| | | Width = Application.GetRealWidth(101), |
| | | Text = Language.StringByID(R.MyInternationalizationString.Complete), |
| | | TextColor = Shared.Common.ZigbeeColor.Current.XMOrange, |
| | | TextSize = 14, |
| | | }; |
| | | this.bottomRadiusFrameLayout.AddChidren(btnOk); |
| | | btnOk.MouseUpEventHandler += (sender1, e1) => |
| | | { |
| | | if (setTimeType == "ValidTime") |
| | | { |
| | | DoorLockCommonInfo.ValidDateHour = curHour; |
| | | DoorLockCommonInfo.ValidDateMinute = curMin; |
| | | DoorLockCommonInfo.ValidDateSecond = curSec; |
| | | } |
| | | else |
| | | { |
| | | DoorLockCommonInfo.InValidDateHour = curHour; |
| | | DoorLockCommonInfo.InValidDateMinute = curMin; |
| | | DoorLockCommonInfo.InValidDateSecond = curSec; |
| | | } |
| | | if (timeSetAction != null) |
| | | { |
| | | timeSetAction(); |
| | | } |
| | | this.shadowRadiusFrameLayout.RemoveFromParent(); |
| | | MidFrameLayoutContent(); |
| | | }; |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 移除方法 |
| | | /// <summary> |
| | | /// Changeds the IS cene status. |
| | | /// 重写移除方法 |
| | | /// </summary> |
| | | /// <param name="scene">Scene.</param> |
| | | public void ChangedISceneStatus(Scene scene) |
| | | public override void RemoveFromParent() |
| | | { |
| | | ZbGateway.StatusList.Remove(this); |
| | | base.RemoveFromParent(); |
| | | } |
| | | #endregion |
| | | } |