New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | } |