From d53e6af2c5f17838fa79659614b15a2a1f383399 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期五, 31 三月 2023 10:04:58 +0800
Subject: [PATCH] 1

---
 Crabtree/SmartHome/UI/SimpleControl/Phone/Schedule/AddSchedule.cs | 1213 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 681 insertions(+), 532 deletions(-)

diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Schedule/AddSchedule.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Schedule/AddSchedule.cs
index a411967..0ef1cff 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Schedule/AddSchedule.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Schedule/AddSchedule.cs
@@ -1,32 +1,69 @@
 锘縰sing System;
 using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
 using Shared.SimpleControl.Phone.Music;
 
 namespace Shared.SimpleControl.Phone
 {
     public class AddSchedule : FrameLayout
     {
+        /// <summary>
+        /// 涓婁笅婊戝姩VerticalScrolViewLayout
+        /// </summary>
         VerticalScrolViewLayout bodyView;
+        /// <summary>
+        /// 璁惧瀵硅薄鐖舵帶浠�
+        /// </summary>
         FrameLayout devicesListView;
+        /// <summary>
+        /// 瀹氫箟涓�涓洖璋冨嚱鏁�
+        /// </summary>
         Action<Timer> action;
-        List<Common> roomDeviceList = new List<Common>();
-        List<string> roomNameList = new List<string> ();
-        List<DeviceInfo> timerControlDeviceList = new List<DeviceInfo> ();
-
+        /// <summary>
+        /// 閫変腑璁惧鍒楄〃
+        /// </summary>
+        List<Fun> selectedDeviceList = new List<Fun> ();
+        /// <summary>
+        /// 鏄惁缂栬緫锛坱rue=缂栬緫锛�
+        /// </summary>
+        bool IsEdit = false;
+        /// <summary>
+        /// 瀵硅薄鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="act">杩斿洖鍑芥暟</param>
         public AddSchedule (Action<Timer> act)
         {
             action = act;
         }
+        /// <summary>
+        /// 閲嶅啓鏂规硶
+        /// </summary>
         public override void RemoveFromParent ()
         {
             UserMiddle.SettingPageView.ScrollEnabled = true;
             base.RemoveFromParent ();
         }
-
+        /// <summary>
+        /// 瀵硅薄涓诲叆鍙�
+        /// </summary>
+        /// <param name="timerTemp">褰撳墠瀵硅薄</param>
+        /// <param name="listTimer">璁℃椂鍣ㄥ垪琛�</param>
+        /// <param name="isEdit">缂栬緫鐘舵��</param>
         public void ShowPage (Timer timerTemp, List<Timer> listTimer, bool isEdit = false)
         {
+            IsEdit = isEdit;
+            selectedDeviceList.Clear ();
+            if (isEdit) {
+                for (int j = 0; j < timerTemp.controlData.actions.Count; j++) {
+                    var fun = timerTemp.controlData.actions [j];
+                    var dev = selectedDeviceList.Find ((c) => c.deviceId == fun.deviceId);
+                    if (dev == null) {
+                        selectedDeviceList.Add (fun);
+                    }
+                }
+
+            }
             UserMiddle.SettingPageView.ScrollEnabled = false;
-            timerTemp.RegionID = UserConfig.Instance.CurrentRegion.Id;
             #region topview
             var topView = new RowLayout () {
                 Y = Application.GetRealHeight (36),
@@ -98,7 +135,7 @@
                 BorderWidth = 1,
                 TextAlignment = TextAlignment.Center,
                 TextColor = SkinStyle.Current.TextColor1,
-                Text = timerTemp.TimerName
+                Text = timerTemp.timerName
             };
             nameView.AddChidren (etName);
             etName.EditorEnterAction += (obj) => {
@@ -133,72 +170,76 @@
             var btnTimelbl = new Button () {
                 X = btnTimeIcon.Right,
                 Width = Application.GetRealWidth (110),
-                Text = timerTemp.ExecutionTime,
+                Text = timerTemp.executeUtcTime,
                 TextAlignment = TextAlignment.Center,
                 TextColor = SkinStyle.Current.TextColor1,
             };
             timeView.AddChidren (btnTimelbl);
 
             btnTimelbl.MouseUpEventHandler += (timeSender, eee) => {
-                var dialog = new Dialog ();
-                var chooseTimeBodyView = new FrameLayout () {
-                };
-                dialog.AddChidren (chooseTimeBodyView);
 
-                var chooseTime = new TimeView () {
-                    Y = Application.GetRealHeight (1136 - 420 - 90),
-                    Height = Application.GetRealHeight (420),
-                    BackgroundColor = 0xFFD7D7D7,
-                    //BackgroundColor = SkinStyle.Current.ViewColor,
-                };
-                chooseTimeBodyView.AddChidren (chooseTime);
+                ShowTimePickerView (btnTimelbl);
+                return;
 
-                var bottomView = new FrameLayout () {
-                    Y = chooseTime.Bottom,
-                    Height = Application.GetRealHeight (90) + 1,
-                    BackgroundColor = 0xFFD7D7D7,
-                };
-                chooseTimeBodyView.AddChidren (bottomView);
+                //var dialog = new Dialog ();
+                //var chooseTimeBodyView = new FrameLayout () {
+                //};
+                //dialog.AddChidren (chooseTimeBodyView);
 
-                var btnCloseTime = new Button () {
-                    Y = 1,
-                    Width = Application.GetRealWidth (320),
-                    BackgroundColor = SkinStyle.Current.ViewColor,
-                    TextID = R.MyInternationalizationString.Close,
-                    TextAlignment = TextAlignment.Center,
-                    TextColor = SkinStyle.Current.TextColor1,
-                };
-                bottomView.AddChidren (btnCloseTime);
-                btnCloseTime.MouseUpEventHandler += (ddf, dddf) => {
-                    chooseTimeBodyView.RemoveAll ();
-                    chooseTimeBodyView.RemoveFromParent ();
-                    dialog.Close ();
-                };
+                //var chooseTime = new TimeView () {
+                //    Y = Application.GetRealHeight (1136 - 420 - 90),
+                //    Height = Application.GetRealHeight (420),
+                //    BackgroundColor = 0xFFD7D7D7,
+                //    //BackgroundColor = SkinStyle.Current.ViewColor,
+                //};
+                //chooseTimeBodyView.AddChidren (chooseTime);
 
-                var btnSaveTime = new Button () {
-                    X = btnCloseTime.Right + 1,
-                    Y = 1,
-                    Width = Application.GetRealWidth (320),
-                    TextID = R.MyInternationalizationString.SAVE,
-                    BackgroundColor = SkinStyle.Current.ViewColor,
-                    TextAlignment = TextAlignment.Center,
-                    TextColor = SkinStyle.Current.TextColor1,
-                };
-                bottomView.AddChidren (btnSaveTime);
-                btnSaveTime.MouseUpEventHandler += (sender3, e3) => {
-                    var chooseHour = chooseTime.Hour - timerTemp.TimeZone;
-                    var chooseTimeString = chooseTime.Hour.ToString ().PadLeft (2, '0') + ":" + chooseTime.Minute.ToString ().PadLeft (2, '0');
-                    //if (chooseTime.Hour > 12) {
-                    //    chooseTimeString = (chooseTime.Hour -12) + ":" + chooseTime.Minute + " PM";
-                    //} else {
-                    //    chooseTimeString = chooseTime.Hour + ":" + chooseTime.Minute + " AM";
-                    //}
-                    btnTimelbl.Text = chooseTimeString;
-                    dialog.Close ();
-                };
+                //var bottomView = new FrameLayout () {
+                //    Y = chooseTime.Bottom,
+                //    Height = Application.GetRealHeight (90) + 1,
+                //    BackgroundColor = 0xFFD7D7D7,
+                //};
+                //chooseTimeBodyView.AddChidren (bottomView);
+
+                //var btnCloseTime = new Button () {
+                //    Y = 1,
+                //    Width = Application.GetRealWidth (320),
+                //    BackgroundColor = SkinStyle.Current.ViewColor,
+                //    TextID = R.MyInternationalizationString.Close,
+                //    TextAlignment = TextAlignment.Center,
+                //    TextColor = SkinStyle.Current.TextColor1,
+                //};
+                //bottomView.AddChidren (btnCloseTime);
+                //btnCloseTime.MouseUpEventHandler += (ddf, dddf) => {
+                //    chooseTimeBodyView.RemoveAll ();
+                //    chooseTimeBodyView.RemoveFromParent ();
+                //    dialog.Close ();
+                //};
+
+                //var btnSaveTime = new Button () {
+                //    X = btnCloseTime.Right + 1,
+                //    Y = 1,
+                //    Width = Application.GetRealWidth (320),
+                //    TextID = R.MyInternationalizationString.SAVE,
+                //    BackgroundColor = SkinStyle.Current.ViewColor,
+                //    TextAlignment = TextAlignment.Center,
+                //    TextColor = SkinStyle.Current.TextColor1,
+                //};
+                //bottomView.AddChidren (btnSaveTime);
+                //btnSaveTime.MouseUpEventHandler += (sender3, e3) => {
+                //    // var chooseHour = chooseTime.Hour - timerTemp.TimeZone;
+                //    var chooseTimeString = chooseTime.Hour.ToString ().PadLeft (2, '0') + ":" + chooseTime.Minute.ToString ().PadLeft (2, '0');
+                //    //if (chooseTime.Hour > 12) {
+                //    //    chooseTimeString = (chooseTime.Hour -12) + ":" + chooseTime.Minute + " PM";
+                //    //} else {
+                //    //    chooseTimeString = chooseTime.Hour + ":" + chooseTime.Minute + " AM";
+                //    //}
+                //    btnTimelbl.Text = chooseTimeString;
+                //    dialog.Close ();
+                //};
 
 
-                dialog.Show ();
+                //dialog.Show ();
             };
             #endregion
 
@@ -230,7 +271,7 @@
                 Radius = (uint)Application.GetMinRealAverage (22),
                 BorderWidth = 1,
                 BorderColor = SkinStyle.Current.Transparent,
-                IsSelected = timerTemp.Periodicity.Contains ("0"),
+                IsSelected = timerTemp.whichDay.Contains (0),
                 Tag = 0,
             };
             repeatView.AddChidren (btnSunday);
@@ -249,7 +290,7 @@
                 Radius = (uint)Application.GetMinRealAverage (22),
                 BorderWidth = 1,
                 BorderColor = SkinStyle.Current.Transparent,
-                IsSelected = timerTemp.Periodicity.Contains ("1"),
+                IsSelected = timerTemp.whichDay.Contains (1),
                 Tag = 1,
             };
             repeatView.AddChidren (btnMonday);
@@ -268,7 +309,7 @@
                 Radius = (uint)Application.GetMinRealAverage (22),
                 BorderWidth = 1,
                 BorderColor = SkinStyle.Current.Transparent,
-                IsSelected = timerTemp.Periodicity.Contains ("2"),
+                IsSelected = timerTemp.whichDay.Contains (2),
                 Tag = 2,
             };
             repeatView.AddChidren (btnTuesday);
@@ -286,7 +327,7 @@
                 Radius = (uint)Application.GetMinRealAverage (22),
                 BorderWidth = 1,
                 BorderColor = SkinStyle.Current.Transparent,
-                IsSelected = timerTemp.Periodicity.Contains ("3"),
+                IsSelected = timerTemp.whichDay.Contains (3),
                 Tag = 3,
             };
             repeatView.AddChidren (btnWednesday);
