From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期五, 10 七月 2020 10:52:13 +0800
Subject: [PATCH] 2020-07-10-01

---
 ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs | 1095 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 965 insertions(+), 130 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
index cbcbdf3..5c95989 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using System.Collections.Generic;
 using Shared.Common;
 using ZigBee.Device;
 
@@ -6,6 +7,50 @@
 {
     public class TimeSettignPage : DoorLockCommonLayout, ZigBee.Common.IStatus
     {
+        #region 涓婃姤鏁版嵁澶勭悊
+        /// <summary>
+        /// 澶勭悊鍙樺寲浜嬩欢
+        /// </summary>
+        /// <param name="common"></param>
+        /// <param name="typeTag"></param>
+        public void DeviceInfoChange(CommonDevice tempDevice, string typeTag)
+        {
+            if (typeTag == "DeviceStatusReport" && tempDevice != null)
+            {
+                if (tempDevice != null)
+                {
+                    if (tempDevice.DeviceEpoint == doorLock.DeviceEpoint
+                                      && tempDevice.DeviceAddr == doorLock.DeviceAddr)
+                    {
+                        if (tempDevice.DeviceStatusReport != null && tempDevice.DeviceStatusReport.AttriBute != null)
+                        {
+                            var dataReport = tempDevice.DeviceStatusReport.AttriBute[0];
+                            if (tempDevice.DeviceStatusReport.CluterID == 10 && dataReport.AttributeId == 0)
+                            {
+                                CurentDoorLockTime = DoorLockCommonInfo.GetLocalTime(dataReport.AttriButeData);
+                                Application.RunOnMainThread(() =>
+                                {
+                                    waitGetDoorLockTime = DateTime.MaxValue;
+                                    textDisplayDate.Text = CurentDoorLockTime.Year + Language.StringByID(R.MyInternationalizationString.Year) + CurentDoorLockTime.Month + Language.StringByID(R.MyInternationalizationString.Month) + CurentDoorLockTime.Day + Language.StringByID(R.MyInternationalizationString.Day);
+                                    if (CurentDoorLockTime.Minute < 10)
+                                    {
+                                        textDisplayTime.Text = CurentDoorLockTime.Hour + ":" + "0" + CurentDoorLockTime.Minute;
+                                    }
+                                    else
+                                    {
+                                        textDisplayTime.Text = CurentDoorLockTime.Hour + ":" + CurentDoorLockTime.Minute;
+                                    }
+                                    CommonPage.Loading.Hide();
+                                });
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        #endregion
+
+        #region 鏋勯�犲嚱鏁�
         /// <summary>
         /// 鏋勯�犲嚱鏁�
         /// </summary>
@@ -15,17 +60,69 @@
             this.doorLock = doorLock;
             setTimeType = timeType;
             BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor;
+            //璇婚棬閿佹椂鍖烘椂闂�
+            DoorLockCommonInfo.GetDoorLockZoneTime();
             ZigBee.Device.ZbGateway.StatusList.Add(this);
         }
-
-        #region 鈼� 鍙橀噺鐢虫槑__________________________
-        ZigBee.Device.DoorLock doorLock;
-        string setTimeType = "";
-        Action<string> dateAction; //鏃ユ湡閫氱煡 
-        Action<string> timeAction; //鏃堕棿閫氱煡
         #endregion
 
-        /// <summary>
+        #region UI鍐呭
+        #region  鍙橀噺鐢虫槑
+        /// <summary>
+        /// 褰撳墠闂ㄩ攣
+        /// </summary>
+        ZigBee.Device.DoorLock doorLock;
+        /// <summary>
+        /// 璁剧疆鏃堕棿绫诲瀷
+        /// </summary>
+        string setTimeType = "";
+        /// <summary>
+        /// 褰撳墠闂ㄩ攣鏃堕棿
+        /// </summary>
+        DateTime CurentDoorLockTime;
+        /// <summary>
+        /// 鏄剧ず鏃ユ湡鐨勬枃鏈�
+        /// </summary>
+        Button textDisplayDate;
+        /// <summary>
+        /// 鏄剧ず鏃堕棿鐨勬枃鏈�
+        /// </summary>
+        Button textDisplayTime;
+        /// <summary>
+        /// 鏈湴鍙橀噺鈥滃勾鈥�
+        /// </summary>
+        int curYear = 0;
+        /// <summary>
+        /// 鏈湴鍙橀噺鈥滄湀鈥�
+        /// </summary>
+        int curMonth = 0;
+        /// <summary>
+        /// 鏈湴鍙橀噺鈥滄棩鈥�
+        /// </summary>
+        int curDay = 0;
+        /// <summary>
+        /// 鏈湴鍙橀噺鈥滄椂鈥�
+        /// </summary>
+        int curHour = 0;
+        /// <summary>
+        /// 鏈湴鍙橀噺鈥滃垎鈥�
+        /// </summary>
+        int curMin = 0;
+        /// <summary>
+        /// 鏈湴鍙橀噺鈥滅鈥�
+        /// </summary>
+        int curSec = 0;
+        /// <summary>
+        /// 璁剧疆鏃堕棿鐨凙ction
+        /// </summary>
+        public Action timeSetAction;
+        /// <summary>
+        /// 绛夊緟鑾峰彇闂ㄩ攣鏃剁殑绛夊緟鏃堕棿
+        /// </summary>
+        DateTime waitGetDoorLockTime = DateTime.MaxValue;
+        #endregion
+
+        /// <summary>
         /// UI鏄剧ず 
         /// </summary>
         public void Show()
@@ -34,196 +131,934 @@
             {
                 this.TopFrameLayout(this, Language.StringByID(R.MyInternationalizationString.ValidTime));
             }
-            else
+            else if (setTimeType == "InValidTime")
             {
                 this.TopFrameLayout(this, Language.StringByID(R.MyInternationalizationString.InValidTime));
-
+            }
+            else
+            {
+                this.TopFrameLayout(this, Language.StringByID(R.MyInternationalizationString.DoorLockTime));
             }
 
             EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
             {
-                RemoveFromParent();
+                this.RemoveFromParent();
             };
             this.btnBack.MouseUpEventHandler += eHandlerBack;
             this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
             this.MidFrameLayout(this);
-
             MidFrameLayoutContent();
         }
 
+        /// <summary>
+        /// 涓儴甯冨眬
+        /// </summary>
         public void MidFrameLayoutContent()
         {
-            var MidTopFrameLayout = new FrameLayout()
+            if (setTimeType == "DoorLockTime")
             {
-                BackgroundColor = ZigbeeColor.Current.XMWhite,
-            };
-            this.midFrameLayout.AddChidren(MidTopFrameLayout);
+                ReadDoorlockTime();
+            }
 
+            var zoneFrameLayout = new FrameLayout()
+            {
+                BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite,
+            };
+            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 = DoorLockCommonInfo.DoorlockZoneTime;// DateTime.Now;
             for (int i = 0; i < 2; i++)
             {
+                #region MidTopFrameLayout UI
+                var rowLayout = new FrameLayout()
+                {
+                    Height = Application.GetRealHeight(127 + 23),
+                    BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite,
+                };
+                midTopFrameLayout.AddChidren(rowLayout);
+
                 var btnDateTime = new Button()
                 {
-                    Width = Application.GetRealWidth(743 - 300),
+                    Width = Application.GetRealWidth(560),
                     Height = Application.GetRealHeight(58),
                     X = Application.GetRealWidth(58),
                     TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                     TextAlignment = TextAlignment.CenterLeft,
                     TextSize = 12,
                 };
-                MidTopFrameLayout.AddChidren(btnDateTime);
+                rowLayout.AddChidren(btnDateTime);
 
-                var textDisplay = new Button()
+                var textDisplayDateFrameLayout = new FrameLayout()
                 {
-                    Width = Application.GetRealWidth(300),
+                    Width = Application.GetRealWidth(333),
                     Height = Application.GetRealHeight(58),
-                    X = Application.GetRealWidth(580),
-                    TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
-                    TextAlignment = TextAlignment.CenterRight,
-                    TextSize = 12,
+                    X = Application.GetRealWidth(620),
                 };
-                MidTopFrameLayout.AddChidren(textDisplay);
+                rowLayout.AddChidren(textDisplayDateFrameLayout);
+
+                var btnNextFrameLayout = new FrameLayout()
+                {
+                    Width = Application.GetRealWidth(116),
+                    Height = Application.GetRealHeight(58),
+                    X = Application.GetRealWidth(956),
+                };
+                rowLayout.AddChidren(btnNextFrameLayout);
 
                 var btnNext = new Button()
                 {
                     Width = Application.GetRealWidth(58),
                     Height = Application.GetRealHeight(58),
-                    X = Application.GetRealWidth(956),
-                    Y = Application.GetRealHeight(204),
-                    //BackgroundColor = ZigbeeColor.Current.XMOrange,
-                    UnSelectedImagePath = "Item/Next.png",
+                    UnSelectedImagePath = "Item/RightNext.png",
                     SelectedImagePath = "Item/Down.png",
                 };
-                MidTopFrameLayout.AddChidren(btnNext);
+                btnNextFrameLayout.AddChidren(btnNext);
 
                 var btnLine = new FrameLayout()
                 {
                     Width = Application.GetRealWidth(965),
-                    Height = Application.GetRealHeight(5),
+                    Height = 1,
                     X = Application.GetRealWidth(58),
                     BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine,
-
                 };
-                MidTopFrameLayout.AddChidren(btnLine);
+                midTopFrameLayout.AddChidren(btnLine);
+                #endregion
 
+                #region 鏄剧ず澶勭悊
                 if (i == 0)
                 {
-                    btnDateTime.Y = Application.GetRealHeight(50);
-                    btnDateTime.Text = Language.StringByID(R.MyInternationalizationString.Date);
+                    btnDateTime.Y = textDisplayDateFrameLayout.Y = btnNextFrameLayout.Y = Application.GetRealHeight(50);
                     btnLine.Y = Application.GetRealHeight(23 + 127);
-                    textDisplay.Text = "8鏈�6鏃�";
-                    textDisplay.Y = btnNext.Y = btnDateTime.Y;
 
-                    EventHandler<MouseEventArgs> stattimeclick = (sender1, e1) =>
+                    textDisplayDate = new Button()
                     {
-                        var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
-                        this.midFrameLayout.AddChidren(flMain);
-
-                        flMain.MouseUpEventHandler += (sender11, e11) =>
-                        {
-                            flMain.RemoveFromParent();
-                        };
-
-                        var timeview = new DateView
-                        {
-                            Y = Application.GetRealHeight(1920 - 800),
-                            Height = Application.GetRealHeight(800),
-                            BackgroundColor = ZigbeeColor.Current.LogicTimeViewColor,
-                            Width = Application.GetRealWidth(1080),
-                        };
-                        flMain.AddChidren(timeview);
-
-                        var btnSave = new Button
-                        {
-                            Y = Application.GetRealHeight(1920 - 800),
-                            Width = Application.GetRealWidth(200),
-                            Height = Application.GetRealHeight(150),
-                            Text = "瀹屾垚",
-                            TextColor = ZigbeeColor.Current.LogicTimeViewSaveButton,
-                            X = Application.GetRealWidth(1080 - 200),
-                        };
-                        flMain.AddChidren(btnSave);
+                        TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
+                        TextAlignment = TextAlignment.CenterRight,
+                        TextSize = 12,
+                        Text = "_" + Language.StringByID(R.MyInternationalizationString.Year) + "_" + Language.StringByID(R.MyInternationalizationString.Month) + "_" + Language.StringByID(R.MyInternationalizationString.Day),
                     };
-                    btnNext.MouseDownEventHandler += stattimeclick;
+                    textDisplayDateFrameLayout.AddChidren(textDisplayDate);
+
+                    if (setTimeType != "DoorLockTime")
+                    {
+                        btnDateTime.Text = Language.StringByID(R.MyInternationalizationString.Date);
+                        if (setTimeType == "ValidTime")
+                        {
+                            textDisplayDate.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMonth + Language.StringByID(R.MyInternationalizationString.Month) + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateDay + Language.StringByID(R.MyInternationalizationString.Day);
+                        }
+                        else if (setTimeType == "InValidTime")
+                        {
+                            textDisplayDate.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth + Language.StringByID(R.MyInternationalizationString.Month) + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateDay + Language.StringByID(R.MyInternationalizationString.Day);
+                        }
+                    }
+                    else
+                    {
+                        btnDateTime.Text = Language.StringByID(R.MyInternationalizationString.CurrentDate);
+                    }
                 }
                 else if (i == 1)
                 {
-                    btnDateTime.Y = Application.GetRealHeight(200);
-                    btnDateTime.Text = Language.StringByID(R.MyInternationalizationString.Time);
+                    rowLayout.Y = 1 + Application.GetRealHeight(150);
+                    btnDateTime.Y = textDisplayDateFrameLayout.Y = btnNextFrameLayout.Y = Application.GetRealHeight(50);
                     btnLine.Y = Application.GetRealHeight(40 + 127 + 127);
-                    textDisplay.Text = "12 : 00";
-                    textDisplay.Y = btnNext.Y = btnDateTime.Y;
-
-                    EventHandler<MouseEventArgs> endtimeclick = (sender, e) =>
+                    textDisplayTime = new Button()
                     {
-                        var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
-                        this.midFrameLayout.AddChidren(flMain);
-                        flMain.MouseUpEventHandler += (sender11, e11) =>
-                        {
-                            flMain.RemoveFromParent();
-                        };
-
-                        var timeview = new TimeView()
-                        {
-                            Y = Application.GetRealHeight(1920 - 800),
-                            Height = Application.GetRealHeight(800),
-                            BackgroundColor = ZigbeeColor.Current.LogicTimeViewColor,
-                            Width = Application.GetRealWidth(1080),
-                        };
-                        flMain.AddChidren(timeview);
-
-                        var btnSave = new Button
-                        {
-                            Y = Application.GetRealHeight(1920 - 800),
-                            Width = Application.GetRealWidth(200),
-                            Height = Application.GetRealHeight(150),
-                            Text = "瀹屾垚",
-                            TextColor = ZigbeeColor.Current.LogicTimeViewSaveButton,
-                            X = Application.GetRealWidth(1080 - 200),
-                        };
-                        flMain.AddChidren(btnSave);
-
-                        btnSave.MouseUpEventHandler += (sender2, e2) =>
-                        {
-                            flMain.RemoveFromParent();
-                        };
+                        TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
+                        TextAlignment = TextAlignment.CenterRight,
+                        TextSize = 12,
+                        Text = "00:00",
                     };
+                    textDisplayDateFrameLayout.AddChidren(textDisplayTime);
 
-                    btnNext.MouseDownEventHandler += endtimeclick;
+                    if (setTimeType != "DoorLockTime")
+                    {
+                        btnDateTime.Text = Language.StringByID(R.MyInternationalizationString.Time);
+                        if (setTimeType == "ValidTime")
+                        {
+                            if (Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMinute < 10)
+                            {
+                                textDisplayTime.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateHour + ":" + "0" + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMinute;
+                            }
+                            else
+                            {
+                                textDisplayTime.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateHour + ":" + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMinute;
+                            }
+                        }
+                        else if (setTimeType == "InValidTime")
+                        {
+                            if (Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMinute < 10)
+                            {
+                                textDisplayTime.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateHour + ":" + "0" + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMinute;
+                            }
+                            else
+                            {
+                                textDisplayTime.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateHour + ":" + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMinute;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        btnDateTime.Text = Language.StringByID(R.MyInternationalizationString.CurrentTime);
+                    }
+                    btnLine.Visible = false;
+                }
+                #endregion 
+
+                #region 浜嬩欢澶勭悊
+                int curIndex = i;
+                EventHandler<MouseEventArgs> hander = (sender, e) =>
+                {
+                    ClickHandle(curIndex, dtNow);
+                };
+                rowLayout.MouseDownEventHandler += hander;
+                btnDateTime.MouseDownEventHandler += hander;
+                textDisplayDateFrameLayout.MouseDownEventHandler += hander;
+                btnNextFrameLayout.MouseDownEventHandler += hander;
+                btnNext.MouseDownEventHandler += hander;
+
+                if (curIndex == 0)
+                {
+                    textDisplayDate.MouseDownEventHandler += hander;
+                }
+                else
+                {
+                    textDisplayTime.MouseDownEventHandler += hander;
+                }
+                #endregion 
+            }
+
+            btnCancel.MouseUpEventHandler += (sender1, e1) =>
+            {
+                this.shadowRadiusFrameLayout.RemoveFromParent();
+            };
+            btnFinish.MouseUpEventHandler += (sender1, e1) =>
+            {
+                if (setTimeType == "DoorLockTime")
+                {
+                    DoorLockTimeFinishHandle();
+                }
+            };
+            this.shadowRadiusFrameLayout.MouseUpEventHandler += (sender1, e1) =>
+            {
+                this.shadowRadiusFrameLayout.RemoveFromParent();
+            };
+            if (setTimeType == "DoorLockTime")
+            {
+                if (CurentDoorLockTime != null && CurentDoorLockTime.Year != 1)
+                {
+                    waitGetDoorLockTime = DateTime.MaxValue;
+                    CommonPage.Loading.Hide();
+                }
+            }
+        }
+        #endregion
+
+        #region 鏃跺尯 
+        /// <summary>
+        /// 娣诲姞銆愰棬閿佹椂闂淬�戣锛堥棬閿佷笓鐢級
+        /// </summary>
+        /// <param name="zoneFrameLayout"></param>
+        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) =>
+            {
+                //1銆佸叆缃戝悗鍏堣幏鍙栭棬閿佸湪缃戝叧涓殑鏃跺尯鏃堕棿
+                var curDateTime = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockZoneTime();
+                //2銆佸皢鏃堕棿璁剧疆鍒扮綉鍏充腑
+                var dateTime = new DateTime(curDateTime.Year, curDateTime.Month, curDateTime.Day, curDateTime.Hour, curDateTime.Minute, curDateTime.Second);
+                var setTimestamp = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetUnixTimeStamp(dateTime);
+                doorLock.RectifyDoorLockTimeAsync(int.Parse(setTimestamp));
+            };
+
+            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 = "";
+            int num = 0;
+            var gwZone = DoorLockCommonInfo.CaculateTimeZone(Common.Config.Instance.Home.Longitude);
+            if (int.Parse(gwZone) != 0)
+            {
+                num = int.Parse(gwZone.Substring(1));
+            }
+            if (gwZone.Contains('+'))
+            {
+                if (num == 0)
+                {
+                    zoneText = Language.StringByID(R.MyInternationalizationString.CurZoneText0);
+                }
+                else
+                {
+                    zoneText = EastZoneList(num - 1);
+                }
+            }
+            else if (gwZone.Contains('-'))
+            {
+                zoneText = WestZoneList(num - 1);
+            }
+            else
+            {
+                zoneText = Language.StringByID(R.MyInternationalizationString.CurZoneText0);
+            }
+            return zoneText;
+        }
+
+        /// <summary>
+        /// 杞崲涓滃尯
+        /// </summary>
+        /// <param name="x"></param>
+        /// <returns></returns>
+        private string EastZoneList(int x)
+        {
+            var numString = new string[]
+            {
+                Language.StringByID(R.MyInternationalizationString.CurZoneText1),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText2),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText3),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText4),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText5),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText6),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText7),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText8),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText9),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText10),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText11),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText12)
+            };
+            var strChnNamesList = new List<string>(numString);
+            return strChnNamesList[x];
+        }
+
+        /// <summary>
+        /// 杞崲瑗垮尯
+        /// </summary>
+        /// <param name="x"></param>
+        /// <returns></returns>
+        private string WestZoneList(int x)
+        {
+            var numString = new string[]
+            {
+                Language.StringByID(R.MyInternationalizationString.WestZoneText1),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText2),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText3),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText4),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText5),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText6),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText7),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText8),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText9),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText10),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText11),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText12)
+            };
+            var strChnNamesList = new List<string>(numString);
+            return strChnNamesList[x];
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏃跺尯
+        /// <para>currentLon:"+"涓轰笢鍖猴紝鈥�-鈥濅负瑗垮尯</para>
+        /// </summary>
+        /// <param name="currentLon"></param>
+        /// <returns></returns>
+        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>
+        /// <param name="unix"></param>
+        /// <returns></returns>
+        public static int GetLocalTime(int unix)
+        {
+            var gwZone = CaculateTimeZone(Common.Config.Instance.Home.Longitude);
+            var data = unix + 8 * 3600;
+
+            return data;
+        }
+
+        #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 = 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>
+        /// 浜嬩欢澶勭悊 
+        /// </summary>
+        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")
+                        {
+                            string nowValue1 = DateTime.Now.ToString("yyyyMMdd");
+                            string nowValue2 = dtNow.Year.ToString() + curMonth.ToString().PadLeft(2, '0') + curDay.ToString().PadLeft(2, '0');
+                            if (nowValue1.CompareTo(nowValue2) == 1)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoLessThanCurrentTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+                            //妫�鏌ユ椂闂�
+                            var flage = this.CheckValidTime(dtNow.Year, curMonth, curDay,
+                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
+                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
+                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoMoreThanInValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+                            DoorLockCommonInfo.ValidDateYear = dtNow.Year;
+                            DoorLockCommonInfo.ValidDateMonth = curMonth;
+                            DoorLockCommonInfo.ValidDateDay = curDay;
+                        }
+                        else
+                        {
+                            //妫�鏌ユ椂闂�
+                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
+                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
+                                dtNow.Year, curMonth, curDay,
+                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.InvalidTimeNoLessThanValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+
+                            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
+                    {
+                        switch (y)
+                        {
+                            case 0:
+                                curYear = dtNow.Year - 9;
+                                break;
+                            case 1:
+                                curYear = dtNow.Year - 8;
+                                break;
+                            case 2:
+                                curYear = dtNow.Year - 7;
+                                break;
+                            case 3:
+                                curYear = dtNow.Year - 6;
+                                break;
+                            case 4:
+                                curYear = dtNow.Year - 5;
+                                break;
+                            case 5:
+                                curYear = dtNow.Year - 4;
+                                break;
+                            case 6:
+                                curYear = dtNow.Year - 3;
+                                break;
+                            case 7:
+                                curYear = dtNow.Year - 2;
+                                break;
+                            case 8:
+                                curYear = dtNow.Year - 1;
+                                break;
+                            default:
+                                curYear = dtNow.Year;
+                                break;
+                        }
+                        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")
+                        {
+                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
+                                curHour, curMin, curSec,
+                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
+                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoMoreThanInValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+
+                            DoorLockCommonInfo.ValidDateHour = curHour;
+                            DoorLockCommonInfo.ValidDateMinute = curMin;
+                            DoorLockCommonInfo.ValidDateSecond = curSec;
+                        }
+                        else
+                        {
+                            //妫�鏌ユ椂闂�
+                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
+                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
+                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
+                                curHour, curMin, curSec);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.InvalidTimeNoLessThanValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+
+                            DoorLockCommonInfo.InValidDateHour = curHour;
+                            DoorLockCommonInfo.InValidDateMinute = curMin;
+                            DoorLockCommonInfo.InValidDateSecond = curSec;
+                        }
+                        if (timeSetAction != null)
+                        {
+                            timeSetAction();
+                        }
+                        this.shadowRadiusFrameLayout.RemoveFromParent();
+                        MidFrameLayoutContent();
+                    };
                 }
             }
         }
 
