using System;
using System.Collections.Generic;
using System.Threading;
using System.Net.NetworkInformation;
using System.Net;
using System.Text;
namespace Shared.SimpleControl.Phone
{
public class ACMerrillDevicePage : FrameLayout
{
//IndoorTemperature
uint MLTextColor = 0xFFEB5C19;
uint MLTextColorG = 0x90FFFFFF;
Button titleBtn;
//室内温度
Button btnTempIcon;
Button btnIndoorTempValues;
//室内湿度
Button btnHumidityIcon;
Button btnIndoorHumidityValues;
Button btnModeIcon;
Button btnACSwitch;
Button btnSetTemperature;
Button btnModeText;
Button btnReduceTemperature;
Button BtnAddTemperature;
Button btnACModeRight;
Button btnACModeLeft;
string TempTypeString = "°C";
string HumidityTypeString = "%";
//static DateTime controlTime = DateTime.MinValue;
///
/// 当前视图
///
static ACMerrillDevicePage curView;
VerticalScrolViewLayout bodyScrolView;
////List mEmqServerList;
//VerticalScrolViewLayout mVerticalScrolViewLayout;
////Thread readSpeedThead;
ACMerrillLoop ac;
public ACMerrillDevicePage (ACMerrillLoop mmACMerrillLoop)
{
//BackgroundColor = SkinStyle.Current.MainColor;
this.ac = mmACMerrillLoop;
curView = this;
}
public override void RemoveFromParent ()
{
MainPage.Loading.Hide ();
base.RemoveFromParent ();
curView = null;
ACMerrillHomePage.UpdateACRowView ();
}
public void ShowView ()
{
#region 标题
var topView = new FrameLayout () {
Y = Application.GetRealHeight (36),
Height = Application.GetRealHeight (90),
BackgroundColor = SkinStyle.Current.MainColor,
};
AddChidren (topView);
titleBtn = new Button () {
Width = Application.GetRealWidth (400),
TextAlignment = TextAlignment.Center,
Text = ac.Name,
TextSize = 19,
TextColor = SkinStyle.Current.TextColor1,
Height = Application.GetMinReal (90),
SelectedTextColor = SkinStyle.Current.TextColor1,
Gravity = Gravity.CenterHorizontal,
};
topView.AddChidren (titleBtn);
//var logo = new Button () {
// Width = Application.GetRealWidth (154),
// Height = Application.GetRealHeight (90),
// X = Application.GetRealWidth (486),
// UnSelectedImagePath = MainPage.LogoString,
// Gravity = Gravity.CenterVertical,
//};
//topView.AddChidren (logo);
var btnEdit = new Button () {
X = Application.GetRealWidth (545),
Width = Application.GetMinRealAverage (75),
Height = Application.GetMinRealAverage (72),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "CrabtreeAdd/Edit.png",
SelectedImagePath = "CrabtreeAdd/EditOn.png",
};
topView.AddChidren (btnEdit);
btnEdit.MouseUpEventHandler += (sd, ds) => {
btnEdit.IsSelected = false;
ShowDialog (ac);
};
btnEdit.MouseDownEventHandler += (sd, ds) => {
btnEdit.IsSelected = true;
};
var back = new Button () {
Height = Application.GetRealHeight (90),
Width = Application.GetRealWidth (85),
UnSelectedImagePath = "Item/Back.png",
Gravity = Gravity.CenterVertical,
};
topView.AddChidren (back);
back.MouseUpEventHandler += (sender, e) => {
(Parent as PageLayout).PageIndex -= 1;
curView = null;
};
#endregion
//var BodyView = new FrameLayout () {
// Width = LayoutParams.MatchParent,
// Height = Application.GetRealHeight (Application.DesignHeight - 126),
// Y = topView.Bottom,
// BackgroundColor = SkinStyle.Current.ViewColor,
//};
//AddChidren (BodyView);
bodyScrolView = new VerticalScrolViewLayout () {
Height = Application.GetRealHeight (Application.DesignHeight - 126),
Y = topView.Bottom,
//BackgroundColor = SkinStyle.Current.ViewColor,
};
AddChidren (bodyScrolView);
#region 头部View
var acRowView = new FrameLayout () {
Height = Application.GetRealHeight (158),
};
bodyScrolView.AddChidren (acRowView);
acRowView.AddTag ("ID", ac.LoopID);
var btnName = new Button () {
Width = Application.GetRealWidth (400),
Height = Application.GetRealHeight (26),
TextAlignment = TextAlignment.CenterLeft,
Y = Application.GetRealWidth (32),
X = Application.GetRealWidth (34),
TextColor = SkinStyle.Current.TextColor1,
TextSize = 14,
TextID = R.MyInternationalizationString.IndoorEnvironment
};
acRowView.AddChidren (btnName);
//btnName.Text = "室内环境";
btnACSwitch = new Button () {
Width = Application.GetMinRealAverage (90),
Height = Application.GetMinRealAverage (53),
X = Application.GetRealWidth (640 - 90 - 32),
Y = Application.GetRealHeight (18),
UnSelectedImagePath = "Item/SwitchClose.png",
SelectedImagePath = "Item/SwitchOpen.png",
Tag = "Switch"
};
acRowView.AddChidren (btnACSwitch);
btnACSwitch.MouseUpEventHandler += (sender3, e3) => {
//btnACSwitch.IsSelected = !btnACSwitch.IsSelected;
System.Console.WriteLine ($"============>tempSiwtch: { ac.Name}");
btnACSwitch.IsSelected = !btnACSwitch.IsSelected;
ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
UpdateACStatus (ac, true);
//发送控制命令
SetACMode (ac);
};
if (0 < ac.Power) {
btnACSwitch.IsSelected = true;
}
btnTempIcon = new Button () {
X = Application.GetRealWidth (23),
Y = Application.GetRealHeight (86),
Width = Application.GetMinRealAverage (44),
Height = Application.GetMinRealAverage (44),
UnSelectedImagePath = "ACMerrill/ACTempG.png",
SelectedImagePath = "ACMerrill/ACTemp.png",
};
acRowView.AddChidren (btnTempIcon);
btnIndoorTempValues = new Button () {
//X = btnTempIcon.Right,
X = Application.GetRealWidth (78),
Width = Application.GetRealWidth (120),
Height = Application.GetMinRealAverage (36),
Y = Application.GetRealHeight (90),
Text = ac.IndoorTemperature.ToString () + "°C",
TextColor = MLTextColor,
TextAlignment = TextAlignment.CenterLeft,
TextSize = 18,
Tag = "Temp"
};
acRowView.AddChidren (btnIndoorTempValues);
btnHumidityIcon = new Button () {
X = Application.GetRealWidth (203),
Y = Application.GetRealHeight (86),
Width = Application.GetMinRealAverage (44),
Height = Application.GetMinRealAverage (44),
UnSelectedImagePath = "ACMerrill/ACHumidityG.png",
SelectedImagePath = "ACMerrill/ACHumidity.png",
};
acRowView.AddChidren (btnHumidityIcon);
btnIndoorHumidityValues = new Button () {
//X = btnHumidityIcon.Right,
X = Application.GetRealWidth (258),
Width = Application.GetRealWidth (120),
Height = Application.GetMinRealAverage (36),
Y = Application.GetRealHeight (90),
Text = ac.IndoorHumidity.ToString () + "%",
TextColor = MLTextColor,
TextAlignment = TextAlignment.CenterLeft,
TextSize = 18,
Tag = "Humidity"
};
acRowView.AddChidren (btnIndoorHumidityValues);
var btnDeviceRowLine = new Button () {
Y = acRowView.Bottom,
Height = Application.GetRealHeight (16),
BackgroundColor = SkinStyle.Current.LineColor,
};
bodyScrolView.AddChidren (btnDeviceRowLine);
#endregion
#region TempView
AddTempView ();
#endregion
#region 模式
AddModeView ();
#endregion
UpdateACStatus (ac, true);
ReadStatus (ac);
}
///
/// 温度View
///
void AddTempView ()
{
#region TempView
var TempView = new FrameLayout () {
Width = LayoutParams.MatchParent,
Height = Application.GetRealHeight (138),
};
bodyScrolView.AddChidren (TempView);
var btnLine2 = new Button () {
Height = 1,
BackgroundColor = SkinStyle.Current.LineColor,
};
bodyScrolView.AddChidren (btnLine2);
btnSetTemperature = new Button () {
Width = Application.GetMinRealAverage (200),
Height = Application.GetRealHeight (80),
Y = Application.GetRealHeight (39),
Gravity = Gravity.CenterHorizontal,
Text = ac.SetTemperature.ToString () + "°",
TextSize = 42,
TextAlignment = TextAlignment.Center,
Enable = false,
TextColor = SkinStyle.Current.TextColor1
};
TempView.AddChidren (btnSetTemperature);
//if (ac.TemperatureMode == 1) {
// btnSetTemperature.Text = ac.SetTemperature.ToString () + "°F";
//} else {
// btnSetTemperature.Text = ac.SetTemperature.ToString () + "°C";
//}
btnReduceTemperature = new Button () {
Width = Application.GetMinRealAverage (129),
Height = Application.GetMinRealAverage (129),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "AC/ac-1.png",
SelectedImagePath = "AC/ac_on-.png",
};
TempView.AddChidren (btnReduceTemperature);
btnReduceTemperature.MouseDownEventHandler += (sender, e) => {
btnReduceTemperature.IsSelected = true;
};
btnReduceTemperature.MouseUpEventHandler += (sender, e) => {
btnReduceTemperature.IsSelected = false;
if (ac.SetTemperature == 5) return;
ac.SetTemperature--;
if (ac.SetTemperature < 5) {
ac.SetTemperature = 6;
}else if (ac.SetTemperature > 35) {
ac.SetTemperature = 35;
}
UpdateACStatus (ac, true);
//发送控制命令
SetACMode (ac);
};
BtnAddTemperature = new Button () {
Width = Application.GetMinRealAverage (129),
Height = Application.GetMinRealAverage (129),
X = Application.GetRealWidth (640 - 129),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "AC/ac+1.png",
SelectedImagePath = "AC/ac_on+.png",
};
TempView.AddChidren (BtnAddTemperature);
BtnAddTemperature.MouseDownEventHandler += (sender, e) => {
BtnAddTemperature.IsSelected = true;
};
BtnAddTemperature.MouseUpEventHandler += (sender, e) => {
BtnAddTemperature.IsSelected = false;
if (ac.SetTemperature == 35) return;
ac.SetTemperature++;
if (ac.SetTemperature < 5) {
ac.SetTemperature = 6;
} else if (ac.SetTemperature > 35) {
ac.SetTemperature = 35;
}
UpdateACStatus (ac, true);
//发送控制命令
SetACMode (ac);
};
#endregion
}
///
/// 模式View
///
void AddModeView ()
{
//var TempView = new FrameLayout () {
// Width = LayoutParams.MatchParent,
// Height = Application.GetRealHeight (231),
//};
//bodyScrolView.AddChidren (TempView);
#region 模式
var acModeView = new FrameLayout () {
Width = LayoutParams.MatchParent,
Height = Application.GetRealHeight (231),
};
bodyScrolView.AddChidren (acModeView);
//分割线
var btnLine1 = new Button () {
Height = 1,
BackgroundColor = SkinStyle.Current.LineColor,
};
bodyScrolView.AddChidren (btnLine1);
btnACModeLeft = new Button () {
Width = Application.GetMinRealAverage (129),
Height = Application.GetMinRealAverage (129),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "AC/ac_left.png",
SelectedImagePath = "AC/ACLeftSelected.png",
};
acModeView.AddChidren (btnACModeLeft);
var btnModeName = new Button () {
Width = Application.GetRealWidth (200),
Height = Application.GetRealHeight (30),
Gravity = Gravity.CenterHorizontal,
Y = Application.GetRealHeight (32),
TextID = R.MyInternationalizationString.UserACMode,
TextColor = SkinStyle.Current.ButtonColor,
TextSize = 16
};
acModeView.AddChidren (btnModeName);
btnModeIcon = new Button () {
Width = Application.GetMinRealAverage (60),
Height = Application.GetMinRealAverage (60),
Gravity = Gravity.Center,
Y = btnModeName.Bottom + Application.GetRealHeight (26),
UnSelectedImagePath = "ACMerrill/ACCooling.png",
};
acModeView.AddChidren (btnModeIcon);
btnModeText = new Button () {
Width = Application.GetRealWidth (200),
Height = Application.GetRealHeight (26),
TextID = R.MyInternationalizationString.Cool,
Gravity = Gravity.CenterHorizontal,
Y = Application.GetRealHeight (169),
TextColor = SkinStyle.Current.TextColor1,
TextSize = 14
};
acModeView.AddChidren (btnModeText);
btnACModeRight = new Button () {
Width = Application.GetMinRealAverage (129),
Height = Application.GetMinRealAverage (129),
X = Application.GetRealWidth (640 - 129),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "AC/ac_right.png",
SelectedImagePath = "AC/ACRightSelected.png",
};
acModeView.AddChidren (btnACModeRight);
btnACModeRight.MouseDownEventHandler += (sender, e) => {
btnACModeRight.IsSelected = true;
};
btnACModeRight.MouseUpEventHandler += (sender, e) => {
btnACModeRight.IsSelected = false;
try {
if (ac.SetMode > 2) {
ac.SetMode = 2;
}
if (++ac.SetMode > 2) {
ac.SetMode = 0;
}
UpdateACStatus (ac, true);
//发送控制命令
SetACMode (ac);
} catch { }
};
btnACModeLeft.MouseDownEventHandler += (sender, e) => {
btnACModeLeft.IsSelected = true;
};
btnACModeLeft.MouseUpEventHandler += (sender, e) => {
btnACModeLeft.IsSelected = false;
try {
if (ac.SetMode == 0)
ac.SetMode = 2;
else {
ac.SetMode--;
}
} catch {
ac.SetMode = 2;
}
UpdateACStatus (ac, true);
//发送控制命令
SetACMode (ac);
};
#endregion
}
///
/// 更新空调
///
public static void UpdateACStatus (ACMerrillLoop ac, bool selfUpdate = false)
{
Application.RunOnMainThread (() => {
if (curView == null) {
return;
}
if (curView.ac != ac) {
return;
}
//if (controlTime.AddSeconds (0.8) > DateTime.Now && !selfUpdate) {
// return;
//}
try {
curView.UpdateIndoorButton (ac);
if (ac.Power == 1) {
curView.btnACSwitch.IsSelected = true;
curView.UpdateACHostModeIcon (ac.SetMode, curView.btnModeIcon, curView.btnModeText);
curView.UpdateACSetTemperature (ac, curView.btnSetTemperature);
curView.btnReduceTemperature.Enable = true;
curView.BtnAddTemperature.Enable = true;
curView.btnACModeLeft.Enable = true;
curView.btnACModeRight.Enable = true;
} else {
curView.btnACSwitch.IsSelected = false;
curView.btnReduceTemperature.Enable = false;
curView.BtnAddTemperature.Enable = false;
curView.btnACModeLeft.Enable = false;
curView.btnACModeRight.Enable = false;
}
} catch (Exception ex) {
Console.WriteLine (ex.ToString ());
}
});
}
///
/// 刷新 室内温度和室内湿度
///
///
public void UpdateIndoorButton (ACMerrillLoop ac) {
//if (ac.TemperatureMode == 0) {
// TempTypeString = "°C";
//} else {
// TempTypeString = "°F";
//}
if (ac.IndoorTemperature <= 0) {
btnIndoorTempValues.Text = "--" + TempTypeString;
} else {
btnIndoorTempValues.Text = ac.IndoorTemperature.ToString () + TempTypeString;
}
if (ac.IndoorHumidity <= 0) {
btnIndoorHumidityValues.Text = "--" + HumidityTypeString;
} else {
btnIndoorHumidityValues.Text = ac.IndoorHumidity.ToString () + HumidityTypeString;
}
if (ac.Power > 0) {
btnTempIcon.IsSelected = true;
btnHumidityIcon.IsSelected = true;
btnIndoorTempValues.Visible = true;
btnIndoorHumidityValues.Visible = true;
} else {
btnTempIcon.IsSelected = false;
btnHumidityIcon.IsSelected = false;
btnIndoorTempValues.Visible = false;
btnIndoorHumidityValues.Visible = false;
}
}
///
/// 刷新模式图标
///
///
///
///
public void UpdateACHostModeIcon (byte modeByte, Button btn = null, Button btn2 = null)
{
switch (modeByte) {
case 0:
if (btn != null)
btn.UnSelectedImagePath = "ACMerrill/ACCooling.png";
if (btn2 != null)
btn2.TextID = R.MyInternationalizationString.Cool;
break;
case 1:
if (btn != null)
btn.UnSelectedImagePath = "ACMerrill/ACHeating.png";
if (btn2 != null)
btn2.TextID = R.MyInternationalizationString.Heating;
break;
case 2:
if (btn != null)
btn.UnSelectedImagePath = "ACMerrill/ACStroke.png";
if (btn2 != null)
btn2.TextID = R.MyInternationalizationString.Ventila;
break;
//case 3:
// if (btn != null)
// btn.UnSelectedImagePath = "AC/ACAuto.png";
// if (btn2 != null)
// btn2.TextID = R.MyInternationalizationString.Auto;
// break;
//case 4:
// if (btn != null)
// btn.UnSelectedImagePath = "AC/ACDehumidification.png";
// if (btn2 != null)
// btn2.TextID = R.MyInternationalizationString.Dehumidify;
// break;
}
}
public void UpdateACSetTemperature (ACMerrillLoop ac, Button btn, bool showTempType = true)
{
btn.Text = ac.SetTemperature.ToString () + "°";
//if (showTempType) {
// if (ac.TemperatureMode == 0) {
// btn.Text = ac.SetTemperature.ToString () + "°C";
// } else {
// btn.Text = ac.SetTemperature.ToString () + "°F";
// }
//}
}
///
/// 读空调状态
///
///
void ReadStatus (ACMerrillLoop mAC) {
Control.ControlBytesSend (Command.ReadACMode, mAC.SubnetID, mAC.DeviceID, new byte [] { mAC.LoopID });
}
///
/// 发送控制指令
///
///
void SetACMode (ACMerrillLoop mAC)
{
try {
Control.ControlBytesSend (Command.SetACMode, mAC.SubnetID, mAC.DeviceID, mAC.GetACSendBytes());
} catch {
}
}
///
/// 修改备注名
///
///
void ShowDialog (ACMerrillLoop mACMerrillLoop) {
Dialog dialog = new Dialog ();
var dialogView = new FrameLayout () {
Gravity = Gravity.Center,
Width = Application.GetRealWidth (500),
Height = Application.GetRealHeight (300),
BackgroundColor = SkinStyle.Current.DialogColor,
Radius = 5,
BorderColor = SkinStyle.Current.Transparent,
BorderWidth = 1,
};
dialog.AddChidren (dialogView);
var etDeviceName = new EditText () {
Y = Application.GetRealHeight (80),
Gravity = Gravity.CenterHorizontal,
Width = Application.GetRealWidth (350),
Height = Application.GetRealHeight (70),
Text = mACMerrillLoop.Name,
TextAlignment = TextAlignment.Center,
TextColor = SkinStyle.Current.TextColor,
Radius = 1,
BorderWidth = 1,
BorderColor = SkinStyle.Current.BorderColor,
};
dialogView.AddChidren (etDeviceName);
var dialogBottomView = new FrameLayout () {
Y = Application.GetRealHeight (213),
Height = Application.GetRealHeight (90),
BackgroundColor = SkinStyle.Current.Black50Transparent,
};
dialogView.AddChidren (dialogBottomView);
var btnClose = new Button () {
Width = Application.GetRealWidth (250),
TextAlignment = TextAlignment.Center,
TextID = R.MyInternationalizationString.cancel,
TextColor = SkinStyle.Current.TextColor,
BackgroundColor = SkinStyle.Current.ButtonColor,
};
dialogBottomView.AddChidren (btnClose);
btnClose.MouseUpEventHandler += (ddss, dddsss) => {
dialog.Close ();
};
var editor = new Button () {
X = btnClose.Right + 1,
Width = Application.GetRealWidth (250),
TextAlignment = TextAlignment.Center,
TextID = R.MyInternationalizationString.SAVE,
TextColor = SkinStyle.Current.TextColor,
BackgroundColor = SkinStyle.Current.ButtonColor,
};
dialogBottomView.AddChidren (editor);
editor.MouseUpEventHandler += (dff, ffd) => {
titleBtn.Text = etDeviceName.Text;
mACMerrillLoop.Name = etDeviceName.Text;
ACMerrillHomePage.SaveMerrilEquipmentMessage ();
//ACMerrillHomePage.RefreshRowViewName (mACMerrillLoop.CommonLoopID, mACMerrillLoop.Name);
dialog.Close ();
new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.AmendTheSuccess), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
};
dialog.Show ();
}
//byte [] GetACSendBytes (ACMerrillLoop mAC)
//{
// byte [] sendBytes = new byte [13];
// sendBytes [0] = mAC.LoopID;
// sendBytes [1] = 0;
// sendBytes [2] = mAC.IndoorTemperature;
// sendBytes [3] = mAC.SetTemperature;
// sendBytes [4] = mAC.SetTemperature;
// sendBytes [5] = mAC.SetTemperature;
// sendBytes [6] = mAC.SetTemperature;
// sendBytes [7] = mAC.RealModeAndFanSpeed;
// sendBytes [8] = mAC.Power;
// sendBytes [9] = mAC.SetMode;
// sendBytes [10] = mAC.SetFanSpeed;
// sendBytes [11] = mAC.SetTemperature;
// sendBytes [12] = mAC.IndoorHumidity;//扫风状态位改为:室内湿度
// return sendBytes;
//}
}
}