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 SmartSpeakerListPage : FrameLayout
|
{
|
FrameLayout bodyView;
|
/// <summary>
|
///
|
/// </summary>
|
FrameLayout emptyTipFrameLayout;
|
/// <summary>
|
/// 当前
|
/// </summary>
|
VerticalScrolViewLayout bodyScrolView;
|
/// <summary>
|
/// 内容为空提示View
|
/// </summary>
|
FrameLayout emptyTipView;
|
|
/// 目前对接的音箱类型
|
/// 小度=DuerOS
|
/// Google Home = Google
|
/// Alexa Echo = Alexa
|
/// Alice = Alice
|
/// 天猫精灵=Aligenie
|
/// 思必驰=AISpeech
|
|
|
/// <summary>
|
///
|
/// </summary>
|
public SmartSpeakerListPage()
|
{
|
bodyView = this;
|
bodyView.BackgroundColor = CSS_Color.BackgroundColor;
|
}
|
|
/// <summary>
|
/// 加载视图
|
/// </summary>
|
public void LoadPage()
|
{
|
new TopViewDiv(bodyView, Language.StringByID(StringId.SmartSpeaker)).LoadTopView();
|
|
int bodyY = Application.GetRealHeight(64);
|
bodyScrolView = new VerticalScrolViewLayout()
|
{
|
Y = bodyY,
|
Height = bodyView.Height - bodyY,
|
BackgroundColor = CSS_Color.BackgroundColor,
|
|
};
|
bodyView.AddChidren(bodyScrolView);
|
|
LoadSmartSpeakertListView(bodyScrolView);
|
}
|
|
/// <summary>
|
/// 添加内容为空提示页面
|
/// </summary>
|
void AddEmptyTipView()
|
{
|
emptyTipView = new FrameLayout()
|
{
|
Height = bodyScrolView.Height,
|
Width = bodyScrolView.Width,
|
};
|
bodyScrolView.AddChidren(emptyTipView);
|
|
var tipView = new EmptyTipView()
|
{
|
Gravity = Gravity.Center
|
};
|
emptyTipView.AddChidren(tipView);
|
}
|
|
/// <summary>
|
/// 加载音箱列表
|
/// </summary>
|
/// <param name="VerticalScrolViewMiddle"></param>
|
void LoadSmartSpeakertListView(VerticalScrolViewLayout VerticalScrolViewMiddle)
|
{
|
VerticalScrolViewMiddle.RemoveAll();
|
|
var waitPage = new Loading();
|
bodyView.AddChidren(waitPage);
|
waitPage.Start(Language.StringByID(StringId.PleaseWait));
|
|
System.Threading.Tasks.Task.Run(() =>
|
{
|
try
|
{
|
|
var revertObj = new HttpServerRequest().GetSpeakerList();
|
if (revertObj.Code == StateCode.SUCCESS)
|
{
|
var speakerListRes = Newtonsoft.Json.JsonConvert.DeserializeObject<SpeakerListRes>(revertObj.Data.ToString());
|
if (speakerListRes != null && speakerListRes.list != null && speakerListRes.list.Count > 0)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
foreach (var speaker in speakerListRes.list)
|
{
|
AddRowView(speaker, VerticalScrolViewMiddle);
|
}
|
|
});
|
}
|
else
|
{
|
Application.RunOnMainThread(() =>
|
{
|
AddEmptyTipView();
|
});
|
}
|
}
|
else
|
{
|
Application.RunOnMainThread(() =>
|
{
|
AddEmptyTipView();
|
});
|
//提示错误
|
IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
|
}
|
}
|
catch
|
{
|
|
}
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
if (waitPage != null)
|
{
|
waitPage.RemoveFromParent();
|
waitPage = null;
|
}
|
});
|
}
|
});
|
}
|
|
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="speakerInfo"></param>
|
/// <param name="VerticalScrolViewMiddle"></param>
|
void AddRowView(SpeakerInfo speakerInfo, VerticalScrolViewLayout VerticalScrolViewMiddle)
|
{
|
//透明填充分割view
|
var lineView = new FrameLayout()
|
{
|
Height = Application.GetRealWidth(12),
|
};
|
VerticalScrolViewMiddle.AddChidren(lineView);
|
|
var rowView = new FrameLayout()
|
{
|
Gravity = Gravity.CenterHorizontal,
|
Width = Application.GetRealWidth(343),
|
Height = Application.GetRealWidth(200),
|
BackgroundColor = CSS_Color.MainBackgroundColor,
|
Radius = (uint)Application.GetRealWidth(12),
|
BorderColor = 0x00000000,
|
BorderWidth = 0,
|
};
|
VerticalScrolViewMiddle.AddChidren(rowView);
|
|
#region 音箱类型
|
var view1 = new FrameLayout()
|
{
|
Height = Application.GetRealWidth(49),
|
};
|
rowView.AddChidren(view1);
|
|
var btnSpeakerNameTitle = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(200),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextSize = CSS_FontSize.TextFontSize,
|
Text = GetSpeakerTypeString(speakerInfo.platformName)
|
};
|
view1.AddChidren(btnSpeakerNameTitle);
|
|
Button line1 = new Button()
|
{
|
Y = view1.Bottom,
|
Gravity = Gravity.CenterHorizontal,
|
Height = Application.GetRealWidth(1),
|
Width = Application.GetRealWidth(311),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
};
|
rowView.AddChidren(line1);
|
|
#endregion
|
|
#region 备注
|
var view2 = new FrameLayout()
|
{
|
Y = line1.Bottom,
|
Height = Application.GetRealWidth(49),
|
};
|
rowView.AddChidren(view2);
|
|
var btnNicknameTitle = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(200),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextSize = CSS_FontSize.TextFontSize,
|
TextID = StringId.Remarks,
|
};
|
view2.AddChidren(btnNicknameTitle);
|
|
var btnNickname = new Button()
|
{
|
Width = Application.GetRealWidth(295),
|
TextAlignment = TextAlignment.CenterRight,
|
TextColor = CSS_Color.PromptingColor1,
|
TextSize = CSS_FontSize.TextFontSize,
|
Text = speakerInfo.remark
|
};
|
view2.AddChidren(btnNickname);
|
|
if (string.IsNullOrEmpty(speakerInfo.remark))
|
{
|
btnNickname.TextID = StringId.SmartSpeaker;
|
}
|
|
var btnNicknameRight = new Button()
|
{
|
X = Application.GetRealWidth(311),
|
Gravity = Gravity.CenterVertical,
|
Width = Application.GetMinRealAverage(16),
|
Height = Application.GetMinRealAverage(16),
|
UnSelectedImagePath = "Public/Right.png",
|
};
|
view2.AddChidren(btnNicknameRight);
|
|
Button line2 = new Button()
|
{
|
Y = view2.Bottom,
|
Gravity = Gravity.CenterHorizontal,
|
Height = Application.GetRealWidth(1),
|
Width = Application.GetRealWidth(311),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
};
|
rowView.AddChidren(line2);
|
|
|
//保存事件
|
Action<string> renameAction = (newName) =>
|
{
|
RenameAlexaRemark(newName, speakerInfo, btnNickname);
|
};
|
|
btnNickname.MouseUpEventHandler += (sender, e) =>
|
{
|
new PublicAssmebly().LoadDialog_EditParater(StringId.Remarks, speakerInfo.remark, renameAction, StringId.RemarksCannotBeBlank, 0, new List<string>(),false, Language.StringByID(StringId.Save));
|
};
|
#endregion
|
|
#region 数据管理
|
var view3 = new FrameLayout()
|
{
|
Y = line2.Bottom,
|
Height = Application.GetRealWidth(49),
|
};
|
rowView.AddChidren(view3);
|
|
var btnDataTitle = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(200),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextSize = CSS_FontSize.TextFontSize,
|
TextID = StringId.DataManagement,
|
};
|
view3.AddChidren(btnDataTitle);
|
|
var btnDataRight = new Button()
|
{
|
X = Application.GetRealWidth(311),
|
Gravity = Gravity.CenterVertical,
|
Width = Application.GetMinRealAverage(16),
|
Height = Application.GetMinRealAverage(16),
|
UnSelectedImagePath = "Public/Right.png",
|
};
|
view3.AddChidren(btnDataRight);
|
|
Button line3 = new Button()
|
{
|
Y = view3.Bottom,
|
Gravity = Gravity.CenterHorizontal,
|
Height = Application.GetRealWidth(1),
|
Width = Application.GetRealWidth(311),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
};
|
rowView.AddChidren(line3);
|
|
EventHandler<MouseEventArgs> eHandler = (sender, e) =>
|
{
|
//跳转数据管理房间列表
|
GotoPage(speakerInfo);
|
};
|
view3.MouseUpEventHandler += eHandler;
|
btnDataTitle.MouseUpEventHandler += eHandler;
|
btnDataRight.MouseUpEventHandler += eHandler;
|
#endregion
|
|
#region 解除绑定
|
var view4 = new FrameLayout()
|
{
|
Y = line3.Bottom,
|
Height = Application.GetRealWidth(49),
|
};
|
rowView.AddChidren(view4);
|
|
var btnUnbindTitle = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(200),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextSize = CSS_FontSize.TextFontSize,
|
TextID = StringId.Unbind,
|
};
|
view4.AddChidren(btnUnbindTitle);
|
|
var btnUnbindRight = new Button()
|
{
|
X = Application.GetRealWidth(311),
|
Gravity = Gravity.CenterVertical,
|
Width = Application.GetMinRealAverage(16),
|
Height = Application.GetMinRealAverage(16),
|
UnSelectedImagePath = "Public/Right.png",
|
};
|
view4.AddChidren(btnUnbindRight);
|
|
EventHandler<MouseEventArgs> eHandler4 = (sender, e) =>
|
{
|
Action okAction = () =>
|
{
|
//解绑音箱
|
UnbindSpeaker(speakerInfo, rowView, lineView);
|
};
|
new ConfirmDialog().ShowDialog(StringId.Tip, StringId.DoYouWantToUnbind, okAction, null, StringId.Cancel, StringId.Confirm);
|
|
};
|
view4.MouseUpEventHandler += eHandler4;
|
btnUnbindTitle.MouseUpEventHandler += eHandler4;
|
btnUnbindRight.MouseUpEventHandler += eHandler4;
|
|
#endregion
|
|
|
|
}
|
|
/// <summary>
|
/// 请求修改备注
|
/// </summary>
|
/// <param name="newName"></param>
|
/// <param name="speakerInfo"></param>
|
/// <param name="btnName"></param>
|
void RenameAlexaRemark(string newName, SpeakerInfo speakerInfo, Button btnName)
|
{
|
//显示loading动画效果
|
var waitPage = new Loading();
|
bodyView.AddChidren(waitPage);
|
waitPage.Start(Language.StringByID(StringId.PleaseWait));
|
|
System.Threading.Tasks.Task.Run(() =>
|
{
|
try
|
{
|
var updateSpeakerRemarkObj = new UpdateSpeakerRemarkObj()
|
{
|
homeId = speakerInfo.homeId,
|
tokenId = speakerInfo.tokenId,
|
remark = newName
|
};
|
|
var revertObj = new HttpServerRequest().UpdateSpeakerRemark(updateSpeakerRemarkObj);
|
if (revertObj.Code == StateCode.SUCCESS)
|
{
|
//AmendTheSuccess 修改成功
|
Application.RunOnMainThread(() =>
|
{
|
speakerInfo.remark = newName;
|
btnName.Text = newName;
|
Utlis.ShowTip(Language.StringByID(StringId.ModifySuccess));
|
//Utlis.ShowAlertOnMainThread(Language.StringByID(R.MyInternationalizationString.AmendTheSuccess));
|
|
});
|
}
|
else
|
{
|
//提示错误
|
IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
|
}
|
}
|
catch
|
{
|
|
}
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
if (waitPage != null)
|
{
|
waitPage.RemoveFromParent();
|
waitPage = null;
|
}
|
});
|
}
|
});
|
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="platformName"></param>
|
/// <returns></returns>
|
string GetSpeakerTypeString(string platformName){
|
//1.platformName判空
|
if (string.IsNullOrEmpty(platformName))
|
{
|
return "";
|
}
|
//2.先赋云端返回的默认值
|
var name = platformName;
|
if (platformName == SpeakerType.DuerOS.ToString())
|
{
|
if (Language.CurrentLanguage == "Chinese")
|
{
|
name = "小度";
|
}
|
//2.1当前语言不是中文的话,直接等于云端返回的platformName音箱类型
|
|
}
|
else if (platformName == SpeakerType.Google.ToString()){
|
name = "Google Home";
|
}
|
else if (platformName == SpeakerType.Alexa.ToString())
|
{
|
name = "Alexa Echo";
|
}
|
else if (platformName == SpeakerType.Alice.ToString())
|
{
|
name = "Alice";
|
}
|
else if (platformName == SpeakerType.Aligenie.ToString())
|
{
|
if (Language.CurrentLanguage == "Chinese")
|
{
|
name = "天猫精灵";
|
}
|
//2.1当前语言不是中文的话,直接等于云端返回的platformName音箱类型
|
}
|
else if (platformName == SpeakerType.AISpeech.ToString())
|
{
|
if (Language.CurrentLanguage == "Chinese")
|
{
|
name = "思必驰";
|
}
|
//2.1当前语言不是中文的话,直接等于云端返回的platformName 英文音箱类型
|
}
|
|
return name;
|
}
|
|
/// <summary>
|
/// 请求解绑音箱
|
/// </summary>
|
/// <param name="speakerInfo">音箱参数</param>
|
/// <param name="rowView">音箱rowView</param>
|
/// <param name="lineView">填充的lineView</param>
|
void UnbindSpeaker(SpeakerInfo speakerInfo, FrameLayout rowView, FrameLayout lineView)
|
{
|
if (speakerInfo == null || string.IsNullOrEmpty(speakerInfo.tokenId)) {
|
|
Utlis.ShowTip(Language.StringByID(StringId.RequestFailedParameterException) + "(-3)");
|
}
|
|
var waitPage = new Loading();
|
bodyView.AddChidren(waitPage);
|
waitPage.Start(Language.StringByID(StringId.PleaseWait));
|
|
System.Threading.Tasks.Task.Run(() =>
|
{
|
try
|
{
|
var revertObj = new HttpServerRequest().UnbindSpeaker(speakerInfo.tokenId);
|
if (revertObj.Code == StateCode.SUCCESS)
|
{
|
//解绑成功
|
Application.RunOnMainThread(() =>
|
{
|
//lineView
|
if (lineView != null)
|
{
|
lineView.RemoveFromParent();
|
}
|
|
//移除rowView
|
if (rowView != null)
|
{
|
rowView.RemoveFromParent();
|
}
|
|
//提示解绑成功
|
Utlis.ShowTip(Language.StringByID(StringId.UnbindEmailSuccess));
|
|
});
|
}
|
else
|
{
|
//提示错误
|
IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
|
}
|
}
|
catch
|
{
|
|
}
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
if (waitPage != null)
|
{
|
waitPage.RemoveFromParent();
|
waitPage = null;
|
}
|
});
|
}
|
});
|
|
}
|
|
/// <summary>
|
/// 跳转页面
|
/// </summary>
|
void GotoPage(SpeakerInfo speakerInfo)
|
{
|
var page = new SmartSpeakerRoomListPage(speakerInfo);
|
MainPage.BasePageView.AddChidren(page);
|
page.LoadPage();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
}
|
|
}
|
|
|
|
}
|