@@ -304,7 +345,7 @@
                 Radius = (uint)Application.GetMinRealAverage (22),
                 BorderWidth = 1,
                 BorderColor = SkinStyle.Current.Transparent,
-                IsSelected = timerTemp.Periodicity.Contains ("4"),
+                IsSelected = timerTemp.whichDay.Contains (4),
                 Tag = 4,
             };
             repeatView.AddChidren (btnThursday);
@@ -323,7 +364,7 @@
                 Radius = (uint)Application.GetMinRealAverage (22),
                 BorderWidth = 1,
                 BorderColor = SkinStyle.Current.Transparent,
-                IsSelected = timerTemp.Periodicity.Contains ("5"),
+                IsSelected = timerTemp.whichDay.Contains (5),
                 Tag = 5,
             };
             repeatView.AddChidren (btnFriday);
@@ -342,7 +383,7 @@
                 Radius = (uint)Application.GetMinRealAverage (22),
                 BorderWidth = 1,
                 BorderColor = SkinStyle.Current.Transparent,
-                IsSelected = timerTemp.Periodicity.Contains ("6"),
+                IsSelected = timerTemp.whichDay.Contains (6),
                 Tag = 6,
             };
             repeatView.AddChidren (btnSaturday);
@@ -395,7 +436,7 @@
 
             var downSelectedButton = new Button () {
                 X = Application.GetRealWidth (310),
-                Height = Application.GetRealHeight (50),
+                Height = Application.GetRealWidth (50),
                 Width = Application.GetRealWidth (55),
                 UnSelectedImagePath = "Item/Down.png",
                 SelectedImagePath = "Item/DownSelected.png",
@@ -410,40 +451,15 @@
                 Height = Application.GetRealHeight (60),
                 TextAlignment = TextAlignment.CenterLeft,
                 TextColor = SkinStyle.Current.TextColor1,
+                Text = timerTemp.RoomName,
             };
             roomContenView.AddChidren (btnRoomChoose);
 
-            roomNameList.Add ("ALL");
-            foreach (var room in Room.Lists) {
-                if (string.IsNullOrEmpty (room.Name)) {
-                    continue;
-                }
-                roomNameList.Add (room.Name);
-                if (timerTemp.RoomName == "ALL") {
-                    roomDeviceList.AddRange (room.DeviceList);
-                } else {
-                    if(timerTemp.RoomName == room.Name) {
-                        roomDeviceList.Clear ();
-                        roomDeviceList.AddRange (room.DeviceList);
-                    }
-                }
-            }
-            if (roomNameList.Count > 0 && !isEdit) {
-                timerTemp.RoomName = roomNameList [0];
-            }
-            btnRoomChoose.Text = timerTemp.RoomName;
+
 
             #endregion
 
             #region Devices
-            try { 
-                timerControlDeviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DeviceInfo>> (timerTemp.ControlDeviceData);//devicesControlDataList
-            } catch {
-                timerControlDeviceList = null;
-            }
-
-            if (timerControlDeviceList == null)
-                timerControlDeviceList = new List<DeviceInfo> ();
 
             var devicesView = new RowLayout () {
                 Height = Application.GetRealHeight (110),
@@ -460,17 +476,18 @@
             };
             devicesView.AddChidren (btnDeviceTitle);
 
