using System;
|
using Shared;
|
using HDL_ON.UI.CSS;
|
using System.Collections.Generic;
|
using HDL_ON.DAL.Server;
|
|
namespace HDL_ON.UI
|
{
|
|
/// <summary>
|
/// 管理配置给音箱的设备或着场景列表
|
/// </summary>
|
public class SmartSpeakerSelectDevicesPage : FrameLayout
|
{
|
/// <summary>
|
/// bodyView
|
/// </summary>
|
FrameLayout bodyView;
|
/// <summary>
|
/// 全选按钮
|
/// </summary>
|
Button btnChooseAll;
|
/// <summary>
|
/// 当前
|
/// </summary>
|
VerticalScrolViewLayout bodyScrolView;
|
///// <summary>
|
///// 底部保存操作按钮
|
///// </summary>
|
//Button btnSave;
|
|
/// <summary>
|
/// 音箱参数
|
/// </summary>
|
SpeakerInfo speakerInfo;
|
|
/// <summary>
|
/// 设备、场景列表
|
/// </summary>
|
List<SpeakerTargetInfo> targetInfoList = new List<SpeakerTargetInfo>();
|
|
/// <summary>
|
/// 当前房间的设备和场景
|
/// </summary>
|
List<SpeakerTargetInfo> roomFunctionOrSceneList = new List<SpeakerTargetInfo>();
|
|
/// <summary>
|
/// 管理配置给音箱的设备或着场景列表
|
/// </summary>
|
/// <param name="speakerInfo">音箱参数</param>
|
/// <param name="roomFunctionOrSceneList">当前房间的功能或者场景</param>
|
public SmartSpeakerSelectDevicesPage(SpeakerInfo speakerInfo, List<SpeakerTargetInfo> roomFunctionOrSceneList)
|
{
|
bodyView = this;
|
bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
|
this.speakerInfo = speakerInfo;
|
this.roomFunctionOrSceneList = roomFunctionOrSceneList;
|
}
|
|
/// <summary>
|
/// 加载视图
|
/// </summary>
|
public void LoadPage()
|
{
|
//加载顶部菜单栏
|
new TopViewDiv(bodyView, Language.StringByID(StringId.DataManagement)).LoadTopView();
|
//顶部全选按钮
|
var allView = new FrameLayout()
|
{
|
Y = Application.GetRealHeight(64),
|
Height = Application.GetRealHeight(50),
|
BackgroundColor = CSS_Color.MainBackgroundColor,
|
};
|
bodyView.AddChidren(allView);
|
|
Button btnAllRoomText = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(280),
|
TextID = StringId.SelectedAll,
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextAlignment = TextAlignment.CenterLeft,
|
};
|
allView.AddChidren(btnAllRoomText);
|
|
btnChooseAll = new Button()
|
{
|
X = Application.GetRealWidth(331),
|
Gravity = Gravity.CenterVertical,
|
Width = Application.GetMinRealAverage(28),
|
Height = Application.GetMinRealAverage(28),
|
UnSelectedImagePath = "Public/ChooseIcon.png",
|
SelectedImagePath = "Public/ChooseOnIcon.png",
|
};
|
allView.AddChidren(btnChooseAll);
|
|
allView.AddChidren(new Button()
|
{
|
Gravity = Gravity.CenterHorizontal,
|
Y = Application.GetRealHeight(49),
|
Height = Application.GetMinReal(1),
|
Width = Application.GetRealWidth(343),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
});
|
|
bodyScrolView = new VerticalScrolViewLayout()
|
{
|
Y = allView.Bottom,
|
Height = Application.GetRealHeight(450),
|
};
|
bodyView.AddChidren(bodyScrolView);
|
|
var btnSave = new ConfirmButton()
|
{
|
Y = Application.GetRealHeight(519 + 64),
|
TextID = StringId.Save
|
};
|
bodyView.AddChidren(btnSave);
|
|
//全选按钮点击事件
|
LoadEvent_AllSharedDataChange(allView, btnChooseAll);
|
//保存按钮点击事件
|
LoadEvent_Save(btnSave);
|
//加载房间的功能和场景,并比较配置过的数据实现选中效果
|
GetDeviceAndSceneList();
|
}
|
|
|
/// <summary>
|
/// 全选按钮点击事件
|
/// </summary>
|
void LoadEvent_AllSharedDataChange(FrameLayout allView, Button btnChooseAll)
|
{
|
EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
|
{
|
btnChooseAll.IsSelected = !btnChooseAll.IsSelected;
|
var IsSelected = btnChooseAll.IsSelected;
|
//全部数据选中状态设置为true或者false
|
foreach (var info in roomFunctionOrSceneList)
|
{
|
info.IsSelect = IsSelected;
|
}
|
//刷新一次列表
|
RefreshListView();
|
};
|
btnChooseAll.MouseUpEventHandler = eventHandler;
|
allView.MouseUpEventHandler = eventHandler;
|
|
}
|
|
/// <summary>
|
/// 保存按钮点击事件
|
/// </summary>
|
/// <param name="btnSave"></param>
|
void LoadEvent_Save(Button btnSave)
|
{
|
EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
|
{
|
AddDevicesSceneList(targetInfoList);
|
};
|
|
btnSave.MouseUpEventHandler = eventHandler;
|
}
|
|
/// <summary>
|
/// 全量更新配置数据(功能和场景同时更新)
|
/// </summary>
|
/// <param name="updateList">最新的配置数据</param>
|
void AddDevicesSceneList(List<SpeakerTargetInfo> updateList)
|
{
|
var waitPage = new Loading();
|
bodyView.AddChidren(waitPage);
|
waitPage.Start(Language.StringByID(StringId.PleaseWait));
|
|
System.Threading.Tasks.Task.Run(() =>
|
{
|
try
|
{
|
//查找需要选中的目标
|
foreach (var info in roomFunctionOrSceneList)
|
{
|
var targetData = updateList.Find((obj) => obj.targetId == info.targetId);
|
if (info.IsSelect)
|
{
|
if (targetData == null)
|
{
|
updateList.Add(info);
|
}
|
}
|
else
|
{
|
if (targetData != null)
|
{
|
updateList.Remove(targetData);
|
}
|
}
|
}
|
|
//构建请求参数
|
var updateSpeakerDeviceListObj = new UpdateSpeakerDeviceListObj()
|
{
|
homeId = speakerInfo.homeId,
|
tokenId = speakerInfo.tokenId,
|
targetInfos = updateList
|
};
|
//发起请求
|
var revertObj = new HttpServerRequest().UpdateSpeakerDeviceList(updateSpeakerDeviceListObj);
|
if (revertObj.Code == StateCode.SUCCESS)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
//保存成功、页面关闭
|
Utlis.ShowTip(Language.StringByID(StringId.SavedSuccessfully));
|
if (bodyView != null)
|
{
|
bodyView.RemoveFromParent();
|
}
|
});
|
|
}
|
else
|
{
|
//提示错误
|
IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
|
}
|
}
|
catch
|
{
|
|
}
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
if (waitPage != null)
|
{
|
waitPage.RemoveFromParent();
|
waitPage = null;
|
}
|
});
|
}
|
});
|
}
|
|
/// <summary>
|
/// 加载房间的设备和场景列表
|
/// </summary>
|
void GetDeviceAndSceneList()
|
{
|
bodyScrolView.RemoveAll();
|
|
var waitPage = new Loading();
|
bodyView.AddChidren(waitPage);
|
waitPage.Start(Language.StringByID(StringId.PleaseWait));
|
|
System.Threading.Tasks.Task.Run(() =>
|
{
|
try
|
{
|
var revertObj = new HttpServerRequest().GetSpeakerDeviceList(0, speakerInfo.tokenId);
|
if (revertObj.Code == StateCode.SUCCESS)
|
{
|
var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SpeakerTargetInfo>>(revertObj.Data.ToString());
|
if (list != null && list.Count > 0)
|
{
|
targetInfoList = list;
|
}
|
else
|
{
|
targetInfoList = new List<SpeakerTargetInfo>();
|
}
|
|
//默认全选
|
bool isSelectAll = true;
|
//查找需要选中的目标
|
foreach (var info in roomFunctionOrSceneList)
|
{
|
var targetData = targetInfoList.Find((obj) => obj.targetId == info.targetId);
|
if(targetData == null)
|
{
|
info.IsSelect = false;
|
//有一个没选择则全选设置为false
|
isSelectAll = false;
|
}
|
else
|
{
|
info.IsSelect = true;
|
}
|
}
|
|
Application.RunOnMainThread(() => {
|
//设置当前全选
|
btnChooseAll.IsSelected = isSelectAll;
|
RefreshListView();
|
});
|
|
}
|
else
|
{
|
//提示错误
|
IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
|
}
|
}
|
catch
|
{
|
|
}
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
if (waitPage != null)
|
{
|
waitPage.RemoveFromParent();
|
waitPage = null;
|
}
|
});
|
}
|
});
|
}
|
|
/// <summary>
|
/// RefreshListView
|
/// </summary>
|
void RefreshListView()
|
{
|
bodyScrolView.RemoveAll();
|
|
if (roomFunctionOrSceneList == null) return;
|
|
foreach (var roomData in roomFunctionOrSceneList)
|
{
|
AddRowView(roomData);
|
}
|
|
}
|
|
|
/// <summary>
|
/// AddRowView
|
/// </summary>
|
/// <param name="info"></param>
|
void AddRowView(SpeakerTargetInfo info)
|
{
|
|
var roomView = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(50),
|
BackgroundColor = CSS_Color.MainBackgroundColor,
|
Tag = "row"
|
};
|
bodyScrolView.AddChidren(roomView);
|
|
Button btnRoomText = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(280),
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextAlignment = TextAlignment.CenterLeft,
|
Text = info.targetName,
|
};
|
roomView.AddChidren(btnRoomText);
|
|
Button btnChoose = new Button()
|
{
|
X = Application.GetRealWidth(331),
|
Gravity = Gravity.CenterVertical,
|
Width = Application.GetMinRealAverage(28),
|
Height = Application.GetMinRealAverage(28),
|
UnSelectedImagePath = "Public/ChooseIcon.png",
|
SelectedImagePath = "Public/ChooseOnIcon.png",
|
Tag = "ChooseIcon"
|
};
|
roomView.AddChidren(btnChoose);
|
|
btnChoose.IsSelected = info.IsSelect;
|
|
var btnLine = new Button()
|
{
|
Gravity = Gravity.CenterHorizontal,
|
//Y = Application.GetRealHeight(49),
|
Height = Application.GetRealHeight(1),
|
Width = Application.GetRealWidth(343),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
};
|
bodyScrolView.AddChidren(btnLine);
|
|
|
EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
|
{
|
btnChoose.IsSelected = !btnChoose.IsSelected;
|
info.IsSelect = btnChoose.IsSelected;
|
//1.如果点击选择,判断是否需要设置全选
|
if (btnChoose.IsSelected)
|
{
|
//1.1 默认全选
|
bool isSelectAll = true;
|
foreach (var targetInfo in roomFunctionOrSceneList)
|
{
|
if(targetInfo.IsSelect == false)
|
{
|
//1.2 有一个还没选中就退出,无需选中全选按钮
|
isSelectAll = false;
|
break;
|
}
|
}
|
|
if (isSelectAll)
|
{
|
btnChooseAll.IsSelected = true;
|
}
|
}
|
else
|
{
|
//取消全选
|
if (btnChooseAll.IsSelected)
|
{
|
btnChooseAll.IsSelected = false;
|
}
|
}
|
|
};
|
|
btnChoose.MouseUpEventHandler = eventHandler;
|
roomView.MouseUpEventHandler = eventHandler;
|
btnRoomText.MouseUpEventHandler = eventHandler;
|
}
|
|
|
}
|
}
|