tzy
2021-05-14 ee5f2543624a0e3ae9d046062b822727a31685e1
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerListPage.cs
New file
@@ -0,0 +1,576 @@
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;
        }
    }
}