using Shared;
using System;
using System.Collections.Generic;
using System.Text;
using HDL_ON.UI.CSS;
using HDL_ON.Entity;
using HDL_ON.DriverLayer;
using HDL_ON.UI.Music;
using HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock;
namespace HDL_ON.UI
{
///
/// 视频门锁的控制界面
///
public class VideoDoorLockPage : FrameLayout
{
#region ■ 变量声明___________________________
///
/// 设备
///
private Function device;
///
/// 上一级界面的设备名字控件
///
private Button btnDeviceName;
///
/// 上一级界面的房间名字控件
///
private Button btnRoomName;
///
/// 头部布局
///
private TopView topView;
///
/// 当前设备名称
///
private Button btnCurrDeviceName;
///
/// 区域
///
private Button btnCurrDeviceRoom;
///
/// 电量父控件
///
private FrameLayout cellFrame;
///
/// 电量
///
private Button btnCell;
///
/// 电量进度条
///
private DiyArcSeekBar cellDiyArcSeekBar;
///
///收藏图标
///
private Button btnCollectIcon;
///
/// 门锁状态
///
private Button btnDoorLockIcon;
Button btnDoorlockStatus;
///
/// 实时视频
///
private CustomFrameLayout rtvFL;
///
/// 临时密码
///
private CustomFrameLayout pswFL;
///
/// 历史记录
///
private CustomFrameLayout recordFL;
///
/// 表示来自那个界面
///
private CommonMethod.Comerom comerom;
///
/// 删除设备后需要更新界面的回调
///
public Action action;
#endregion
///
/// 构造函数
///
/// 设备
/// 上一级界面的设备名字控件(注:不能传null,没有可以传new Button())
/// 上一级界面的房间名字控件(注:不能传null,没有可以传new Button())
public VideoDoorLockPage(Function function, Button btnDeviceName, Button btnRoomName, CommonMethod.Comerom comerom, Action action)
{
this.device = function;
this.btnDeviceName = btnDeviceName;
this.btnRoomName = btnRoomName;
this.comerom = comerom;
this.action = action;
}
public void Show()
{
//初始化UI
this.InitUI();
//初始化事件
this.EventListener();
//读取数据
this.ReadData();
}
///
/// 初始化界面
///
private void InitUI()
{
#region ---界面布局---
this.BackgroundColor = MusicColor.ViewColor;
this.topView = new TopView();
this.topView.setBtn.Visible = true;
this.topView.topNameBtn.TextID = StringId.shipinmensuo;
this.AddChidren(topView.TopFLayoutView());
var middleFl = new FrameLayout
{
Y = topView.fLayout.Bottom,
Height = Application.GetRealHeight(H_W.H - H_W.T_Height),
};
this.AddChidren(middleFl);
var whiteFl = new FrameLayout
{
Y = Application.GetRealHeight(24),
X = Application.GetRealWidth(24),
Height = Application.GetRealHeight(526),
Width = Application.GetRealWidth(327),
BackgroundImagePath = "MusicIcon/playBj.png",
Name = "fl",
};
middleFl.AddChidren(whiteFl);
btnCollectIcon = new Button
{
X = Application.GetRealWidth(264),
Y = Application.GetRealHeight(14),
Width = Application.GetRealWidth(40),
Height = Application.GetRealWidth(40),
UnSelectedImagePath = "MusicIcon/collect.png",
SelectedImagePath = "MusicIcon/collectSelected.png",
IsSelected = this.device.collect,
Name = "collect"
};
whiteFl.AddChidren(btnCollectIcon);
btnCurrDeviceName = new Button
{
TextSize = TextSize.Text24,
TextColor = MusicColor.Text18Color,
Width = Application.GetRealWidth(160),
Height = Application.GetRealHeight(33),
Y = Application.GetRealHeight(16),
X = Application.GetRealWidth(16),
Text = this.device.name,
TextAlignment = TextAlignment.CenterLeft,
};
whiteFl.AddChidren(btnCurrDeviceName);
btnCurrDeviceRoom = new Button
{
TextSize = TextSize.Text12,
TextColor = MusicColor.MusicNoTxetColor,
Width = Application.GetRealWidth(160),
Height = Application.GetRealHeight(17),
Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(4),
X = Application.GetRealWidth(16),
Text = this.device.GetRoomListName(),
TextAlignment = TextAlignment.CenterLeft,
};
whiteFl.AddChidren(btnCurrDeviceRoom);
cellFrame = new FrameLayout
{
X = btnCurrDeviceRoom.Right + Application.GetRealWidth(20),
Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(5),
Width = Application.GetRealWidth(30),
Height = Application.GetRealHeight(16),
};
whiteFl.AddChidren(cellFrame);
cellDiyArcSeekBar = new DiyArcSeekBar
{
X = Application.GetRealWidth(3),
Y = Application.GetRealHeight(3),
Width = cellFrame.Width + Application.GetRealWidth(-6),
Height = cellFrame.Height + Application.GetRealHeight(-6),
Progress = 60,
ProgressBarColor = MusicColor.MusicNoTxetColor,
MaxValue = 100,
MinValue = 0,
//IsCanMove = false,
//IsCanScrolled=false,
};
//cellFrame.AddChidren(cellDiyArcSeekBar);
btnCell = new Button
{
TextSize = TextSize.Text10,
TextColor = MusicColor.TextColor,
Text = "60" + "%",
TextAlignment = TextAlignment.Center,
UnSelectedImagePath = "FunctionIcon/DoorLock/Cell.png",
};
cellFrame.AddChidren(btnCell);
#if __IOS__
//btnCell.Padding = new Padding(0,0,0,0);
btnCell.Width += 5;
cellFrame.Width += 5;
#else
#endif
//门锁状态
btnDoorLockIcon = new Button
{
X = Application.GetRealWidth(65),
Y = Application.GetRealHeight(108),
Width = Application.GetRealWidth(198),
Height = Application.GetRealWidth(200),
UnSelectedImagePath = "FunctionIcon/DoorLock/UnLocked.png",
SelectedImagePath = "FunctionIcon/DoorLock/UnLocking.png",
};
whiteFl.AddChidren(btnDoorLockIcon);
this.CalculatedPosition();//重新计算宽度
btnDoorlockStatus = new Button()
{
Width = Application.GetRealWidth(200),
Height = Application.GetRealHeight(62),
Y = btnDoorLockIcon.Bottom,
TextAlignment = TextAlignment.Center,
Gravity = Gravity.CenterHorizontal,
TextID = StringId.DoorlockOpen,
TextColor = CSS_Color.WarningColor,
TextSize = 16,
};
whiteFl.AddChidren(btnDoorlockStatus);
int heightY = btnDoorLockIcon.Bottom + Application.GetRealHeight(133);
//实时视频
rtvFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
whiteFl.AddChidren(rtvFL);
rtvFL.Y = heightY;
rtvFL.X = Application.GetRealWidth(26);
rtvFL.AddImageView();
rtvFL.AddTextButtonView();
rtvFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/RTV.png";
rtvFL.GetTextButton().TextID = StringId.shishishipin;
//临时密码
pswFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
whiteFl.AddChidren(pswFL);
pswFL.Y = heightY;
pswFL.X = rtvFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
pswFL.AddImageView();
pswFL.AddTextButtonView();
pswFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/OneOpenLock.png";
pswFL.GetTextButton().TextID = StringId.linshimima1;
if (device.omodel.Contains("CS-DL30F-V100"))
{
rtvFL.Visible = rtvFL.Enable = false;
pswFL.X = Application.GetRealWidth(26);
}
//历史记录
recordFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
whiteFl.AddChidren(recordFL);
recordFL.Y = heightY;
recordFL.X = pswFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
recordFL.AddImageView();
recordFL.AddTextButtonView();
recordFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/HistoryList.png";
recordFL.GetTextButton().TextID = StringId.lishijilu;
if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
{
//用户管理
CustomFrameLayout userManagerView = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
whiteFl.AddChidren(userManagerView);
userManagerView.Y = heightY;
userManagerView.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
userManagerView.AddImageView();
userManagerView.AddTextButtonView();
userManagerView.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockUserManager.png";
userManagerView.GetTextButton().TextID = StringId.UserManagement;
userManagerView.SetClickListener((fl, btnImage, btnText) =>
{
var page = new VideoDoorlockUserListPage(device);
MainPage.BasePageView.AddChidren(page);
page.LoadPage();
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
});
}
#endregion
}
///
/// 注册事件
///
private void EventListener()
{
//返回
this.topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
{
this.RemoveFromParent();
};
//设置
this.topView.clickSetBtn.MouseUpEventHandler += (sender, e) =>
{
CommonMethod.Current.MainThread(() =>
{
//调用秀绕的界面
var infoView = new UI.FunctionBaseInfoSetPage(this.device, () =>
{
if (this.btnDeviceName == null || this.btnRoomName == null || this.device == null)
{
return;
}
////刷新显示
this.btnDeviceName.Text = this.device.name;
this.btnRoomName.Text = this.device.GetRoomListName();
this.btnCurrDeviceName.Text = this.device.name;
this.btnCurrDeviceRoom.Text = this.device.GetRoomListName();
this.CalculatedPosition();//重新计算宽度
});
infoView.actionDel += () =>
{
//解绑设备后
this.RemoveFromParent();
this.action?.Invoke();
};
MainPage.BasePageView.AddChidren(infoView);
infoView.LoadPage();
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
});
};
//收藏
this.btnCollectIcon.MouseUpEventHandler += (sender, e) =>
{
btnCollectIcon.IsSelected = this.device.collect = !btnCollectIcon.IsSelected;
this.device.CollectFunction();
};
int delayTimeMaxValue = 0;//
var startTime = DateTime.Now;
//实时视频
this.rtvFL.SetClickListener((fl, btnStateImage, btnStateText) =>
{
bool isDeyayClick = false;
var clickTime = DateTime.Now;
if ((clickTime - startTime).TotalMilliseconds > delayTimeMaxValue)
{
delayTimeMaxValue = 2*1000;
startTime = clickTime;
isDeyayClick = true;
}
if (!isDeyayClick)
{
return;
}
CommonMethod.Current.SkipRTVActivity(this.device.sid, this.device.deviceId, this.device.spk, false);
});
var lastClickTime = DateTime.MinValue;
//临时密码
this.pswFL.SetClickListener((fl, btnStateImage, btnStateText) =>
{
if (lastClickTime.AddSeconds(3) > DateTime.Now)
{
return;
}
lastClickTime = DateTime.Now;
CommonMethod.Current.SkipPSWActivity(this.device.deviceId);
});
//历史记录
this.recordFL.SetClickListener((fl, btnStateImage, btnStateText) =>
{
if (lastClickTime.AddSeconds(3) > DateTime.Now)
{
return;
}
lastClickTime = DateTime.Now;
//VideoDoorlockHistoryPage historyPage = new VideoDoorlockHistoryPage(device);
//MainPage.BasePageView.AddChidren(historyPage);
//historyPage.LoadPage();
//MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
var waitPage = new Loading();
this.AddChidren(waitPage);
waitPage.Start("");
new System.Threading.Thread(() =>
{
try
{
Application.RunOnMainThread(() =>
{
CommonMethod.Current.SkipRecordActivity(this.device.deviceId);
});
}catch(Exception ex)
{
}
finally
{
Application.RunOnMainThread(() => {
waitPage.Hide();
});
}
})
{ IsBackground = true }.Start();
});
}
///
/// 初始数据
///
private void ReadData()
{
CommonMethod.Current.Loading.Start();
CommonMethod.Current.SunThread(() =>
{
try
{
var videoDoorLockInfo = VideDoorLockSend.Current.GetVideoDoorLockState(this.device);
var cellInfo = VideDoorLockSend.Current.GetCellValue(this.device);
CommonMethod.Current.MainThread(() =>
{
//this.cellDiyArcSeekBar.Progress = i;
//更新电量值
this.btnCell.Text = cellInfo.remain + "%";
if(videoDoorLockInfo.doorStatus == "open")
{
this.btnDoorLockIcon.IsSelected = true;
this.btnDoorlockStatus.TextID = StringId.DoorlockOpen;
this.btnDoorlockStatus.TextColor = CSS_Color.WarningColor;
}
else
{
this.btnDoorLockIcon.IsSelected = false;
this.btnDoorlockStatus.TextID = StringId.DoorlockClose;
this.btnDoorlockStatus.TextColor = 0xFF000000;
}
});
}
catch { }
finally
{
Application.RunOnMainThread(() =>
{
CommonMethod.Current.Loading.Hide();
});
}
});
}
///
/// 重新计算宽度(设备名称,房间控件)
///
private void CalculatedPosition()
{
this.btnCurrDeviceName.Width = this.btnCurrDeviceName.GetTextWidth();
this.btnCurrDeviceName.Width += 10;
if (this.btnCurrDeviceName.GetTextWidth() > this.btnCollectIcon.X)
{
//重新计算宽度
this.btnCurrDeviceName.Width = this.btnCollectIcon.X + Application.GetRealWidth(-10);
}
this.btnCurrDeviceRoom.Width = this.btnCurrDeviceRoom.GetTextWidth();
this.btnCurrDeviceRoom.Width += 10;
if (this.btnCurrDeviceRoom.GetTextWidth() > this.btnCollectIcon.X)
{
//重新计算宽度
this.btnCurrDeviceRoom.Width = this.btnCollectIcon.X + Application.GetRealWidth(-20 - 10);
}
this.cellFrame.X = this.btnCurrDeviceRoom.Right + Application.GetRealWidth(20);
}
///
/// 更新状态
///
public void UpdateState(PushMessageType pushMessageType)
{
CommonMethod.Current.MainThread(() =>
{
if (pushMessageType == PushMessageType.Alarm)
{
//门锁电池值
if (this.btnCell != null)
{
//videoDoorLockPage.btnCell.Text = "";
}
}
else
{
if (this.btnDoorLockIcon != null && !this.btnDoorLockIcon.IsSelected)
{
this.btnDoorLockIcon.IsSelected = false;
}
}
});
}
}
///
/// 自己弄一个FrameLayout
///
class CustomFrameLayout : FrameLayout
{
public const int widthFrameLayout = 48;
public const int heightFrameLayout = 53;
public const int yFrameLayout = 442;
public const int xFrameLayout = 41;
public const int interval = 30;//行中的列间隔值
public CustomFrameLayout(int width, int height, int x = 0, int y = 0)
{
this.Width = Application.GetRealWidth(width);
this.Height = Application.GetRealHeight(height);
this.X = Application.GetRealWidth(x);
this.Y = Application.GetRealHeight(y);
}
Button btnStateImage = new Button
{
Width = Application.GetRealWidth(32),
Height = Application.GetRealWidth(32),
Gravity = Gravity.TopCenter,
Name = "btnStateImage",
};
Button btnStateText = new Button
{
Y = Application.GetRealHeight(4),
Width = Application.GetRealWidth(100),
Height = Application.GetRealWidth(20),
TextID = StringId.dangqianmenweiguan,
TextSize = TextSize.Text12,
TextColor = MusicColor.TextCancelColor,
TextAlignment = TextAlignment.Center,
Gravity = Gravity.CenterHorizontal,
Name = "btnStateText",
IsMoreLines = true,
};
public void AddImageView()
{
this.AddChidren(btnStateImage);
}
public void AddTextButtonView()
{
btnStateText.Y += btnStateImage.Bottom;
this.AddChidren(btnStateText);
}
public Button GetImageButton()
{
//if (!this.AddWithout(this.btnStateImage))
//{
// this.AddImageView();
//}
return this.btnStateImage;
}
public Button GetTextButton()
{
//if (!this.AddWithout(this.btnStateText))
//{
// this.AddTextButtonView();
//}
return this.btnStateText;
}
///
/// 事件监听方法
///
/// 回调(第一个是父类对象;第二个是图标对象;第三个是状态对象
/// 注意:在SetClickListener()前面调用AddImageView()才有效
/// 注意:在SetClickListener()前面调用AddImageView()才有效
public void SetClickListener(Action action)
{
EventHandler click = (sender, e) =>
{
action?.Invoke(this, btnStateImage, btnStateText);
};
this.MouseUpEventHandler += click;
btnStateImage.MouseUpEventHandler += click;
btnStateText.MouseUpEventHandler += click;
}
///
/// 在父布局查找子控件是否存在
///
/// 查找对象
/// 存在为true,否则为false
private bool AddWithout(View btn)
{
if (this.ChildrenCount <= 0 || btn == null)
{
return false;
}
for (int i = 0; i < this.ChildrenCount; i++)
{
View view = this.GetChildren(i);
if (view == null)
{
continue;
}
if (view is Button)
{
if (view.Name == btn.Name)
{
return true;
}
}
}
return false;
}
}
}