using System; using System.Collections.Generic; using Newtonsoft.Json.Linq; using Shared.SimpleControl.Phone.Music; namespace Shared.SimpleControl.Phone { public class AddSchedule : FrameLayout { /// /// 上下滑动VerticalScrolViewLayout /// VerticalScrolViewLayout bodyView; /// /// 设备对象父控件 /// FrameLayout devicesListView; /// /// 定义一个回调函数 /// Action action; /// /// 选中设备列表 /// List selectedDeviceList = new List (); /// /// 是否编辑(true=编辑) /// bool IsEdit = false; /// /// 对象构造函数 /// /// 返回函数 public AddSchedule (Action act) { action = act; } /// /// 重写方法 /// public override void RemoveFromParent () { UserMiddle.SettingPageView.ScrollEnabled = true; base.RemoveFromParent (); } /// /// 对象主入口 /// /// 当前对象 /// 计时器列表 /// 编辑状态 public void ShowPage (Timer timerTemp, List 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; #region topview var topView = new RowLayout () { Y = Application.GetRealHeight (36), Height = Application.GetRealHeight (90), Width = Application.GetRealWidth (640), BackgroundColor = SkinStyle.Current.MainColor }; AddChidren (topView); var title = new Button () { TextAlignment = TextAlignment.Center, TextID = R.MyInternationalizationString.Schedule, TextColor = SkinStyle.Current.TextColor1, TextSize = 19, }; topView.AddChidren (title); var back = new Button () { Height = Application.GetRealHeight (100), Width = Application.GetRealWidth (85), UnSelectedImagePath = "Item/Back.png", SelectedImagePath = "Item/BackSelected.png", }; topView.AddChidren (back); back.MouseUpEventHandler += (sender, e) => { (Parent as PageLayout).PageIndex -= 1; }; var logo = new Button () { Width = Application.GetRealWidth (154), Height = Application.GetRealHeight (90), X = Application.GetRealWidth (486), UnSelectedImagePath = MainPage.LogoString, }; topView.AddChidren (logo); #endregion bodyView = new VerticalScrolViewLayout () { Y = topView.Bottom, Height = Application.GetRealHeight (1136 - 126 - 90), BackgroundColor = SkinStyle.Current.ViewColor }; AddChidren (bodyView); #region ---------nameView var nameView = new RowLayout () { Height = Application.GetRealHeight (110), }; bodyView.AddChidren (nameView); var btnName = new Button () { X = Application.GetRealWidth (50), Y = Application.GetRealHeight (20), Width = Application.GetRealWidth (160), Height = Application.GetRealHeight (70), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor1, TextID = R.MyInternationalizationString.LableName, }; nameView.AddChidren (btnName); var etName = new EditText () { X = btnName.Right, Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth (380), Height = Application.GetRealHeight (60), Radius = 1, BorderColor = SkinStyle.Current.BorderColor, BorderWidth = 1, TextAlignment = TextAlignment.Center, TextColor = SkinStyle.Current.TextColor1, Text = timerTemp.timerName }; nameView.AddChidren (etName); etName.EditorEnterAction += (obj) => { Application.HideSoftInput (); }; #endregion #region --------time var timeView = new RowLayout () { Height = Application.GetRealHeight (110), }; bodyView.AddChidren (timeView); var btnTime = new Button () { X = Application.GetRealWidth (50), Width = Application.GetRealWidth (160), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor1, TextID = R.MyInternationalizationString.Time, }; timeView.AddChidren (btnTime); var btnTimeIcon = new Button () { X = btnTime.Right + Application.GetRealWidth (190), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth (75), Height = Application.GetRealWidth (75), UnSelectedImagePath = "CrabtreeAdd/Timer.png", }; timeView.AddChidren (btnTimeIcon); var btnTimelbl = new Button () { X = btnTimeIcon.Right, Width = Application.GetRealWidth (110), Text = timerTemp.executeUtcTime, TextAlignment = TextAlignment.Center, TextColor = SkinStyle.Current.TextColor1, }; timeView.AddChidren (btnTimelbl); btnTimelbl.MouseUpEventHandler += (timeSender, eee) => { ShowTimePickerView (btnTimelbl); return; //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); //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 (); }; #endregion #region --------Reapeat var repeatView = new RowLayout () { Height = Application.GetRealHeight (110), }; bodyView.AddChidren (repeatView); var btnRepeat = new Button () { X = Application.GetRealWidth (50), Width = Application.GetRealWidth (160), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor1, TextID = R.MyInternationalizationString.Repeat, }; repeatView.AddChidren (btnRepeat); var btnSunday = new Button () { X = btnRepeat.Right, Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage (45), Height = Application.GetMinRealAverage (45), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor, Text = "S", TextSize = 16, Radius = (uint)Application.GetMinRealAverage (22), BorderWidth = 1, BorderColor = SkinStyle.Current.Transparent, IsSelected = timerTemp.whichDay.Contains (0), Tag = 0, }; repeatView.AddChidren (btnSunday); var btnMonday = new Button () { X = btnSunday.Right + Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage (45), Height = Application.GetMinRealAverage (45), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor, Text = "M", TextSize = 16, Radius = (uint)Application.GetMinRealAverage (22), BorderWidth = 1, BorderColor = SkinStyle.Current.Transparent, IsSelected = timerTemp.whichDay.Contains (1), Tag = 1, }; repeatView.AddChidren (btnMonday); var btnTuesday = new Button () { X = btnMonday.Right + Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage (45), Height = Application.GetMinRealAverage (45), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor, Text = "T", TextSize = 16, Radius = (uint)Application.GetMinRealAverage (22), BorderWidth = 1, BorderColor = SkinStyle.Current.Transparent, IsSelected = timerTemp.whichDay.Contains (2), Tag = 2, }; repeatView.AddChidren (btnTuesday); var btnWednesday = new Button () { X = btnTuesday.Right + Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage (45), Height = Application.GetMinRealAverage (45), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor, Text = "W", TextSize = 16, Radius = (uint)Application.GetMinRealAverage (22), BorderWidth = 1, BorderColor = SkinStyle.Current.Transparent, IsSelected = timerTemp.whichDay.Contains (3), Tag = 3, }; repeatView.AddChidren (btnWednesday); var btnThursday = new Button () { X = btnWednesday.Right + Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage (45), Height = Application.GetMinRealAverage (45), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor, Text = "T", TextSize = 16, Radius = (uint)Application.GetMinRealAverage (22), BorderWidth = 1, BorderColor = SkinStyle.Current.Transparent, IsSelected = timerTemp.whichDay.Contains (4), Tag = 4, }; repeatView.AddChidren (btnThursday); var btnFriday = new Button () { X = btnThursday.Right + Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage (45), Height = Application.GetMinRealAverage (45), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor, Text = "F", TextSize = 16, Radius = (uint)Application.GetMinRealAverage (22), BorderWidth = 1, BorderColor = SkinStyle.Current.Transparent, IsSelected = timerTemp.whichDay.Contains (5), Tag = 5, }; repeatView.AddChidren (btnFriday); var btnSaturday = new Button () { X = btnFriday.Right + Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage (45), Height = Application.GetMinRealAverage (45), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor, Text = "S", TextSize = 16, Radius = (uint)Application.GetMinRealAverage (22), BorderWidth = 1, BorderColor = SkinStyle.Current.Transparent, IsSelected = timerTemp.whichDay.Contains (6), Tag = 6, }; repeatView.AddChidren (btnSaturday); EventHandler repeatHandler = (sdd, s) => { //EveryDay = 0, //每天 //WorkingDay, //工作日 //Weekend, //周末 //Week, //指定星期几 //Period, //指定时间段 //AppointDay, //指定日 Periodicity (sdd as Button).IsSelected = !(sdd as Button).IsSelected; }; btnMonday.MouseUpEventHandler += repeatHandler; btnFriday.MouseUpEventHandler += repeatHandler; btnThursday.MouseUpEventHandler += repeatHandler; btnSunday.MouseUpEventHandler += repeatHandler; btnTuesday.MouseUpEventHandler += repeatHandler; btnSaturday.MouseUpEventHandler += repeatHandler; btnWednesday.MouseUpEventHandler += repeatHandler; #endregion #region -----Room var roomView = new RowLayout () { Height = Application.GetRealHeight (110), }; bodyView.AddChidren (roomView); var btnRoom = new Button () { X = Application.GetRealWidth (50), Width = Application.GetRealWidth (160), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor1, TextID = R.MyInternationalizationString.Room, }; roomView.AddChidren (btnRoom); var roomContenView = new FrameLayout () { X = btnName.Right, Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth (380), Height = Application.GetRealHeight (60), Radius = 1, BorderColor = SkinStyle.Current.BorderColor, BorderWidth = 1, }; roomView.AddChidren (roomContenView); var downSelectedButton = new Button () { X = Application.GetRealWidth (310), Height = Application.GetRealWidth (50), Width = Application.GetRealWidth (55), UnSelectedImagePath = "Item/Down.png", SelectedImagePath = "Item/DownSelected.png", Gravity = Gravity.CenterVertical, }; roomContenView.AddChidren (downSelectedButton); var btnRoomChoose = new Button () { X = Application.GetRealWidth (10), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth (380), Height = Application.GetRealHeight (60), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor1, Text = timerTemp.RoomName, }; roomContenView.AddChidren (btnRoomChoose); #endregion #region Devices var devicesView = new RowLayout () { Height = Application.GetRealHeight (110), BackgroundColor = SkinStyle.Current.MainColor, }; bodyView.AddChidren (devicesView); var btnDeviceTitle = new Button () { X = Application.GetRealWidth (50), Width = Application.GetRealWidth (260), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor1, TextID = R.MyInternationalizationString.DeviceList, }; devicesView.AddChidren (btnDeviceTitle); devicesListView = new FrameLayout () { Height = Application.GetRealHeight (130), }; bodyView.AddChidren (devicesListView); #endregion 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 (); var chooseRoomView = new FrameLayout () { Animate = Animate.DownToUp, }; chooseRoomView.MouseUpEventHandler += (sende1r, e1) => { roomDialog.Close (); }; roomDialog.AddChidren (chooseRoomView); var chooseRoomTitleView = new FrameLayout () { Y = Application.GetRealHeight (1136 - 360 - 80), Height = Application.GetRealHeight (80), BackgroundColor = SkinStyle.Current.MainColor, }; chooseRoomView.AddChidren (chooseRoomTitleView); var btnChooseRoomTitle = new Button () { X = Application.GetRealWidth (40), BackgroundColor = SkinStyle.Current.MainColor, TextID = R.MyInternationalizationString.ChooseRoom, TextColor = SkinStyle.Current.TextColor1, TextAlignment = TextAlignment.CenterLeft }; chooseRoomTitleView.AddChidren (btnChooseRoomTitle); var roomListView = new VerticalScrolViewLayout () { Y = Application.GetRealHeight (1136 - 360), Height = Application.GetRealHeight (360), BackgroundColor = SkinStyle.Current.ViewColor, }; chooseRoomView.AddChidren (roomListView); //获取房间列表 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 = room.Name, TextColor = SkinStyle.Current.TextColor1, TextAlignment = TextAlignment.Center, }; roomListView.AddChidren (btnRoomNameChoose); var btnLine = new Button () { Height = 1, BackgroundColor = SkinStyle.Current.BorderColor }; roomListView.AddChidren (btnLine); btnRoomNameChoose.MouseUpEventHandler += (sd, ds) => { //切换房间清空之前选择数据; selectedDeviceList.Clear (); btnRoomChoose.Text = (sd as Button).Text; //获取设备列表 var deviceList = mMthod.GetRoomDeviceList (btnRoomChoose.Text); InitDeviceListView (deviceList); roomDialog.Close (); }; } roomDialog.Show (); }; #endregion var saveTimeBottomView = new FrameLayout () { Y = Application.GetRealHeight (1136 - 90), Height = Application.GetRealHeight (90), BackgroundColor = SkinStyle.Current.ViewColor, }; AddChidren (saveTimeBottomView); var btnSaveTimerBottom = new Button () { BackgroundColor = SkinStyle.Current.MainColor, TextAlignment = TextAlignment.Center, TextID = R.MyInternationalizationString.SAVE, TextSize = 18, TextColor = SkinStyle.Current.TextColor1 }; saveTimeBottomView.AddChidren (btnSaveTimerBottom); btnSaveTimerBottom.MouseUpEventHandler += (ll, kk) => { 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 (); new Alert ("", "Please select the days.", "Close").Show (); return; } string mTimerName = etName.Text.Trim (); if (string.IsNullOrEmpty (mTimerName)) { //new Alert ("", "请填写定时器名称!", "Close").Show (); new Alert ("", "Please fill the tab Lable name.", "Close").Show (); return; } //else if (listTimer.Find ((obj) => obj.TimerName == timerTemp.TimerName) != null && !isEdit) {//2020-01-09 编辑的时候也提示重复名字 // //if (isEdit) { // //} // new Alert ("", "The timer name already exists. Please change it before saving it.", "Close").Show (); // return; //} if (selectedDeviceList.Count == 0) { new Alert ("", "Please choose at least one device!", "Close").Show (); return; } //名字重复判断限制 var mTimer = listTimer.Find ((obj) => obj.timerName == mTimerName); if (isEdit) { if (mTimer != null && mTimer.id != timerTemp.id) { new Alert ("", "The timer name already exists. Please change it before saving it.", "Close").Show (); return; } } else { if (mTimer != null) { new Alert ("", "The timer name already exists. Please change it before saving it.", "Close").Show (); return; } } //2020-02-10 时间重复判断限制 string mExecutionTime = btnTimelbl.Text; //timerTemp.ExecutionTime = btnTimelbl.Text; var mTimerExecutionTime = listTimer.Find ((obj) => (obj.executeUtcTime == mExecutionTime)); if (isEdit) { if (mTimerExecutionTime != null && mTimerExecutionTime.id != timerTemp.id) { new Alert ("", "The timer time already exists. Please change it before saving it.", "Close").Show (); return; } } else { if (mTimerExecutionTime != null) { new Alert ("", "The timer time already exists. Please change it before saving it.", "Close").Show (); return; } } // 2021-03-30 先清空,再重新统计 timerTemp.whichDay = new List(); 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; } 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; } 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; } else { timerTemp.timerType = TimerType.Week; } if (btnSunday.IsSelected) { if (!timerTemp.whichDay.Contains (0)) { timerTemp.whichDay.Add (0); } } if (btnSaturday.IsSelected) { if (!timerTemp.whichDay.Contains (6)) { timerTemp.whichDay.Add (6); } } if (btnMonday.IsSelected) { if (!timerTemp.whichDay.Contains (1)) { timerTemp.whichDay.Add (1); } } if (btnTuesday.IsSelected) { if (!timerTemp.whichDay.Contains (2)) { timerTemp.whichDay.Add (2); } } if (btnWednesday.IsSelected) { if (!timerTemp.whichDay.Contains (3)) { timerTemp.whichDay.Add (3); } } if (btnThursday.IsSelected) { if (!timerTemp.whichDay.Contains (4)) { timerTemp.whichDay.Add (4); } } if (btnFriday.IsSelected) { if (!timerTemp.whichDay.Contains (5)) { timerTemp.whichDay.Add (5); } } //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.executeUtcTime = btnTimelbl.Text; timerTemp.timerName = etName.Text.Trim (); System.Threading.Tasks.Task.Run (() => { try { ResponsePackNew revertObj = null; if (isEdit) { 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.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 { //提示错误 IMessageCommon.Current.ShowErrorInfoAlter (revertObj.Code); } }); } catch (Exception ex) { Utlis.WriteLine (ex.Message); } finally { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); }); } }); }; } /// /// 自定义TimePickerView /// 2021-03-24 /// void ShowTimePickerView (Button btnTimelbl) { 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 (); for (int i = 0; i < 24; i++) { if (i < 10) { var a = "0" + i.ToString (); hourList.Add (a); } else { hourList.Add (i.ToString ()); } } var minuteList = new List (); 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 void InitDeviceListView (List deviceList) { devicesListView.RemoveAll (); //房间设备列表 devicesListView.Height = Application.GetRealHeight (130 * deviceList.Count); System.Threading.Tasks.Task.Run (() => { try { 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); 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); switch (device.spk) { //DeviceType.LightDALI case SPK.LightDimming: { #region 调光器A tempSwitch.RemoveFromParent (); deviceRowView.Height = Application.GetRealHeight (130); btnChoose.Y = Application.GetRealHeight (20); btnDeviceName.Y = Application.GetRealHeight (15); var btnLevel = 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 (btnLevel); var levelBar = new HorizontalSeekBar () { X = btnLevel.Right, Y = btnLevel.Y, Width = Application.GetRealWidth (460), Height = Application.GetRealHeight (45), ThumbColor = SkinStyle.Current.ThumbColor, ProgressColor = SkinStyle.Current.SelectedColor, ThumbRadius = 6, Max = 100, }; deviceRowView.AddChidren (levelBar); levelBar.ProgressChanged += (sender, e) => { if (!btnChoose.IsSelected) { btnChoose.IsSelected = true; } 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 (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 == "brightness") { if (fundev.value == "0") { btnLevel.Text = "OFF"; } else { btnLevel.Text = fundev.value + "%"; } levelBar.Progress = int.Parse (fundev.value); } } } } catch { } } #endregion } break; //DeviceType.LightEnergySwitch //DeviceType.LightEnergySocket //DeviceType.LightSwitchSocket case SPK.ElectricSocket: case SPK.LightSwitch: { #region 继电器 tempSwitch.MouseUpEventHandler += (sender3, e3) => { tempSwitch.IsSelected = !tempSwitch.IsSelected; if (tempSwitch.IsSelected) { value = "on"; } else { value = "off"; } if (!btnChoose.IsSelected) { btnChoose.IsSelected = true; } DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected); }; btnChoose.MouseUpEventHandler += (dds, ddss) => { btnChoose.IsSelected = !btnChoose.IsSelected; if (tempSwitch.IsSelected) { value = "on"; } else { 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 } break; case SPK.CurtainRoller: case SPK.CurtainTrietex: case SPK.CurtainSwitch: { #region 窗帘 tempSwitch.RemoveFromParent (); var tempSwitch1 = new Button () { Width = Application.GetRealWidth (90), Height = Application.GetRealWidth (53), X = Application.GetRealWidth (640 - 90 - 20), Radius = 5, BorderColor = SkinStyle.Current.Transparent, BorderWidth = 1, Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.Center, BackgroundColor = SkinStyle.Current.ButtonColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, Text = "CLOSE", Tag = device, }; deviceRowView.AddChidren (tempSwitch1); tempSwitch1.MouseUpEventHandler += (sender3, e3) => { tempSwitch1.IsSelected = !tempSwitch1.IsSelected; if (tempSwitch1.IsSelected) { value = "on"; tempSwitch1.Text = "OPEN"; tempSwitch1.BackgroundColor = SkinStyle.Current.SelectedColor; } else { value = "off"; tempSwitch1.Text = "CLOSE"; tempSwitch1.BackgroundColor = SkinStyle.Current.ButtonColor; } if (!btnChoose.IsSelected) { btnChoose.IsSelected = true; } DeviceDateFun (btnChoose.Tag as Function, value, btnChoose.IsSelected); }; btnChoose.MouseUpEventHandler += (dds, ddss) => { btnChoose.IsSelected = !btnChoose.IsSelected; if (tempSwitch1.IsSelected) { value = "on"; } else { 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 } 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 { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); }); } }); } /// /// /// /// /// void SetFanButtonState (Button btnFanLevel, string value) { if (btnFanLevel == null) return; if (value == "0") { btnFanLevel.Text = "OFF"; } else { btnFanLevel.Text = value; } } /// /// 设备数据转换 /// /// /// 开关状态值 /// 判断控件点击状态 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); } /// /// 添加设备数据到列表里 /// /// /// 判断控件点击状态 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); } } } }