-           devicesListView = new FrameLayout () {
-                Height = Application.GetRealHeight (130 * roomDeviceList.Count),
+            devicesListView = new FrameLayout () {
+                Height = Application.GetRealHeight (130),
             };
             bodyView.AddChidren (devicesListView);
 
-            MainPage.Loading.Start ("Please wait...");
-            InitDeviceListView (roomDeviceList, timerControlDeviceList, devicesListView);
             #endregion
 
-
-            #region -----Room
+            MainPage.Loading.Start ("Please wait...");
+            SmartHome.Method mMthod = new SmartHome.Method ();
+            var devList = mMthod.GetRoomDeviceList (timerTemp.RoomName);
+            InitDeviceListView (devList);
+            #region -----Room 鐐瑰嚮浜嬩欢
             btnRoomChoose.MouseUpEventHandler += (sender, e) => {
                 Application.HideSoftInput ();
                 var roomDialog = new Dialog ();
@@ -504,11 +521,13 @@
                     BackgroundColor = SkinStyle.Current.ViewColor,
                 };
                 chooseRoomView.AddChidren (roomListView);
-
-                foreach (var roomName in roomNameList) {
+                //鑾峰彇鎴块棿鍒楄〃
+                var roomList = mMthod.GetRoomList ();
+                for (int i = 0; i < roomList.Count; i++) {
+                    var room = roomList [i];
                     var btnRoomNameChoose = new Button () {
                         Height = Application.GetRealHeight (90),
-                        Text = roomName,
+                        Text = room.Name,
                         TextColor = SkinStyle.Current.TextColor1,
                         TextAlignment = TextAlignment.Center,
                     };
@@ -521,22 +540,12 @@
                     roomListView.AddChidren (btnLine);
 
                     btnRoomNameChoose.MouseUpEventHandler += (sd, ds) => {
+                        //鍒囨崲鎴块棿娓呯┖涔嬪墠閫夋嫨鏁版嵁;
+                        selectedDeviceList.Clear ();
                         btnRoomChoose.Text = (sd as Button).Text;
-                        foreach (var room in Room.Lists) {
-                            if (string.IsNullOrEmpty (room.Name)) {
-                                continue;
-                            }
-                            if (btnRoomChoose.Text == "ALL") {
-                                roomDeviceList.AddRange (room.DeviceList);
-                            } else {
-                                if (btnRoomChoose.Text == room.Name) {
-                                    roomDeviceList.Clear ();
-                                    roomDeviceList.AddRange (room.DeviceList);
-                                }
-                            }
-                        }
-                        timerControlDeviceList = new List<DeviceInfo> ();
-                        InitDeviceListView (roomDeviceList, timerControlDeviceList, devicesListView);
+                        //鑾峰彇璁惧鍒楄〃
+                        var deviceList = mMthod.GetRoomDeviceList (btnRoomChoose.Text);
+                        InitDeviceListView (deviceList);
                         roomDialog.Close ();
                     };
                 }
@@ -562,11 +571,7 @@
             saveTimeBottomView.AddChidren (btnSaveTimerBottom);
 
             btnSaveTimerBottom.MouseUpEventHandler += (ll, kk) => {
-                //WorkingDay, //宸ヤ綔鏃�
-                //Weekend,    //鍛ㄦ湯
-                //Week,       //鎸囧畾鏄熸湡鍑�
-                //Period,     //鎸囧畾鏃堕棿娈�
-                //AppointDay,  //鎸囧畾鏃�  Periodicity
+
 
                 if (btnMonday.IsSelected == false && btnFriday.IsSelected == false && btnThursday.IsSelected == false && btnSunday.IsSelected == false && btnTuesday.IsSelected == false && btnSaturday.IsSelected == false && btnWednesday.IsSelected == false) {
                     //new Alert ("", "璇烽�夋嫨鏃ユ湡!", "Close").Show ();
@@ -588,15 +593,15 @@
                 //    return;
                 //}
 
-                if (timerControlDeviceList.Count == 0) {
+                if (selectedDeviceList.Count == 0) {
                     new Alert ("", "Please choose at least one device!", "Close").Show ();
                     return;
                 }
 
                 //鍚嶅瓧閲嶅鍒ゆ柇闄愬埗
-                var mTimer = listTimer.Find ((obj) => obj.TimerName == mTimerName);
+                var mTimer = listTimer.Find ((obj) => obj.timerName == mTimerName);
                 if (isEdit) {
-                    if (mTimer != null && mTimer.Id != timerTemp.Id) {
+                    if (mTimer != null && mTimer.id != timerTemp.id) {
                         new Alert ("", "The timer name already exists. Please change it before saving it.", "Close").Show ();
                         return;
                     }
@@ -610,9 +615,9 @@
                 //2020-02-10 鏃堕棿閲嶅鍒ゆ柇闄愬埗
                 string mExecutionTime = btnTimelbl.Text;
                 //timerTemp.ExecutionTime = btnTimelbl.Text;
-                var mTimerExecutionTime = listTimer.Find ((obj) => (obj.ExecutionTime == mExecutionTime));
+                var mTimerExecutionTime = listTimer.Find ((obj) => (obj.executeUtcTime == mExecutionTime));
                 if (isEdit) {
-                    if (mTimerExecutionTime != null && mTimerExecutionTime.Id != timerTemp.Id) {
+                    if (mTimerExecutionTime != null && mTimerExecutionTime.id != timerTemp.id) {
                         new Alert ("", "The timer time already exists. Please change it before saving it.", "Close").Show ();
                         return;
                     }
@@ -622,73 +627,101 @@
                         return;
                     }
                 }
+                // 2021-03-30 鍏堟竻绌猴紝鍐嶉噸鏂扮粺璁�
+                timerTemp.whichDay = new List<int>();
 
-                timerTemp.Periodicity = "";
                 if (btnMonday.IsSelected == true && btnFriday.IsSelected == true && btnThursday.IsSelected == true && btnSunday.IsSelected == true && btnTuesday.IsSelected == true && btnSaturday.IsSelected == true && btnWednesday.IsSelected == true) {
-                    timerTemp.TimerType = TimerType.EveryDay;
+                    timerTemp.timerType = TimerType.EveryDay;
                 } else if (btnSunday.IsSelected == true && btnSaturday.IsSelected == true && btnMonday.IsSelected == false && btnFriday.IsSelected == false && btnThursday.IsSelected == false && btnTuesday.IsSelected == false && btnWednesday.IsSelected == false) {
-                    timerTemp.TimerType = TimerType.Weekend;
+                    timerTemp.timerType = TimerType.Weekend;
                 } else if (btnSunday.IsSelected == false && btnSaturday.IsSelected == false && btnMonday.IsSelected == true && btnFriday.IsSelected == true && btnThursday.IsSelected == true && btnTuesday.IsSelected == true && btnWednesday.IsSelected) {
-                    timerTemp.TimerType = TimerType.WorkingDay;
+                    timerTemp.timerType = TimerType.WorkingDay;
                 } else {
-                    timerTemp.TimerType = TimerType.Week;
-                    timerTemp.Periodicity = "";
+                    timerTemp.timerType = TimerType.Week;
                 }
                 if (btnSunday.IsSelected) {
-                    timerTemp.Periodicity += "0,";
+                    if (!timerTemp.whichDay.Contains (0)) {
+                        timerTemp.whichDay.Add (0);
+                    }
                 }
                 if (btnSaturday.IsSelected) {
-                    timerTemp.Periodicity += "6,";
+                    if (!timerTemp.whichDay.Contains (6)) {
+                        timerTemp.whichDay.Add (6);
+                    }
                 }
                 if (btnMonday.IsSelected) {
-                    timerTemp.Periodicity += "1,";
-                }
-                if (btnFriday.IsSelected) {
-                    timerTemp.Periodicity += "5,";
-                }
-                if (btnThursday.IsSelected) {
-                    timerTemp.Periodicity += "4,";
+                    if (!timerTemp.whichDay.Contains (1)) {
+                        timerTemp.whichDay.Add (1);
+                    }
                 }
                 if (btnTuesday.IsSelected) {
-                    timerTemp.Periodicity += "2,";
+                    if (!timerTemp.whichDay.Contains (2)) {
+                        timerTemp.whichDay.Add (2);
+                    }
+
                 }
                 if (btnWednesday.IsSelected) {
-                    timerTemp.Periodicity += "3,";
+                    if (!timerTemp.whichDay.Contains (3)) {
+                        timerTemp.whichDay.Add (3);
+                    }
                 }
-
-                if (timerTemp.Periodicity [timerTemp.Periodicity.Length - 1] == ',') {
-                    timerTemp.Periodicity = timerTemp.Periodicity.Remove (timerTemp.Periodicity.Length - 1, 1);
+                if (btnThursday.IsSelected) {
+                    if (!timerTemp.whichDay.Contains (4)) {
+                        timerTemp.whichDay.Add (4);
+                    }
                 }
-
-            
-
-                timerTemp.IsStart = true;
-                if (string.IsNullOrEmpty (timerTemp.Id)) {
-                    timerTemp.Id = Guid.NewGuid ().ToString ();
+                if (btnFriday.IsSelected) {
+                    if (!timerTemp.whichDay.Contains (5)) {
+                        timerTemp.whichDay.Add (5);
+                    }
                 }
-                timerTemp.ControlDeviceData = Newtonsoft.Json.JsonConvert.SerializeObject (timerControlDeviceList);
+                //if (string.IsNullOrEmpty (timerTemp.id)) {
+                //    timerTemp.id = Guid.NewGuid ().ToString ();
+                //}
+
+                DeviceDate deviceDate = new DeviceDate ();
+                deviceDate.gatewayId = SmartHome.Send.GatewayId;
+                deviceDate.homeId = SmartHome.Send.HomeId;
+
+              
+                deviceDate.actions.AddRange (selectedDeviceList);
+                timerTemp.controlData = deviceDate;
+
                 MainPage.Loading.Start ("Saving...");
                 timerTemp.RoomName = btnRoomChoose.Text;
-                timerTemp.ExecutionTime = btnTimelbl.Text;
-                timerTemp.TimerName = etName.Text.Trim ();
+                timerTemp.executeUtcTime = btnTimelbl.Text;
+                timerTemp.timerName = etName.Text.Trim ();
                 System.Threading.Tasks.Task.Run (() => {
                     try {
-                        var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (timerTemp);
-                        ResponsePack revertObj = null;
+                        ResponsePackNew revertObj = null;
                         if (isEdit) {
-                            revertObj = MainPage.RequestHttps (API.EditTimer, requestJson);
-                        } else {   
-                            revertObj = MainPage.RequestHttps (API.AddTimer, requestJson);
+                            revertObj = SmartHome.Send.UpdateTimer (timerTemp);
+
+                        } else {
+
+
+                            revertObj = SmartHome.Send.AddTimer (timerTemp);
                         }
 
                         Application.RunOnMainThread (() => {
                             if (revertObj == null) {
                                 new Alert ("", "Unable to save data, please check the network.", "Close").Show ();
-                            } else if (revertObj.StateCode.ToUpper() == StateCode.SUCCESS) {
+                            } else if (revertObj.Code == StateCode.SUCCESS) {
+                                string id = "";
+                                if (!isEdit) {
+                                    var jObject = JObject.Parse (revertObj.Data.ToString ());
+                                    id = jObject ["id"].ToString ();
+                                    timerTemp.id = id;
+                                }
                                 this.RemoveFromParent ();
                                 action (timerTemp);
+
+                            } else if (revertObj.Code == "10107") {
+                                new Alert ("", "Timer name already exists.", "Close").Show ();
                             } else {
-                                ShowErrorInfo (revertObj.StateCode);
+                                //鎻愮ず閿欒
+                                IMessageCommon.Current.ShowErrorInfoAlter (revertObj.Code);
+
                             }
                         });
                     } catch (Exception ex) {
@@ -703,250 +736,187 @@
 
         }
 
-        
-
         /// <summary>
-        //(1)Success 鍒欒皟鐢ㄦ鎺ュ彛鎴愬姛
-        //(2)NoRecord 浣忓畢鏈粦瀹氱綉鍏筹紒
-        //(3)NoExist 浣忓畢涓嶅瓨鍦紒
-        //(4)Exist 鐢熸垚鐨凣uid宸插瓨鍦紒
+        /// 鑷畾涔塗imePickerView
+        /// 2021-03-24
         /// </summary>
-        void ShowErrorInfo (string stateCodeStr)
+        void ShowTimePickerView (Button btnTimelbl)
         {
-            string mes = "";
-            if (stateCodeStr == "NoRecord") {
-                // 浣忓畢鏈粦瀹氱綉鍏筹紒
-                mes = ErrorCode.HomeNoRecord;
-            } else if (stateCodeStr == "NoExist") {
-                //浣忓畢涓嶅瓨鍦紒
-                mes = ErrorCode.HomeNoExist;
-            } else if (stateCodeStr == "Exist") {
-                //鐢熸垚鐨凣uid宸插瓨鍦紒
-                mes = ErrorCode.GuidExist;
-            }  else if (stateCodeStr == ErrorCode.NetworkError) {
-                mes = ErrorCode.NetworkError;
-            } else {
-                mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr;
+            var chooseTimeString = "00:00";
+            var dialog = new Dialog ();
+            var chooseTimeBodyView = new FrameLayout () {
+            };
+            dialog.AddChidren (chooseTimeBodyView);
+
+            var timeView = new FrameLayout () {
+                Y = Application.GetRealHeight (1136 - 420 - 90),
+                Height = Application.GetRealHeight (420),
+                BackgroundColor = SkinStyle.Current.ViewColor,
+            };
+            chooseTimeBodyView.AddChidren (timeView);
+
+            var chooseTime = new UIPickerView () {
+                Height = Application.GetRealHeight (400),
+                BackgroundColor = SkinStyle.Current.Transparent,
+                Gravity = Gravity.CenterVertical
+            };
+            timeView.AddChidren (chooseTime);
+
+            var bottomView = new FrameLayout () {
+                Y = timeView.Bottom,
+                Height = Application.GetRealHeight (90) + 1,
+                BackgroundColor = 0xFFD7D7D7,
+            };
+            chooseTimeBodyView.AddChidren (bottomView);
+
+            var btnCloseTime = new Button () {
+                Y = 1,
+                Width = Application.GetRealWidth (320),
+                BackgroundColor = SkinStyle.Current.ViewColor,
+                TextID = R.MyInternationalizationString.Close,
+                TextAlignment = TextAlignment.Center,
+                TextColor = SkinStyle.Current.TextColor1,
+            };
+            bottomView.AddChidren (btnCloseTime);
+            btnCloseTime.MouseUpEventHandler += (ddf, dddf) => {
+                chooseTimeBodyView.RemoveAll ();
+                chooseTimeBodyView.RemoveFromParent ();
+                dialog.Close ();
+            };
+
+            var btnSaveTime = new Button () {
+                X = btnCloseTime.Right + 1,
+                Y = 1,
+                Width = Application.GetRealWidth (320),
+                TextID = R.MyInternationalizationString.SAVE,
+                BackgroundColor = SkinStyle.Current.ViewColor,
+                TextAlignment = TextAlignment.Center,
+                TextColor = SkinStyle.Current.TextColor1,
+            };
+            bottomView.AddChidren (btnSaveTime);
+            btnSaveTime.MouseUpEventHandler += (sender3, e3) => {
+                btnTimelbl.Text = chooseTimeString;
+                dialog.Close ();
+            };
+
+            var nowDateTime = DateTime.Now;
+            var hour = nowDateTime.Hour;
+            //hourStr
+            var hourStr = hour.ToString();
+            if (hour < 10) {
+                hourStr = "0" + hour;
+            }
+
+            var minute = nowDateTime.Minute;
+            //minuteStr
+            var minuteStr = minute.ToString ();
+            if (minute < 10) {
+                minuteStr = "0" + minute;
+            }
+            var hourList = new List<string> ();
+            for (int i = 0; i < 24; i++) {
+                if (i < 10) {
+                    var a = "0" + i.ToString ();
+                    hourList.Add (a);
+                } else {
+                    hourList.Add (i.ToString ());
+                }
 
             }
-            if (!string.IsNullOrEmpty (mes)) {
-                //Application.RunOnMainThread (() => {
-                new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                //});
+
+            var minuteList = new List<string> ();
+            for (int i = 0; i < 60; i++) {
+                if (i < 10) {
+                    var a = "0" + i.ToString ();
+                    minuteList.Add (a);
+                } else {
+                    minuteList.Add (i.ToString ());
+                }
+
             }
+
+            chooseTime.setNPicker (hourList, minuteList, null);
+            chooseTime.setCurrentItems (hour, minute, 0);
+            chooseTimeString = hourStr + ":" + minuteStr;
+
+            //string selectde = "";
+            chooseTime.OnSelectChangeEvent += (s1, s2, s3) => {
+                var hourV = hourList [s1];
+                var minuteV = minuteList [s2];
+                chooseTimeString = hourV + ":" + minuteV;
+
+            };
+
+            dialog.Show ();
 
         }
 
-        private static void InitDeviceListView (List<Common> roomDeviceList, List<DeviceInfo> timerControlDeviceList, FrameLayout devicesListView)
+        /// <summary>
+        /// 鍔犺浇鎴块棿璁惧鍒楄〃鐣岄潰
+        /// </summary>
+        /// <param name="deviceList">鎴块棿璁惧鍒楄〃</param>
+        private void InitDeviceListView (List<Function> deviceList)
         {
             devicesListView.RemoveAll ();
-            
+            //鎴块棿璁惧鍒楄〃
+            devicesListView.Height = Application.GetRealHeight (130 * deviceList.Count);
             System.Threading.Tasks.Task.Run (() => {
                 try {
-                    int iniIndex = 0;
-                    for (int i = 0; i < timerControlDeviceList.Count;) {
-                        if (timerControlDeviceList [i] == null) {
-                            timerControlDeviceList.RemoveAt (i);
-                        } else {
-                            i++;
-                        }
-                    }
+                    Application.RunOnMainThread (() => {
+                        try {
+                            string value = "";
+                            for (int i = 0; i < deviceList.Count; i++) {
+                                var device = deviceList [i];
+                                var deviceRowView = new RowLayout () {
+                                    Y = Application.GetRealHeight (130 * i),
+                                    Radius = 1,
+                                    BorderColor = SkinStyle.Current.Transparent,
+                                    BorderWidth = (uint)Application.GetMinRealAverage (5),
+                                    Height = Application.GetRealHeight (110),
+                                    Tag = device,
+                                };
+                                devicesListView.AddChidren (deviceRowView);
 
-#if __IOS__
+                                var btnChoose = new Button () {
+                                    Width = Application.GetRealWidth (60),
+                                    Height = Application.GetRealWidth (60),
+                                    X = Application.GetRealWidth (40),
+                                    Gravity = Gravity.CenterVertical,
+                                    UnSelectedImagePath = "CrabtreeAdd/Choose.png",
+                                    SelectedImagePath = "CrabtreeAdd/ChooseOn.png",
+                                    Tag = device,
+                                };
+                                deviceRowView.AddChidren (btnChoose);
 
+                                Button btnDeviceName = new Button () {
+                                    Width = Application.GetRealWidth (342),
+                                    Height = Application.GetRealHeight (70),
+                                    Text = device.name,
+                                    TextAlignment = TextAlignment.CenterLeft,
+                                    X = btnChoose.Right + Application.GetRealWidth (10),
+                                    Y = Application.GetRealHeight (20),
+                                    SelectedTextColor = SkinStyle.Current.TextColor1,
+                                    TextColor = SkinStyle.Current.TextColor1,
+                                };
+                                deviceRowView.AddChidren (btnDeviceName);
+                                Button tempSwitch = new Button {
+                                    Width = Application.GetRealWidth (90),
+                                    Height = Application.GetRealWidth (53),
+                                    X = Application.GetRealWidth (640 - 90 - 20),
+                                    Gravity = Gravity.CenterVertical,
+                                    UnSelectedImagePath = "Item/SwitchClose.png",
+                                    SelectedImagePath = "Item/SwitchOpen.png",
+                                    Tag = device,
+                                };
+                                deviceRowView.AddChidren (tempSwitch);
 
-#else
-                  //鍒锋柊devicesListView 楂樺害
-                    devicesListView.Height = Application.GetRealHeight (130 * roomDeviceList.Count);
-#endif
-
-                    foreach (var deviceCommon2 in roomDeviceList) {
-                        if (deviceCommon2 == null)
-                            continue;
-                        var deviceCommon = new DeviceInfo () {
-                            DevicePath = deviceCommon2.SavePath, DeviceType = (int)deviceCommon2.Type, SubnetID = deviceCommon2.SubnetID,
-                            DeviceID = deviceCommon2.DeviceID, LoopID = deviceCommon2.LoopID, Command = (int)Command.SetSingleLight,
-                            Type = deviceCommon2.Type,Name = deviceCommon2.Name,SavePath = deviceCommon2.SavePath,
-                        };
-                        if (deviceCommon.Type == DeviceType.LightDimming || deviceCommon.Type == DeviceType.FanModule ||
-                            deviceCommon.Type == DeviceType.LightSwitch || deviceCommon.Type == DeviceType.LightEnergySwitch || deviceCommon.Type == DeviceType.LightEnergySocket || deviceCommon.Type == DeviceType.LightSwitchSocket ||
-                            deviceCommon.Type == DeviceType.CurtainModel || deviceCommon.Type == DeviceType.CurtainRoller || deviceCommon.Type == DeviceType.CurtainTrietex) { 
-                            Application.RunOnMainThread (() => {
-                                try {
-                                    DeviceInfo timerControlDevice = null;
-                                    try {
-                                        timerControlDevice = timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath);
-                                    } catch { }
-                                    if (timerControlDevice != null)
-                                        deviceCommon.SendBytes = timerControlDevice.SendBytes;
-                                    var DeviceRowView = new RowLayout () {
-                                        Y = Application.GetRealHeight (130 * iniIndex),
-                                        Radius = 1,
-                                        BorderColor = SkinStyle.Current.Transparent,
-                                        BorderWidth = (uint)Application.GetMinRealAverage (5),
-                                        Height = Application.GetRealHeight (110),
-                                        Tag = deviceCommon.Type + "_" + deviceCommon.CommonLoopID
-                                    };
-                                    devicesListView.AddChidren (DeviceRowView);
-                                    iniIndex++;
-
-                                    var btnChoose = new Button () {
-                                        Width = Application.GetRealHeight (60),
-                                        Height = Application.GetRealHeight (60),
-                                        X = Application.GetRealWidth (40),
-                                        Gravity = Gravity.CenterVertical,
-                                        UnSelectedImagePath = "CrabtreeAdd/Choose.png",
-                                        SelectedImagePath = "CrabtreeAdd/ChooseOn.png",
-                                        IsSelected = timerControlDevice != null,
-                                        //Tag = deviceFilePath
-                                    };
-                                    DeviceRowView.AddChidren (btnChoose);
-
-                                    Button btnDeviceName = new Button () {
-                                        Width = Application.GetRealWidth (342),
-                                        Height = Application.GetRealHeight (70),
-                                        Text = deviceCommon.Name,
-                                        TextAlignment = TextAlignment.CenterLeft,
-                                        X = btnChoose.Right + Application.GetRealWidth (10),
-                                        Y = Application.GetRealHeight (20),
-                                        SelectedTextColor = SkinStyle.Current.TextColor1,
-                                        TextColor = SkinStyle.Current.TextColor1,
-                                    };
-                                    DeviceRowView.AddChidren (btnDeviceName);
-                                    Button tempSwitch = new Button () {
-                                        Width = Application.GetMinRealAverage (90),
-                                        Height = Application.GetMinRealAverage (53),
-                                        X = Application.GetRealWidth (640 - 90 - 20),
-                                        Gravity = Gravity.CenterVertical,
-                                        UnSelectedImagePath = "Item/SwitchClose.png",
-                                        SelectedImagePath = "Item/SwitchOpen.png",
-                                        Tag = deviceCommon.CommonLoopID,
-                                    };
-                                    DeviceRowView.AddChidren (tempSwitch);
-
-
-                                    if (deviceCommon.Type == DeviceType.FanModule) {
-                                        #region 椋庢墖
-                                        tempSwitch.RemoveFromParent ();
-                                        //FanModule fanModule = deviceCommon as FanModule;
-
-                                        DeviceRowView.Height = Application.GetRealHeight (130);
-                                        btnChoose.Y = Application.GetRealHeight (5);
-                                        btnDeviceName.Y = Application.GetRealHeight (0);
-
-                                        var btnFanLevel = new Button () {
-                                            X = btnChoose.X + Application.GetRealWidth (10),
-                                            Y = btnChoose.Bottom,
-                                            Width = Application.GetRealWidth (75),
-                                            Height = Application.GetRealHeight (45),
-                                            TextColor = SkinStyle.Current.TextColor1,
-                                            SelectedTextColor = SkinStyle.Current.TextColor1,
-                                            Text = "OFF",
-                                            TextAlignment = TextAlignment.CenterLeft,
-                                        };
-                                        DeviceRowView.AddChidren (btnFanLevel);
-
-                                        var wi = Application.GetRealWidth (480 / 8);
-                                        for (int i = 0; i < 9; i++) {
-                                            var btnFanLevelTip = new Button () {
-                                                X = btnFanLevel.Right + wi * i - Application.GetRealWidth (0),
-                                                Y = btnFanLevel.Y - Application.GetRealHeight (5),
-                                                Width = wi,
-                                                Height = Application.GetRealHeight (27),
-                                                TextAlignment = TextAlignment.TopLeft,
-                                                Text = i.ToString (),
-                                                TextColor = SkinStyle.Current.TextColor1,
-                                                TextSize = 12,
-                                            };
-                                            DeviceRowView.AddChidren (btnFanLevelTip);
-                                            if (i == 0) {
-                                                btnFanLevelTip.Text = "OFF";
-                                                btnFanLevelTip.TextSize = 11;
-                                            }
-                                        }
-
-                                        var fanLevel = new HorizontalSeekBar () {
-                                            X = btnFanLevel.Right,
-                                            Y = btnFanLevel.Y + Application.GetRealHeight (10),
-                                            Width = Application.GetRealWidth (492),
-                                            Height = Application.GetRealHeight (45),
-                                            ThumbColor = SkinStyle.Current.ThumbColor,
-                                            ProgressColor = SkinStyle.Current.SelectedColor,
-                                            ThumbRadius = Application.GetRealWidth (3),
-                                            Max = 8,
-                                            Progress = 2,// (int)(deviceCommon.SendBytes[1]),
-
-                                        };
-                                        DeviceRowView.AddChidren (fanLevel);
-                                        fanLevel.ProgressChanged += (sender, e) => {
-                                            try {
-                                                if (!btnChoose.IsSelected) {
-                                                    btnChoose.IsSelected = true;
-                                                }
-                                                deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)(fanLevel.Progress) };
-                                                if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                    timerControlDeviceList.Add (deviceCommon);
-                                                } else {
-                                                    timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)fanLevel.Progress };
-                                                }
-                                                if (e == 0) {
-                                                    btnFanLevel.Text = "OFF";
-                                                } else {
-                                                    btnFanLevel.Text = "S" + e.ToString ();
-                                                }
-                                            } catch (Exception ex) {
-                                                Utlis.WriteLine ("ss1: " + ex.Message);
-                                            }
-                                        };
-
-                                        if (timerControlDevice != null) {
-                                            if (timerControlDevice.SendBytes [1] == 0) {
-                                                btnFanLevel.Text = "OFF";
-                                            } else {
-                                                btnFanLevel.Text = "S" + timerControlDevice.SendBytes [1].ToString ();
-                                            }
-                                            fanLevel.Progress = timerControlDevice.SendBytes [1];
-                                        }
-
-                                        fanLevel.MouseDownEventHandler += (sss, ff) => {
-                                            try {
-                                                timerControlDevice = timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath);
-                                                if (!btnChoose.IsSelected) {
-                                                    btnChoose.IsSelected = true;
-                                                }
-                                                if (timerControlDevice == null) {
-                                                    deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)(fanLevel.Progress) };
-                                                    if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                        timerControlDeviceList.Add (deviceCommon);
-                                                    } else {
-                                                        timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)fanLevel.Progress };
-                                                    }
-                                                }
-                                                timerControlDevice.SendBytes [1] = (byte)fanLevel.Progress;
-                                            } catch { }
-                                        };
-
-                                        btnChoose.MouseUpEventHandler += (dds, ddss) => {
-                                            btnChoose.IsSelected = !btnChoose.IsSelected;
-                                            if (btnChoose.IsSelected) {
-                                                deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)(fanLevel.Progress) };
-                                                if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                    timerControlDeviceList.Add (deviceCommon);
-                                                } else {
-                                                    timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)fanLevel.Progress };
-                                                }
-                                            } else {
-                                                timerControlDeviceList.Remove (timerControlDeviceList.Find ((obj) => obj.DeviceType == (int)deviceCommon.Type &&
-                                                                                                            obj.SubnetID == deviceCommon.SubnetID && obj.DeviceID == deviceCommon.DeviceID && obj.LoopID == deviceCommon.LoopID));
-                                            }
-                                        };
-
-                                        #endregion
-                                    } else if (deviceCommon.Type == DeviceType.LightDimming || deviceCommon.Type == DeviceType.LightDALI) {
+                                switch (device.spk) {
+                                //DeviceType.LightDALI
+                                case SPK.LightDimming: {
                                         #region 璋冨厜鍣ˋ
                                         tempSwitch.RemoveFromParent ();
 
-                                        DeviceRowView.Height = Application.GetRealHeight (130);
+                                        deviceRowView.Height = Application.GetRealHeight (130);
                                         btnChoose.Y = Application.GetRealHeight (20);
                                         btnDeviceName.Y = Application.GetRealHeight (15);
 
@@ -960,7 +930,7 @@
                                             Text = "OFF",
                                             TextAlignment = TextAlignment.CenterLeft,
                                         };
-                                        DeviceRowView.AddChidren (btnLevel);
+                                        deviceRowView.AddChidren (btnLevel);
 
                                         var levelBar = new HorizontalSeekBar () {
                                             X = btnLevel.Right,
@@ -972,123 +942,111 @@
                                             ThumbRadius = 6,
                                             Max = 100,
                                         };
-                                        DeviceRowView.AddChidren (levelBar);
+                                        deviceRowView.AddChidren (levelBar);
+
                                         levelBar.ProgressChanged += (sender, e) => {
                                             if (!btnChoose.IsSelected) {
                                                 btnChoose.IsSelected = true;
-                                            }
-                                            deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)levelBar.Progress };
-                                            //timerControlDevice = deviceCommon;
-                                            if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                timerControlDeviceList.Add (deviceCommon);
-                                            } else {
-                                                timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)levelBar.Progress };
                                             }
                                             if (e == 0) {
                                                 btnLevel.Text = "OFF";
                                             } else {
                                                 btnLevel.Text = e.ToString () + "%";
                                             }
+                                            value = e.ToString ();
+                                            DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected);
                                         };
 
+                                        btnChoose.MouseUpEventHandler += (dds, ddss) => {
+                                            btnChoose.IsSelected = !btnChoose.IsSelected;
+                                            DeviceDateFun (btnChoose.Tag as Function, "0", btnChoose.IsSelected);
+                                        };
 
-                                        if (timerControlDevice != null) {
-                                            if (timerControlDevice.SendBytes [1] == 0) {
-                                                btnLevel.Text = "OFF";
-                                            } else {
-                                                btnLevel.Text = timerControlDevice.SendBytes [1].ToString () + "%";
-                                            }
-                                            levelBar.Progress = timerControlDevice.SendBytes [1];
-                                        }
-
-                                        levelBar.MouseDownEventHandler += (sss, ff) => {
+                                        if (IsEdit) {
                                             try {
-                                                timerControlDevice = timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath);
-                                                if (!btnChoose.IsSelected) {
-                                                    btnChoose.IsSelected = true;
-                                                }
-                                                if (timerControlDevice == null) {
-                                                    deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)(levelBar.Progress) };
-                                                    if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                        timerControlDeviceList.Add (deviceCommon);
-                                                    } else {
-                                                        timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)levelBar.Progress };
+                                                var dev = selectedDeviceList.Find ((c) => c.deviceId == Int64.Parse (device.deviceId));
+                                                if (dev != null) {
+                                                    if (!btnChoose.IsSelected) {
+                                                        btnChoose.IsSelected = true;
+                                                    }
+                                                    for (int a = 0; a < dev.attributes.Count; a++) {
+                                                        var fundev = dev.attributes [a];
+                                                        if (fundev.key == "brightness") {
+                                                            if (fundev.value == "0") {
+                                                                btnLevel.Text = "OFF";
+                                                            } else {
+                                                                btnLevel.Text = fundev.value + "%";
+                                                            }
+                                                            levelBar.Progress = int.Parse (fundev.value);
+                                                        }
                                                     }
                                                 }
                                             } catch { }
-                                        };
-                                        btnChoose.MouseUpEventHandler += (dds, ddss) => {
-                                            btnChoose.IsSelected = !btnChoose.IsSelected;
-                                            if (btnChoose.IsSelected) {
-                                                deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)(levelBar.Progress) };
-                                                if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                    timerControlDeviceList.Add (deviceCommon);
-                                                } else {
-                                                    timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)levelBar.Progress };
-                                                }
-                                            } else {
-                                                timerControlDeviceList.Remove (timerControlDeviceList.Find ((obj) => obj.DeviceType == (int)deviceCommon.Type &&
-                                                                                                            obj.SubnetID == deviceCommon.SubnetID && obj.DeviceID == deviceCommon.DeviceID && obj.LoopID == deviceCommon.LoopID));
-                                            }
-                                        };
+                                        }
                                         #endregion
-                                    } else if (deviceCommon.Type == DeviceType.LightSwitch || deviceCommon.Type == DeviceType.LightEnergySwitch || deviceCommon.Type == DeviceType.LightEnergySocket || deviceCommon.Type == DeviceType.LightSwitchSocket) {
+                                    }
+                                    break;
+                                //DeviceType.LightEnergySwitch
+                                //DeviceType.LightEnergySocket
+                                //DeviceType.LightSwitchSocket
+                                case SPK.ElectricSocket:
+                                case SPK.LightSwitch: {
                                         #region 缁х數鍣�
-                                        //LightSwitch switchLight = deviceCommon as LightSwitch;
-                                        //tempSwitch.IsSelected = switchLight.CurrentBrightness == 100 ? true : false;
-
                                         tempSwitch.MouseUpEventHandler += (sender3, e3) => {
                                             tempSwitch.IsSelected = !tempSwitch.IsSelected;
-                                            var CurrentBrightness = 0;
+
                                             if (tempSwitch.IsSelected) {
-                                                CurrentBrightness = 100;
+                                                value = "on";
                                             } else {
-                                                CurrentBrightness = 0;
+                                                value = "off";
                                             }
                                             if (!btnChoose.IsSelected) {
                                                 btnChoose.IsSelected = true;
                                             }
-                                            deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                            if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                timerControlDeviceList.Add (deviceCommon);
-                                            } else {
-                                                timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                            }
+                                            DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected);
+
                                         };
-                                        if (timerControlDevice != null) {
-                                            try {
-                                                tempSwitch.IsSelected = timerControlDevice.SendBytes [1] == 100;
-                                            } catch { }
-                                        }
+
                                         btnChoose.MouseUpEventHandler += (dds, ddss) => {
                                             btnChoose.IsSelected = !btnChoose.IsSelected;
-                                            if (btnChoose.IsSelected) {
-                                                var CurrentBrightness = 0;
-                                                if (tempSwitch.IsSelected) {
-                                                    CurrentBrightness = 100;
-                                                } else {
-                                                    CurrentBrightness = 0;
-                                                }
-                                                deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                                if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null)
-                                                    timerControlDeviceList.Add (deviceCommon);
-                                                else {
-                                                    timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                                }
+                                            if (tempSwitch.IsSelected) {
+                                                value = "on";
                                             } else {
-                                                timerControlDeviceList.Remove (timerControlDeviceList.Find ((obj) => obj.DeviceType == (int)deviceCommon.Type &&
-                                                                                                            obj.SubnetID == deviceCommon.SubnetID && obj.DeviceID == deviceCommon.DeviceID && obj.LoopID == deviceCommon.LoopID));
+                                                value = "off";
                                             }
+                                            DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected);
+
                                         };
+
+                                        if (IsEdit) {
+                                            try {
+                                                var dev = selectedDeviceList.Find ((c) => c.deviceId == Int64.Parse (device.deviceId));
+                                                if (dev != null) {
+                                                    if (!btnChoose.IsSelected) {
+                                                        btnChoose.IsSelected = true;
+                                                    }
+                                                    for (int a = 0; a < dev.attributes.Count; a++) {
+                                                        var fundev = dev.attributes [a];
+                                                        if (fundev.value == "on") {
+                                                            tempSwitch.IsSelected = true;
+                                                        } else {
+                                                            tempSwitch.IsSelected = false;
+                                                        }
+                                                    }
+                                                }
+                                            } catch { }
+                                        }
                                         #endregion