-        #region 鈼� 鎺ュ彛瀹炵幇__________________________
-        /// <summary>
-        /// 澶勭悊鍙樺寲浜嬩欢 --灏嗗純鐢� 鏀圭敤DeviceInfoChange()
-        /// </summary>
-        /// <returns>The changed.</returns>
-        /// <param name="common">Common.</param>
-        public void Changed(CommonDevice common)
-        {
+        /// <summary>
+        /// 妫�鏌ユ椂闂�
+        /// </summary>
+        /// <returns></returns>
+        private bool CheckValidTime(int validYear, int validMoth, int validDay, int validHour, int validMinute, int validSecond
+            , int inValidYear, int inValidMoth, int inValidDay, int inValidHour, int inValidMinute, int inValidSecond)
+        {
+            //鐢熸晥鏃堕棿
+            string nowValue1 = validYear.ToString()
+            + validMoth.ToString().PadLeft(2, '0')
+            + validDay.ToString().PadLeft(2, '0')
+            + validHour.ToString().PadLeft(2, '0')
+            + validMinute.ToString().PadLeft(2, '0')
+            + validSecond.ToString().PadLeft(2, '0');
+            //澶辨晥鏃堕棿
+            string nowValue2 = inValidYear.ToString()
+            + inValidMoth.ToString().PadLeft(2, '0')
+            + inValidDay.ToString().PadLeft(2, '0')
+            + inValidHour.ToString().PadLeft(2, '0')
+            + inValidMinute.ToString().PadLeft(2, '0')
+            + inValidSecond.ToString().PadLeft(2, '0');
+            var aaaa = nowValue1.CompareTo(nowValue2);
+            if (nowValue1.CompareTo(nowValue2) == 1)
+            {
+                return false;
+            }
+            return true;
+        }
 
-        }
+        #endregion
+
+        #region 绉婚櫎鏂规硶
         /// <summary>
-        /// 澶勭悊鍙樺寲浜嬩欢
+        /// 閲嶅啓绉婚櫎鏂规硶
         /// </summary>
-        /// <param name="common"></param>
-        /// <param name="typeTag"></param>
-        public void DeviceInfoChange(CommonDevice common, string typeTag)
+        public override void RemoveFromParent()
         {
-        }
-        /// <summary>
-        /// Changeds the IL ogic status.
-        /// </summary>
-        /// <param name="logic">Logic.</param>
-        public void ChangedILogicStatus(ZigBee.Device.Logic logic)
-        {
-        }
-        /// <summary>
-        /// Changeds the IS cene status.
-        /// </summary>
-        /// <param name="scene">Scene.</param>
-        public void ChangedISceneStatus(Scene scene)
-        {
+            ZbGateway.StatusList.Remove(this);
+            base.RemoveFromParent();
         }
         #endregion
     }

--
Gitblit v1.8.0