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
|
{
|
/// <summary>
|
/// 视频门锁的控制界面
|
/// </summary>
|
public class VideoDoorLockPage : FrameLayout
|
{
|
#region ■ 变量声明___________________________
|
/// <summary>
|
/// 设备
|
/// </summary>
|
private Function device;
|
/// <summary>
|
/// 上一级界面的设备名字控件
|
/// </summary>
|
private Button btnDeviceName;
|
/// <summary>
|
/// 上一级界面的房间名字控件
|
/// </summary>
|
private Button btnRoomName;
|
/// <summary>
|
/// 头部布局
|
/// </summary>
|
private TopView topView;
|
/// <summary>
|
/// 当前设备名称
|
/// </summary>
|
private Button btnCurrDeviceName;
|
/// <summary>
|
/// 区域
|
/// </summary>
|
private Button btnCurrDeviceRoom;
|
/// <summary>
|
/// 电量父控件
|
/// </summary>
|
private FrameLayout cellFrame;
|
/// <summary>
|
/// 电量
|
/// </summary>
|
private Button btnCell;
|
/// <summary>
|
/// 电量进度条
|
/// </summary>
|
private DiyArcSeekBar cellDiyArcSeekBar;
|
/// <summary>
|
///收藏图标
|
/// </summary>
|
private Button btnCollectIcon;
|
/// <summary>
|
/// 门锁状态
|
/// </summary>
|
private Button btnDoorLockIcon;
|
/// <summary>
|
/// 实时视频
|
/// </summary>
|
private CustomFrameLayout rtvFL;
|
/// <summary>
|
/// 临时密码
|
/// </summary>
|
private CustomFrameLayout pswFL;
|
/// <summary>
|
/// 历史记录
|
/// </summary>
|
private CustomFrameLayout recordFL;
|
|
/// <summary>
|
/// 表示来自那个界面
|
/// </summary>
|
private CommonMethod.Comerom comerom;
|
/// <summary>
|
/// 删除设备后需要更新界面的回调
|
/// </summary>
|
public Action action;
|
#endregion
|
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
/// <param name="function">设备</param>
|
/// <param name="btnDeviceName">上一级界面的设备名字控件(注:不能传null,没有可以传new Button())</param>
|
/// <param name="btnRoomName">上一级界面的房间名字控件(注:不能传null,没有可以传new Button())</param>
|
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();
|
|
}
|
|
|
/// <summary>
|
/// 初始化界面
|
/// </summary>
|
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();//重新计算宽度
|
|
int heightY = btnDoorLockIcon.Bottom + Application.GetRealHeight(70);
|
//实时视频
|
rtvFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
|
whiteFl.AddChidren(rtvFL);
|
rtvFL.Y = heightY;
|
rtvFL.X = Application.GetRealWidth(41);
|
rtvFL.AddImageView();
|
rtvFL.AddTextButtonView();
|
rtvFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/RTV.png";
|
rtvFL.GetTextButton().TextID = StringId.shishishipin;
|
//历史记录
|
recordFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
|
whiteFl.AddChidren(recordFL);
|
recordFL.Y = heightY;
|
recordFL.X = rtvFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
|
recordFL.AddImageView();
|
recordFL.AddTextButtonView();
|
recordFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/HistoryList.png";
|
recordFL.GetTextButton().TextID = StringId.lishijilu;
|
//临时密码
|
pswFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
|
whiteFl.AddChidren(pswFL);
|
pswFL.Y = heightY;
|
pswFL.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
|
pswFL.AddImageView();
|
pswFL.AddTextButtonView();
|
pswFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/OneOpenLock.png";
|
pswFL.GetTextButton().TextID = StringId.linshimima1;
|
|
|
|
#endregion
|
|
|
}
|
/// <summary>
|
/// 注册事件
|
/// </summary>
|
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();
|
};
|
//实时视频
|
this.rtvFL.SetClickListener((fl, btnStateImage, btnStateText) =>
|
{
|
CommonMethod.Current.SkipRTVActivity(this.device.sid, this.device.deviceId, this.device.spk, false);
|
});
|
//临时密码
|
this.pswFL.SetClickListener((fl, btnStateImage, btnStateText) =>
|
{
|
CommonMethod.Current.SkipPSWActivity(this.device.deviceId);
|
});
|
//历史记录
|
this.recordFL.SetClickListener((fl, btnStateImage, btnStateText) =>
|
{
|
CommonMethod.Current.SkipRecordActivity(this.device.deviceId);
|
});
|
|
|
}
|
/// <summary>
|
/// 初始数据
|
/// </summary>
|
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 + "%";
|
this.btnDoorLockIcon.IsSelected = videoDoorLockInfo.doorStatus == "open";
|
});
|
}
|
catch { }
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
CommonMethod.Current.Loading.Hide();
|
});
|
}
|
});
|
}
|
|
|
|
/// <summary>
|
/// 重新计算宽度(设备名称,房间控件)
|
/// </summary>
|
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);
|
}
|
|
/// <summary>
|
/// 更新状态
|
/// </summary>
|
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;
|
}
|
}
|
|
});
|
|
}
|
|
}
|
/// <summary>
|
/// 自己弄一个FrameLayout
|
/// </summary>
|
class CustomFrameLayout : FrameLayout
|
{
|
public const int widthFrameLayout = 48;
|
public const int heightFrameLayout = 53;
|
public const int yFrameLayout = 378;
|
public const int xFrameLayout = 41;
|
public const int interval = 51;//行中的列间隔值
|
|
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"
|
};
|
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;
|
}
|
|
/// <summary>
|
/// 事件监听方法
|
/// </summary>
|
/// <param name="action">回调(第一个是父类对象;第二个是图标对象;第三个是状态对象</param>
|
/// <param name="button1">注意:在SetClickListener()前面调用AddImageView()才有效</param>
|
/// <param name="button2">注意:在SetClickListener()前面调用AddImageView()才有效</param>
|
public void SetClickListener(Action<FrameLayout, Button, Button> action)
|
{
|
EventHandler<MouseEventArgs> click = (sender, e) =>
|
{
|
action?.Invoke(this, btnStateImage, btnStateText);
|
};
|
this.MouseUpEventHandler += click;
|
btnStateImage.MouseUpEventHandler += click;
|
btnStateText.MouseUpEventHandler += click;
|
|
}
|
|
|
|
/// <summary>
|
/// 在父布局查找子控件是否存在
|
/// </summary>
|
/// <param name="btn">查找对象</param>
|
/// <returns>存在为true,否则为false</returns>
|
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;
|
|
}
|
|
|
|
|
}
|
|
|
}
|