-                                    } else if (deviceCommon.Type == DeviceType.CurtainModel || deviceCommon.Type == DeviceType.CurtainTrietex || deviceCommon.Type == DeviceType.CurtainRoller) {
+                                    }
+                                    break;
+                                case SPK.CurtainRoller:
+                                case SPK.CurtainTrietex:
+                                case SPK.CurtainSwitch: {
                                         #region 绐楀笜
-                                        //2020-07-09 鍒锋柊鎺у埗鎿嶄綔鐮�
-                                        deviceCommon.Command = (int)Command.UpdataCurtainModelStutas;
                                         tempSwitch.RemoveFromParent ();
                                         var tempSwitch1 = new Button () {
-                                            Width = Application.GetMinRealAverage (90),
-                                            Height = Application.GetMinRealAverage (53),
+                                            Width = Application.GetRealWidth (90),
+                                            Height = Application.GetRealWidth (53),
                                             X = Application.GetRealWidth (640 - 90 - 20),
                                             Radius = 5,
                                             BorderColor = SkinStyle.Current.Transparent,
@@ -1098,90 +1056,174 @@
                                             BackgroundColor = SkinStyle.Current.ButtonColor,
                                             SelectedBackgroundColor = SkinStyle.Current.SelectedColor,
                                             Text = "CLOSE",
-                                            Tag = deviceCommon.CommonLoopID,
+                                            Tag = device,
                                         };
-                                        DeviceRowView.AddChidren (tempSwitch1);
-
+                                        deviceRowView.AddChidren (tempSwitch1);
 
                                         tempSwitch1.MouseUpEventHandler += (sender3, e3) => {
                                             tempSwitch1.IsSelected = !tempSwitch1.IsSelected;
-
-                                            var CurrentBrightness = 0;
                                             if (tempSwitch1.IsSelected) {
-                                                CurrentBrightness = 1;
+                                                value = "on";
                                                 tempSwitch1.Text = "OPEN";
                                                 tempSwitch1.BackgroundColor = SkinStyle.Current.SelectedColor;
                                             } else {
-                                                CurrentBrightness = 2;
+                                                value = "off";
                                                 tempSwitch1.Text = "CLOSE";
                                                 tempSwitch1.BackgroundColor = SkinStyle.Current.ButtonColor;
                                             }
                                             if (!btnChoose.IsSelected) {
                                                 btnChoose.IsSelected = true;
                                             }
-                                            deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                            //2020-07-09
-                                            DeviceInfo mDeviceInfo = timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath);
-                                            if (mDeviceInfo == null) {
-                                                timerControlDeviceList.Add (deviceCommon);
-                                            } else {
-                                                mDeviceInfo.Command = (int)Command.UpdataCurtainModelStutas;
-                                                mDeviceInfo.SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                            }
-                                        };
+                                            DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected);
 
