using System;
using System.Collections.Generic;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.Stan;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
public class TuyaWaterValvePage : DeviceFunctionCardCommonForm
{
#region ■ 变量声明___________________________
///
/// 图片控件
///
private PicViewControl btnPictrue = null;
///
/// 控制器控制状态提示文本按钮
///
NormalViewControl btnControlTip = null;
///
/// 控制器控制时间提示文本按钮
///
NormalViewControl btnControlTimeTip = null;
///
///
///
private IconViewControl btnTimeSet = null;
///
/// 开关控件
///
private IconViewControl btnSwitch = null;
#endregion
#region ■ 初始化_____________________________
///
/// 初始化白色区域的内容
///
public override void InitFrameWhiteContent()
{
base.SetTitleText(Language.StringByID(StringId.WaterValve));
//初始化第一个索引页的内容
this.InitFrameWhiteContent1();
//刷新界面状态
this.RefreshFormStatu();
//读取状态
new System.Threading.Thread(() =>
{
Control.Ins.ReadFunctionsInfo(new List() { device.deviceId});
})
{ IsBackground = true }.Start();
}
///
/// 初始化第一个索引页的内容
///
private void InitFrameWhiteContent1()
{
//图片控件
this.btnPictrue = new PicViewControl(130, 118);
btnPictrue.Y = Application.GetRealHeight(95);
btnPictrue.Gravity = Gravity.CenterHorizontal;
btnPictrue.UnSelectedImagePath = "FunctionIcon/Electrical/WaterValve/WaterValveBg.png";
btnPictrue.SelectedImagePath = "FunctionIcon/Electrical/WaterValve/WaterValveOnBg.png";
FrameWhiteCentet1.AddChidren(btnPictrue);
btnPictrue.ButtonClickEvent += (sender, e) =>
{
//发送开关命令
this.SendSwitchComand();
};
btnControlTip = new NormalViewControl(300,30, true)
{
Y = Application.GetRealHeight(231),
TextAlignment = TextAlignment.Center,
Gravity = Gravity.CenterHorizontal,
TextSize = CSS_FontSize.TextFontSize,
SelectedTextColor = CSS_Color.MainColor,
TextColor = CSS_Color.TextualColor,
TextID = StringId.ControllerNotOn,
};
FrameWhiteCentet1.AddChidren(btnControlTip);
btnControlTimeTip = new NormalViewControl(300, 30, true)
{
Y = Application.GetRealHeight(252),
Gravity = Gravity.CenterHorizontal,
TextAlignment = TextAlignment.Center,
TextSize = CSS_FontSize.TextFontSize,
//TextColor = 0x00000000,
SelectedTextColor = CSS_Color.TextualColor,
TextColor = CSS_Color.TextualColor,
Text = "00:00:00"
};
FrameWhiteCentet1.AddChidren(btnControlTimeTip);
btnTimeSet = new IconViewControl(50)
{
Y = Application.GetRealHeight(365),
Gravity = Gravity.CenterHorizontal,
UnSelectedImagePath = "FunctionIcon/Electrical/WaterValve/SetTimeIcon.png",
SelectedImagePath = "FunctionIcon/Electrical/WaterValve/SetTimeIcon.png",
};
FrameWhiteCentet1.AddChidren(btnTimeSet);
btnTimeSet.ButtonClickEvent = (sender, e) => {
SetControlTime();
};
var btnTimeSetTip = new NormalViewControl(300, 30, true)
{
Y = btnTimeSet.Bottom ,
Gravity = Gravity.CenterHorizontal,
TextAlignment = TextAlignment.Center,
TextSize = CSS_FontSize.TextFontSize,
//TextColor = 0x00000000,
SelectedTextColor = CSS_Color.TextualColor,
TextColor = CSS_Color.TextualColor,
TextID = StringId.TimeSwitch,
};
FrameWhiteCentet1.AddChidren(btnTimeSetTip);
//开关图标
this.btnSwitch = new IconViewControl(40);
btnSwitch.Gravity = Gravity.CenterHorizontal;
btnSwitch.Y = Application.GetRealHeight(468);
btnSwitch.UnSelectedImagePath = "Public/PowerClose.png";
btnSwitch.SelectedImagePath = "Public/PowerOpen.png";
FrameWhiteCentet1.AddChidren(btnSwitch);
btnSwitch.ButtonClickEvent += (sender, e) =>
{
//发送开关命令
this.SendSwitchComand();
};
var pack = new DAL.Server.HttpServerRequest().GetDeviceInfoList(new List() { base.device.deviceId });
}
#endregion
#region ■ 设备状态反馈_______________________
///
/// 设备状态反馈
///
///
public override void DeviceStatuPush(Function i_LocalDevice)
{
//不是同一个东西
if (this.device.sid != i_LocalDevice.sid) { return; }
//刷新界面状态
this.RefreshFormStatu();
}
#endregion
#region ■ 发送各种命令_______________________
///
/// 发送开关命令
///
private void SendSwitchComand()
{
this.btnPictrue.CanClick = false;
this.btnSwitch.CanClick = false;
string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
HdlThreadLogic.Current.RunThread(() =>
{
var dic = new Dictionary();
dic.Add(FunctionAttributeKey.OnOff, statu);
Control.Ins.SendWriteCommand(this.device, dic, true);
HdlThreadLogic.Current.RunMain(() =>
{
this.btnPictrue.CanClick = true;
this.btnSwitch.CanClick = true;
});
});
}
#endregion
#region ■ 刷新界面状态_______________________
///
/// 刷新界面状态
///
private void RefreshFormStatu()
{
Application.RunOnMainThread(() =>
{
var onoffStatu = device.attributes.Find((obj) => obj.key == FunctionAttributeKey.OnOff);
var timeStatu = device.attributes.Find((obj) => obj.key == FunctionAttributeKey.TuyaWaterTime);
if (onoffStatu != null)
{
if (onoffStatu.state == "on")
{
btnControlTip.TextID = StringId.ControllerOn;
}
else
{
btnControlTip.TextID = StringId.ControllerNotOn;
}
this.btnSwitch.IsSelected = this.btnPictrue.IsSelected = onoffStatu.state.ToString() == "on";
}
if (timeStatu != null)
{
int.TryParse(timeStatu.state, out waterRunningTime);
}
RefreshTimeButton();
});
}
System.Threading.Thread refreshTimeThread;
int waterRunningTime = 0;
///
/// 刷新水阀时间文本
///
private void RefreshTimeButton()
{
if (refreshTimeThread == null || refreshTimeThread.ThreadState == System.Threading.ThreadState.Stopped)
{
refreshTimeThread = new System.Threading.Thread(() =>
{
while (waterRunningTime >= 0)
{
if (waterRunningTime > 0)
{
waterRunningTime--;
}
var sce = waterRunningTime % 60;
var min = 0;
if(waterRunningTime > 60)
{
min = (waterRunningTime - sce) / 60 %60;
}
var hour = 0;
if(waterRunningTime > 360)
{
hour = (waterRunningTime - sce - (min * 60)) / 3600;
}
Application.RunOnMainThread(() =>
{
btnControlTimeTip.Text = $"{hour.ToString().PadLeft(2,'0')}:{min.ToString().PadLeft(2, '0')}:{sce.ToString().PadLeft(2, '0')}";
});
System.Threading.Thread.Sleep(1000);
}
})
{ IsBackground = true };
}
refreshTimeThread.Start();
}
public override void RemoveFromParent()
{
if (refreshTimeThread != null)
{
refreshTimeThread.Abort();
}
base.RemoveFromParent();
}
#endregion
private void SetControlTime()
{
var timeControl = new BottomTimeSelectControl();
timeControl.RowCount = 5;
timeControl.InitControl(0,0);
timeControl.FinishEvent = (type,hours,min) => {
if (type == 1)//0:取消;1:确定
{
HdlThreadLogic.Current.RunThread(() =>
{
var time = hours * 60 * 60 + min * 60;
var dic = new Dictionary();
dic.Add(FunctionAttributeKey.TuyaWaterTime, time.ToString());
Control.Ins.SendWriteCommand(this.device, dic, true);
HdlThreadLogic.Current.RunMain(() =>
{
waterRunningTime = time;
this.btnControlTimeTip.Text = $"{hours.ToString().PadLeft(2, '0')}:{min.ToString().PadLeft(2, '0')}:00";
});
});
}
};
}
}
}