From 74a9ba8e9a2df9c39f9c2eb212a5ac889a055cd4 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期二, 03 十二月 2019 10:47:51 +0800
Subject: [PATCH] 优化UI细节(请合并最新代码)
---
ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs | 543 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 542 insertions(+), 1 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs b/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs
index 04fa9fa..233725a 100755
--- a/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs
@@ -1,13 +1,554 @@
锘縰sing System;
+using System.Collections.Generic;
+using Shared.Common;
+using Shared.Phone.Device.CommonForm;
+using Shared.Phone.UserView;
+using ZigBee.Device;
namespace Shared.Phone.Device.Light
{
/// <summary>
/// 鎻掑骇
/// </summary>
- public class PlugControl
+ public class PlugControl:FrameLayout, ZigBee.Common.IStatus
{
+
+ #region 鈼� 鍙橀噺__________________________
+ /// <summary>
+ /// 寮�鍏�
+ /// </summary>
+ private Button switchBtn;
+ /// <summary>
+ /// The action.
+ /// </summary>
+ public Action action;
+
+ /// <summary>
+ /// The light image.
+ /// </summary>
+ private Button deviceIMG;
+ /// <summary>
+ /// 鏀惰棌鎸夐挳
+ /// </summary>
+ private Button collectionBtn;
+ /// <summary>
+ /// 浼犺繃鏉ョ殑璁惧
+ /// </summary>
+ private DeviceUI device;
+ /// <summary>
+ /// 浼犺繃鏉ョ殑鎴块棿
+ /// </summary>
+ private Shared.Common.Room room;
+
+ /// <summary>
+ /// 鎴块棿
+ /// </summary>
+ private Button roomBtn;
+ /// <summary>
+ /// 鎴块棿鍚�
+ /// </summary>
+ private Button roomName;
+ /// <summary>
+ /// 缃戝叧
+ /// </summary>
+ private ZbGateway zbGateway = null;
+ /// <summary>
+ /// 鏄惁鍙戦�佹帶鍒跺懡浠ゆ垚鍔熶簡
+ /// </summary>
+ private bool sendedControlCommand = false;
+
+ /// <summary>
+ /// bodyFrameLayout
+ /// </summary>
+ private FrameLayout bodyFrameLayout;
+
+ private Button StatuBtn;
+
+ /// <summary>
+ /// IsDrawerLockMode
+ /// </summary>
+ public bool IsDrawerLockMode;
+ #endregion
+
+ #region 鈼� 鎺ュ彛__________________________
+ /// <summary>
+ /// 澶勭悊鍙樺寲浜嬩欢 --灏嗗純鐢� 鏀圭敤DeviceInfoChange()
+ /// </summary>
+ /// <returns>The changed.</returns>
+ /// <param name="common">Common.</param>
+ public void Changed(CommonDevice common)
+ {
+
+ }
+ /// <summary>
+ /// Changeds the IL ogic status.
+ /// </summary>
+ /// <param name="logic">Logic.</param>
+ public void ChangedILogicStatus(ZigBee.Device.Logic logic)
+ {
+ //throw new NotImplementedException();
+ }
+ /// <summary>
+ /// Changeds the IS cene status.
+ /// </summary>
+ /// <param name="scene">Scene.</param>
+ public void ChangedISceneStatus(Scene scene)
+ {
+ //throw new NotImplementedException();
+ }
+ /// <summary>
+ /// 璁惧鐘舵�佹洿鏂版帴鍙�
+ /// <para>type锛氬鏋滀负 DeviceInComingRespon:璁惧鏂颁笂鎶�</para>
+ /// <para>type锛氬鏋滀负 IASInfoReport:RemoveDeviceRespon</para>
+ /// <para>type锛氬鏋滀负 DeviceStatusReport:璁惧涓婃姤</para>
+ /// <para>type锛氬鏋滀负 IASInfoReport:IAS瀹夐槻淇℃伅涓婃姤</para>
+ /// <para>type锛氬鏋滀负 OnlineStatusChange: 璁惧鍦ㄧ嚎鐘舵�佹洿鏂�</para>
+ /// </summary>
+ /// <param name="common">Common.</param>
+ /// <param name="typeTag">Type tag.</param>
+ public void DeviceInfoChange(CommonDevice common, string typeTag)
+ {
+ if (typeTag == "DeviceStatusReport")
+ {
+ Application.RunOnMainThread(() =>
+ {
+ try
+ {
+ var deviceUI = device;
+ //璁惧涓虹┖
+ if (deviceUI.CommonDevice == null)
+ {
+ return;
+ }
+ //鏄惁涓哄綋鍓嶈澶�
+ if (deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint || deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr)
+ {
+ return;
+ }
+ if (deviceUI.CommonDevice.Type == DeviceType.OnOffOutput)
+ {
+ if (common.DeviceStatusReport.CluterID == 6)
+ {
+ var light = deviceUI.CommonDevice as ToggleLight;
+ light.DeviceStatusReport = common.DeviceStatusReport;
+ //璁板綍銆佹洿鏂扮姸鎬�
+ if (light.DeviceStatusReport.AttriBute == null || light.DeviceStatusReport.AttriBute.Count == 0)
+ {
+ return;
+ }
+ light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData;
+ deviceIMG.IsSelected = switchBtn.IsSelected = light.OnOffStatus == 1;
+ StatuBtn.Text = CommonFormResouce.GetSwitchStatu(deviceIMG.IsSelected);
+ light.LastDateTime = DateTime.Now;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ System.Console.WriteLine($"Error:{ex.Message}");
+ }
+ });
+ }
+ else if (typeTag == "OnlineStatusChange")
+ {
+ Application.RunOnMainThread(() =>
+ {
+ try
+ {
+ var deviceUI = device;
+ //璁惧涓虹┖
+ if (deviceUI.CommonDevice == null)
+ {
+ return;
+ }
+ //鏄惁涓哄綋鍓嶈澶�
+ if (deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint || deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr)
+ {
+ return;
+ }
+ deviceUI.CommonDevice.IsOnline = common.IsOnline;
+ deviceIMG.IsSelected = switchBtn.IsSelected = deviceUI.CommonDevice.IsOnline == 1;
+ deviceUI.CommonDevice.LastDateTime = DateTime.Now;
+ }
+ catch (Exception ex)
+ {
+ System.Console.WriteLine($"Error:{ex.Message}");
+ }
+ });
+ }
+ }
+ #endregion
+
+ #region 鈼� 鍒濆鍖朹____________________
+ /// <summary>
+ /// 閲嶅啓绉婚櫎鏂规硶
+ /// </summary>
+ public override void RemoveFromParent()
+ {
+ ZbGateway.StatusList.Remove(this);
+ //action();
+ //action = null;
+ RemoveUpdateControlDeviceStatuAction();
+ if (IsDrawerLockMode)
+ {
+ CommonPage.Instance.IsDrawerLockMode = false;
+ }
+ base.RemoveFromParent();
+ }
+
+ /// <summary>
+ /// 鏋勯�犳柟娉�
+ /// </summary>
public PlugControl()
{
+ BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
+ ZbGateway.StatusList.Add(this);
}
+ /// <summary>
+ /// 鏄剧ず鐣岄潰
+ /// </summary>
+ /// <param name="dev">Device.</param>
+ /// <param name="room">Room.</param>
+ public void Show(DeviceUI dev, Shared.Common.Room room)
+ {
+ device = dev;
+ zbGateway = this.device.CommonDevice.Gateway;
+ this.room = room;
+
+ AddTop();
+
+ AddBodyView(device);
+
+
+ var light = dev.CommonDevice as ToggleLight;
+ //琛ヤ笂闈炶繙绋�
+ if (light.Gateway == null)
+ {
+ return;
+ }
+ if (light.Gateway.IsVirtual)
+ {
+ UserHomeView.ReadStatus(light, () =>
+ {
+ light.ReadOnOffStatus();
+ light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
+ });
+ }
+ else
+ {
+ //闃叉鐭椂闂村唴澶氭璇诲彇鐘舵��
+ if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
+ {
+ light.ReadOnOffStatus();
+ light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
+ }
+ }
+
+ var de = Shared.Common.Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FileName);
+ if (de == null)
+ {
+ collectionBtn.IsSelected = false;
+ }
+ else
+ {
+ collectionBtn.IsSelected = true;
+ }
+
+
+ BindEvent();
+
+ }
+
+ #endregion
+
+ #region 鈼� Add______________________________
+
+ /// <summary>
+ /// AddTop
+ /// </summary>
+ public void AddTop()
+ {
+ var top = new TopFrameLayout();
+ AddChidren(top);
+ top.InitTopview();
+ top.backButton.MouseUpEventHandler += (sender, e) =>
+ {
+ RemoveFromParent();
+ };
+
+ var moreBtn = new Button
+ {
+ X = Application.GetRealWidth(953),
+ Width = Application.GetMinReal(69),
+ Height = Application.GetMinReal(69),
+ Gravity = Gravity.CenterVertical,
+ UnSelectedImagePath = "Item/More.png"
+ };
+ top.topView.AddChidren(moreBtn);
+
+ moreBtn.MouseUpEventHandler += More;
+
+ }
+ /// <summary>
+ /// AddBodyView
+ /// </summary>
+ public void AddBodyView(DeviceUI device)
+ {
+ bodyFrameLayout = new FrameLayout()
+ {
+ Y = Application.GetRealHeight(184),
+ Height = Application.GetRealHeight(1737),
+ BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
+ };
+ AddChidren(bodyFrameLayout);
+
+ var itemView = new FrameLayout()
+ {
+ Y = Application.GetRealHeight(115),
+ Width = Application.GetRealWidth(965),
+ Height = Application.GetRealHeight(1316),
+ Radius = (uint)Application.GetRealHeight(CommonFormResouce.BigFormRadius),
+ Gravity = Gravity.CenterHorizontal,
+ BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
+ };
+ bodyFrameLayout.AddChidren(itemView);
+
+ collectionBtn = new Button()
+ {
+ X = Application.GetRealWidth(850),
+ Y = Application.GetRealHeight(46),
+ Width = Application.GetMinReal(69),
+ Height = Application.GetMinReal(69),
+ UnSelectedImagePath = "Item/Collection.png",
+ SelectedImagePath = "Item/CollectionSelected.png"
+ };
+ itemView.AddChidren(collectionBtn);
+
+ var deviceNameBtn = new Button()
+ {
+ Y = Application.GetRealHeight(46),
+ Width = Application.GetRealWidth(500),
+ Height = Application.GetRealHeight(60),
+ Gravity = Gravity.CenterHorizontal,
+ Text = device.CommonDevice.DeviceEpointName,
+ TextColor = ZigbeeColor.Current.GXCTextBlackColor,
+ TextSize = 15
+ };
+ itemView.AddChidren(deviceNameBtn);
+
+ StatuBtn = new Button
+ {
+ Y = Application.GetRealHeight(118),
+ Width = Application.GetRealWidth(600),
+ Height = Application.GetRealHeight(60),
+ Gravity = Gravity.CenterHorizontal,
+ TextColor = ZigbeeColor.Current.GXCTextGrayColor,
+ Text = CommonFormResouce.GetSwitchStatu(device.CommonDevice.IsOnline == 1)
+ };
+ itemView.AddChidren(StatuBtn);
+
+ deviceIMG = new Button()
+ {
+ Y = Application.GetRealHeight(344),
+ Width = Application.GetMinRealAverage(567),
+ Height = Application.GetMinRealAverage(567),
+ Gravity = Gravity.CenterHorizontal,
+ UnSelectedImagePath = "Light/Plug.png",
+ SelectedImagePath = "Light/PlugSelected.png",
+ IsSelected = (device.CommonDevice as ToggleLight).OnOffStatus == 1
+ };
+ itemView.AddChidren(deviceIMG);
+
+ switchBtn = new Button()
+ {
+ Y = Application.GetRealHeight(996),
+ Width = Application.GetMinRealAverage(81),
+ Height = Application.GetMinRealAverage(81),
+ Gravity = Gravity.CenterHorizontal,
+ UnSelectedImagePath = "Item/Switch.png",
+ SelectedImagePath = "Item/SwitchSelected.png",
+ IsSelected = (device.CommonDevice as ToggleLight).OnOffStatus == 1
+ };
+ itemView.AddChidren(switchBtn);
+
+ var roomBG = new Button
+ {
+ Y = Application.GetRealHeight(1178 - 50),
+ Height = Application.GetRealHeight(138 + 50),
+ BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor,
+ Radius = (uint)Application.GetRealHeight(CommonFormResouce.BigFormRadius)
+ };
+ itemView.AddChidren(roomBG);
+
+ var roomBG2 = new Button
+ {
+ Y = Application.GetRealHeight(1178 - 50),
+ Height = Application.GetRealHeight(50),
+ BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
+ };
+ itemView.AddChidren(roomBG2);
+
+ roomBtn = new Button()
+ {
+ X = Application.GetRealWidth(CommonFormResouce.X_Left),
+ Y = Application.GetRealHeight(1207),
+ Width = Application.GetMinReal(80),
+ Height = Application.GetMinReal(80),
+ UnSelectedImagePath = "Item/Room.png"
+ };
+ itemView.AddChidren(roomBtn);
+
+ roomName = new Button()
+ {
+ X = Application.GetRealWidth(150),
+ Y = Application.GetRealHeight(1224),
+ Width = Application.GetRealWidth(400),
+ Height = Application.GetRealHeight(50),
+ Text = room.Name,
+ TextAlignment = TextAlignment.CenterLeft,
+ TextColor = ZigbeeColor.Current.GXCTextWhiteColor
+ };
+ itemView.AddChidren(roomName);
+ }
+
+ #endregion
+
+ #region 鈼� 缁戝畾鎸夐挳_______________________
+ /// <summary>
+ /// 缁戝畾鎸夐挳鐨勪簨浠�
+ /// </summary>
+ private void BindEvent()
+ {
+ switchBtn.MouseUpEventHandler += Switch;
+ deviceIMG.MouseUpEventHandler += Switch;
+ collectionBtn.MouseUpEventHandler += Collection;
+ }
+
+ #endregion
+
+ #region 鈼� 寮�鍏砡_________________________
+
+ /// <summary>
+ /// 寮�鍏宠缃�
+ /// </summary>
+ /// <param name="sender">Sender.</param>
+ /// <param name="eventArgs">Event arguments.</param>
+ private void Switch(object sender, MouseEventArgs eventArgs)
+ {
+ sendedControlCommand = false;
+ zbGateway.ReportAction += UpdateDeviceControllStatu;
+ switchBtn.IsSelected = !switchBtn.IsSelected;
+ deviceIMG.IsSelected = !deviceIMG.IsSelected;
+ StatuBtn.Text = CommonFormResouce.GetSwitchStatu(deviceIMG.IsSelected);
+ if (switchBtn.IsSelected == true)
+ {
+ (device.CommonDevice as ToggleLight).SwitchControl(1);
+ }
+ else
+ {
+ (device.CommonDevice as ToggleLight).SwitchControl(0);
+ }
+ //鎺у埗寤舵椂鍥炶皟
+ DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
+ {
+ if (Parent == null)
+ {
+ return;
+ }
+ RemoveUpdateControlDeviceStatuAction();
+ if (sendedControlCommand == false)
+ {
+ DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
+ }
+ });
+ }
+
+
+
+ #endregion
+
+ #region 鈼� 璁剧疆__________________________
+ /// <summary>
+ /// 鏇村璁剧疆
+ /// </summary>
+ /// <param name="sender">Sender.</param>
+ /// <param name="e">E.</param>
+ private void More(object sender, MouseEventArgs e)
+ {
+ var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
+ UserView.HomePage.Instance.AddChidren(detailInfo);
+ UserView.HomePage.Instance.PageIndex += 1;
+ detailInfo.Show(device, room);
+ detailInfo.action = () =>
+ {
+ Show(device, room);
+ };
+ }
+
+ #endregion
+
+ #region 鈼� 鏀惰棌__________________________
+ /// <summary>
+ /// 鏀惰棌鍒颁富椤�
+ /// </summary>
+ /// <param name="sender">Sender.</param>
+ /// <param name="e">E.</param>
+ private void Collection(object sender, MouseEventArgs e)
+ {
+ //collection
+ if ((sender as Button).IsSelected)
+ {
+ Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(device.FileName);
+ (sender as Button).IsSelected = false;
+ }
+ else
+ {
+ Shared.Common.Room.CurrentRoom.GetLoveRoom().AddDevice(device.FileName);
+ (sender as Button).IsSelected = true;
+ }
+ }
+
+ #endregion
+
+ #region 鈼� 璁惧鎺у埗鐘舵�乢____________________
+
+ /// <summary>
+ /// 鏄剧ず璁惧鎺у埗鐘舵��
+ /// </summary>
+ /// <param name="command">Command.</param>
+ /// <param name="objValue">Object value.</param>
+ private void UpdateDeviceControllStatu(string command, object objValue)
+ {
+ if (Parent == null)
+ {
+ return;
+ }
+ if (command != "DeviceDefaultAck" || objValue == null)
+ {
+ return;
+ }
+ var tempDevice = (CommonDevice)objValue;
+ if (tempDevice.DeviceEpoint != this.device.CommonDevice.DeviceEpoint || tempDevice.DeviceAddr != this.device.CommonDevice.DeviceAddr)
+ {
+ //涓嶆槸褰撳墠璁惧鐨勬帹閫侊紝鍒欎笉澶勭悊
+ return;
+ }
+ //鏍囪宸茬粡鍙戦�佹帶鍒跺懡浠ゅ埌缃戝叧
+ sendedControlCommand = true;
+ //DeviceUI.ShowStatuTip(R.MyInternationalizationString.Success);
+ }
+
+ /// <summary>
+ /// 绉婚櫎鏇存柊鎺у埗璁惧鐨刟ction
+ /// </summary>
+ private void RemoveUpdateControlDeviceStatuAction()
+ {
+ //绉婚櫎action
+ if (zbGateway != null)
+ {
+ zbGateway.ReportAction -= UpdateDeviceControllStatu;
+ }
+ }
+
+ #endregion
}
}
--
Gitblit v1.8.0