-                                        if (timerControlDevice != null) {
-                                            try {
-                                                if (timerControlDevice.SendBytes [1] == 1) {
-                                                    tempSwitch1.Text = "OPEN";
-                                                    tempSwitch1.IsSelected = true;
-                                                    tempSwitch1.BackgroundColor = SkinStyle.Current.SelectedColor;
-                                                } else {
-                                                    tempSwitch1.Text = "CLOSE";
-                                                    tempSwitch1.IsSelected = false;
-                                                    tempSwitch1.BackgroundColor = SkinStyle.Current.ButtonColor;
-                                                }
-                                            } catch { }
-                                        }
+
+                                        };
 
                                         btnChoose.MouseUpEventHandler += (dds, ddss) => {
                                             btnChoose.IsSelected = !btnChoose.IsSelected;
-                                            if (btnChoose.IsSelected) {
-                                                var CurrentBrightness = 0;
-                                                if (tempSwitch.IsSelected) {
-                                                    CurrentBrightness = 1;
-                                                } else {
-                                                    CurrentBrightness = 2;
-                                                }
-                                                deviceCommon.SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-
-                                                //if (timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath) == null) {
-                                                //    timerControlDeviceList.Add (deviceCommon);
-                                                //} else {
-                                                //    timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath).SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                                //}
-
-                                                //2020-07-09
-                                                DeviceInfo mDeviceInfo = timerControlDeviceList.Find ((obj) => obj.DevicePath == deviceCommon.SavePath);
-                                                if (mDeviceInfo == null) {
-                                                    timerControlDeviceList.Add (deviceCommon);
-                                                } else {
-                                                    mDeviceInfo.Command = (int)Command.UpdataCurtainModelStutas;
-                                                    mDeviceInfo.SendBytes = new byte [] { deviceCommon.LoopID, (byte)CurrentBrightness };
-                                                }
+                                            if (tempSwitch1.IsSelected) {
+                                                value = "on";
                                             } else {
-                                                timerControlDeviceList.Remove (timerControlDeviceList.Find ((obj) => obj.DeviceType == (int)deviceCommon.Type &&
-                                                                                                            obj.SubnetID == deviceCommon.SubnetID && obj.DeviceID == deviceCommon.DeviceID && obj.LoopID == deviceCommon.LoopID));
+                                                value = "off";
                                             }
+                                            DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected);
                                         };
+
+                                        if (IsEdit) {
+                                            try {
+                                                var dev = selectedDeviceList.Find ((c) => c.deviceId == Int64.Parse (device.deviceId));
+                                                if (dev != null) {
+                                                    if (!btnChoose.IsSelected) {
+                                                        btnChoose.IsSelected = true;
+                                                    }
+                                                    for (int a = 0; a < dev.attributes.Count; a++) {
+                                                        var fundev = dev.attributes [a];
+                                                        if (fundev.value == "on") {
+                                                            tempSwitch1.IsSelected = true;
+                                                            tempSwitch1.Text = "OPEN";
+                                                        } else {
+                                                            tempSwitch1.IsSelected = false;
+                                                            tempSwitch1.Text = "CLOSE";
+                                                        }
+                                                    }
+                                                }
+                                            } catch { }
+                                        }
                                         #endregion
                                     }
-                                }catch(Exception ex) {
-                                    Utlis.WriteLine ("AddSchedule error : "+ ex.Message);
+                                    break;
+                                case SPK.ElectricFan: {
+                                        #region 椋庢墖
+                                        tempSwitch.RemoveFromParent ();
+                                        deviceRowView.Height = Application.GetRealHeight (130);
+                                        btnChoose.Y = Application.GetRealHeight (5);
+                                        btnDeviceName.Y = Application.GetRealHeight (0);
+
+                                        var btnFanLevel = new Button () {
+                                            X = btnChoose.X + Application.GetRealWidth (10),
+                                            Y = btnChoose.Bottom,
+                                            Width = Application.GetRealWidth (75),
+                                            Height = Application.GetRealHeight (45),
+                                            TextColor = SkinStyle.Current.TextColor1,
+                                            SelectedTextColor = SkinStyle.Current.TextColor1,
+                                            Text = "OFF",
+                                            //Text = "",
+                                            TextAlignment = TextAlignment.CenterLeft,
+                                        };
+                                        deviceRowView.AddChidren (btnFanLevel);
+
+                                        var wi = Application.GetRealWidth (480 / 8);
+                                        for (int a = 0; a < 9; a++) {
+                                            var btnFanLevelTip = new Button () {
+                                                X = btnFanLevel.Right + wi * a - Application.GetRealWidth (0),
+                                                Y = btnFanLevel.Y - Application.GetRealHeight (5),
+                                                Width = wi,
+                                                Height = Application.GetRealHeight (27),
+                                                TextAlignment = TextAlignment.TopLeft,
+                                                Text = a.ToString (),
+                                                TextColor = SkinStyle.Current.TextColor1,
+                                                TextSize = 12,
+                                            };
+                                            deviceRowView.AddChidren (btnFanLevelTip);
+                                            if (a == 0) {
+                                                btnFanLevelTip.Text = "OFF";
+                                                btnFanLevelTip.TextSize = 11;
+                                            }
+                                        }
+                                        var fanLevel = new HorizontalSeekBar () {
+                                            X = btnFanLevel.Right,
+                                            Y = btnFanLevel.Y + Application.GetRealHeight (10),
+                                            Width = Application.GetRealWidth (492),
+                                            Height = Application.GetRealHeight (45),
+                                            ThumbColor = SkinStyle.Current.ThumbColor,
+                                            ProgressColor = SkinStyle.Current.SelectedColor,
+                                            ThumbRadius = Application.GetRealWidth (3),
+                                            Max = 8,
+                                            Progress = 2,
+
+                                        };
+                                        deviceRowView.AddChidren (fanLevel);
+                                        //鍒氬紑濮嬮粯璁ゆ樉绀�1妗�
+                                        value = "2";
+                                        SetFanButtonState (btnFanLevel, value);
+
+                                        fanLevel.ProgressChanged += (sender, e) => {
+                                            if (!btnChoose.IsSelected) {
+                                                btnChoose.IsSelected = true;
+                                            }
+                                            value = e.ToString ();
+                                            //if (value == "0") {
+                                            //    btnFanLevel.Text = "OFF";
+                                            //} else {
+                                            //    btnFanLevel.Text = value;
+                                            //}
+
+                                            SetFanButtonState (btnFanLevel, value);
+
+                                            DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected);
+                                        };
+
+                                        btnChoose.MouseUpEventHandler += (dds, ddss) => {
+                                            btnChoose.IsSelected = !btnChoose.IsSelected;
+                                            DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected);
+                                        };
+                                        if (IsEdit) {
+                                            try {
+                                                var dev = selectedDeviceList.Find ((c) => c.deviceId == Int64.Parse (device.deviceId));
+                                                if (dev != null) {
+                                                    if (!btnChoose.IsSelected) {
+                                                        btnChoose.IsSelected = true;
+                                                    }
+                                                    for (int a = 0; a < dev.attributes.Count; a++) {
+                                                        var fundev = dev.attributes [a];
+                                                        if (fundev.key == "fan_speed_percent") {
+                                                            fanLevel.Progress = int.Parse (fundev.value);
+                                                            //if (fundev.value == "0") {
+                                                            //    btnFanLevel.Text = "OFF";
+                                                            //} else {
+                                                            //    btnFanLevel.Text = fundev.value;
+                                                            //}
+                                                            SetFanButtonState (btnFanLevel, fundev.value);
+                                                        }
+                                                    }
+                                                }
+                                            } catch { }
+                                        }
+                                        #endregion
+                                    }
+                                    break;
                                 }
-                            });
+
+
+
+
+                            }
+                        } catch (Exception ex) {
+                            Utlis.WriteLine ("AddSchedule error : " + ex.Message);
                         }
-                    }
+                    });
+
+
                 } catch (Exception ex) {
                     Utlis.WriteLine (ex.Message);
                 } finally {
@@ -1191,5 +1233,112 @@
                 }
             });
         }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="btnFanLevel"></param>
+        /// <param name="value"></param>
+        void SetFanButtonState (Button btnFanLevel, string value)
+        {
+            if (btnFanLevel == null) return;
+
+            if (value == "0") {
+                btnFanLevel.Text = "OFF";
+            } else {
+                btnFanLevel.Text = value;
+            }
+        }
+
+        /// <summary>
+        /// 璁惧鏁版嵁杞崲
+        /// </summary>
+        /// <param name="function"></param>
+        /// <param name="value">寮�鍏崇姸鎬佸��</param>
+        /// <param name="isSelected">鍒ゆ柇鎺т欢鐐瑰嚮鐘舵��</param>
+        public void DeviceDateFun (Function function, string value, bool isSelected)
+        {
+            string keyValue = "";
+            switch (function.spk) {
+            case SPK.CurtainTrietex:
+            case SPK.CurtainRoller:
+            case SPK.LightSwitch:
+            case SPK.CurtainSwitch:
+            case SPK.ElectricSocket: {
+                    keyValue = "on_off";
+                }
+                break;
+            case SPK.LightDimming: {
+                    keyValue = "brightness";
+                }
+                break;
+            case SPK.ElectricFan: {
+                    keyValue = "fan_speed_percent";
+                }
+                break;
+
+            }
+            Fun fun = new Fun ();
+            fun.deviceId = Int64.Parse (function.deviceId);
+            fun.spk = function.spk;
+            fun.attributes.Add (new Attributes { key = keyValue, value = value });
+            fun.bus.addresses = function.bus.addresses;
+            fun.bus.loopId = function.bus.loopId;
+            AddDeviceList (fun, isSelected);
+        }
+        /// <summary>
+        /// 娣诲姞璁惧鏁版嵁鍒板垪琛ㄩ噷
+        /// </summary>
+        /// <param name="fun"></param>
+        /// <param name="isSelected">鍒ゆ柇鎺т欢鐐瑰嚮鐘舵��</param>
+        public void AddDeviceList (Fun fun, bool isSelected)
+        {
+
+            switch (fun.spk) {
+            case SPK.LightDimming: {
+                    //璋冨厜鍋氫簡涓�涓壒娈婂鐞嗭紱
+                    if (fun.attributes.Count == 1) {
+                        var dic = fun.attributes [0];
+                        if (dic.key == "brightness") {
+                            Attributes attributes = new Attributes ();
+                            attributes.key = "on_off";
+                            if (dic.value == "0") {
+                                attributes.value = "off";
+                            } else {
+                                attributes.value = "on";
+                            }
+                            fun.attributes.Add (attributes);
+                        }
+
+                    }
+                    break;
+                }
+            case SPK.ElectricFan: {
+                    if (fun.attributes.Count == 1) {
+                        var dic = fun.attributes [0];
+                        if (dic.key == "fan_speed_percent") {
+                            Attributes attributes = new Attributes ();
+                            attributes.key = "on_off";
+                            if (dic.value == "0") {
+                                attributes.value = "off";
+                            } else {
+                                attributes.value = "on";
+                            }
+                            fun.attributes.Add (attributes);
+                        }
+                    }
+                }
+                break;
+            }
+            var device = selectedDeviceList.Find ((dev) => dev.deviceId == fun.deviceId);
+            if (device != null) {
+                selectedDeviceList.Remove (device);
+            }
+            if (isSelected) {
+                selectedDeviceList.Add (fun);
+            }
+        }
+
+
     }
 }

--
Gitblit v1.8.0