xm
2020-12-14 d6fb0646531172f23648441c224cdcccd721b894
ZigbeeApp/Shared/Phone/Device/VideoIntercom/VideoMachine.cs
New file
@@ -0,0 +1,281 @@
using System;
using Newtonsoft.Json.Linq;
using Shared.Common;
using System.Collections.Generic;
using Shared.Phone.Device.Logic;
namespace Shared.Phone.Device.VideoIntercom
{
    public class VideoMachine : FrameLayout
    {
        public VideoMachine()
        {
        }
        public void Show(List<VideoCalss> videoInfosLists)
        {
            TopView view = new TopView();
            this.AddChidren(view.TopRowView());
            view.toptitleNameBtn.TextID = R.MyInternationalizationString.videoIntercom;
            view.clickBtn.MouseDownEventHandler += (sender, e) => { RemoveFromParent(); };
            var middle = new VerticalRefreshLayout
            {
                Y = view.topRowLayout.Bottom,
                Height = Application.GetRealHeight(Method.H - 184),
                BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
            };
            this.AddChidren(middle);
            for (int i = 0; i < videoInfosLists.Count; i++)
            {
                var videoInfos = videoInfosLists[i];
                var fLayout = new FrameLayout
                {
                    Height = Application.GetRealHeight(160),
                    BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor,
                };
                middle.AddChidren(fLayout);
                var iconBtn = new Button
                {
                    Width = Application.GetMinRealAverage(81),
                    Height = Application.GetMinRealAverage(81),
                    X = Application.GetRealWidth(58),
                    Y = Application.GetRealHeight(55),
                    UnSelectedImagePath = "Item/videoIntercom.png",
                };
                fLayout.AddChidren(iconBtn);
                var nameBtn = new Button
                {
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = ZigbeeColor.Current.LogicTextBlackColor,
                    TextSize = 15,
                    Y = Application.GetRealHeight(30),
                    X = Application.GetRealWidth(176),
                    Height = Application.GetRealHeight(60),
                    Width = Application.GetRealWidth(400),
                    Text = videoInfos.DeviceName,
                };
                fLayout.AddChidren(nameBtn);
                var name1Btn = new Button
                {
                    Text = videoInfos.RoomName,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = ZigbeeColor.Current.LogicBtnCancelColor,
                    TextSize = 12,
                    Y = nameBtn.Bottom + Application.GetRealHeight(3),
                    X = Application.GetRealWidth(176),
                    Height = Application.GetRealHeight(60),
                    Width = Application.GetRealWidth(400),
                };
                fLayout.AddChidren(name1Btn);
                var nextBtn = new Button
                {
                    Width = Application.GetMinRealAverage(104),
                    Height = Application.GetMinRealAverage(104),
                    UnSelectedImagePath = "Item/videoIntercomNext.png",
                    X = Application.GetRealWidth(743 + 176),
                    Y = Application.GetRealHeight(30),
                };
                fLayout.AddChidren(nextBtn);
                var lineBtn = new Button
                {
                    Width = Application.GetRealWidth(845),
                    Height = 1,
                    Y = fLayout.Height - 1,
                    X = Application.GetRealWidth(176),
                    BackgroundColor = ZigbeeColor.Current.LogicRowLayoutLineColor,
                };
                fLayout.AddChidren(lineBtn);
                var clickBtn = new Button
                {
                    Height = Application.GetRealHeight(160),
                };
                fLayout.AddChidren(clickBtn);
                clickBtn.MouseUpEventHandler += (sen, e) =>
                 {
#if iOS
                     GateWay.Ios.ESVideoInfo eSVideoInfo = new GateWay.Ios.ESVideoInfo();
                     eSVideoInfo.DeviceName = videoInfos.DeviceName;
                     eSVideoInfo.ESVideoUUID = videoInfos.ESVideoUUID;
                     eSVideoInfo.ESRoomID = videoInfos.ESRoomID;
                     eSVideoInfo.RoomName = videoInfos.RoomName;
                     GateWay.Ios.ESVideo.ShowESVideoMonitor(eSVideoInfo);
#elif Android
                     ((BaseActivity)Application.Activity).AudioRecord((result) =>
                     {
                         if (result == false) { return; }
                         Shared.Phone.VideoPhone.ESVideoInfo eSVideoInfo = new Shared.Phone.VideoPhone.ESVideoInfo();
                         eSVideoInfo.DeviceName = videoInfos.DeviceName;
                         eSVideoInfo.ESVideoUUID = videoInfos.ESVideoUUID;
                         eSVideoInfo.ESRoomID = videoInfos.ESRoomID;
                         eSVideoInfo.RoomName = videoInfos.RoomName;
                         Shared.Phone.VideoPhone.ESVideo.ShowESVideoMonitor(eSVideoInfo);
                     });
#endif
                 };
            }
        }
        /// <summary>
        /// 判断账号是否支持可视对讲
        /// </summary>
        /// <param name="topFrameLayout">可视对讲图标的父控件</param>
        public async static void AccountSupportVideo(FrameLayout topFrameLayout)
        {
            var jobject = new JObject();
            jobject.Add("RequestVersion", CommonPage.RequestVersion);
            jobject.Add("RequestSource", "0");
            jobject.Add("HomeID", Config.Instance.HomeId);
            var url = "https://developer.hdlcontrol.com/ProposedProductionApi/VideoIntercom/CheckBindRecord";
            var str = await Send.HttpWebRequest(url, jobject.ToString(), "POST", 3, true);
            if (!string.IsNullOrEmpty(str))
            {
                try
                {
                    var json = JObject.Parse(str);
                    if (json != null)
                    {
                        var stateCode = json["StateCode"].ToString();
                        //可视对讲快捷方式
                        var videoIntercomBtn = new Button();
                        videoIntercomBtn.Gravity = Gravity.CenterVertical;
                        videoIntercomBtn.UnSelectedImagePath = "Item/videoIntercom.png";
                        videoIntercomBtn.Width = Application.GetMinRealAverage(69);
                        videoIntercomBtn.Height = Application.GetMinRealAverage(69);
                        List<VideoCalss> videoList= new List<VideoCalss>();
                        if (stateCode == "Success")
                        {//判断这个账号是否绑定;
                            topFrameLayout.AddChidren(videoIntercomBtn);
                            CloudsVideo cloudsVideo = Newtonsoft.Json.JsonConvert.DeserializeObject<CloudsVideo>(json["ResponseData"].ToString());
                            videoList = await GetVideoInfoList(cloudsVideo);
                        }
                        if (UserCenter.UserCenterResourse.ResidenceOption.SafetyShortcut)
                        {
                            videoIntercomBtn.X = Application.GetRealWidth(746 + 10);
                        }
                        else
                        {
                            videoIntercomBtn.X = Application.GetRealWidth(850 + 10);
                        }
                        videoIntercomBtn.MouseUpEventHandler += (sender, e) =>
                        {
                            var videoMachine = new Device.VideoIntercom.VideoMachine();
                            UserView.HomePage.Instance.AddChidren(videoMachine);
                            UserView.HomePage.Instance.PageIndex += 1;
                            videoMachine.Show(videoList);
                        };
                    }
                }
                catch { }
            }
        }
        /// <summary>
        /// 获取可视对讲列表
        /// </summary>
        static async System.Threading.Tasks.Task<List<VideoCalss>> GetVideoInfoList(CloudsVideo clouds)
        {
            List<VideoCalss> eSVideoInfosList = new List<VideoCalss>();
            var jobject = new JObject();
            jobject.Add("cmtID", clouds.FLCommunityID);
            jobject.Add("unitno", clouds.FLBuildingID);
            jobject.Add("method", "getUUIDList");
            var url = " http://112.74.164.111:180/api.php/Device/getmonitorUUID";
            var str = await Send.HttpWebRequest(url, jobject.ToString(), "POST");
            if (string.IsNullOrEmpty(str))
            {
                return eSVideoInfosList;
            }
            var json = JObject.Parse(str);
            if (json == null)
            {
                return eSVideoInfosList;
            }
            if (json["resCode"].ToString() != "0")
            {
                return eSVideoInfosList;
            }
            var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(json["list"].ToString());
            if (list.Count == 0)
            {
                return eSVideoInfosList;
            }
            foreach (var videoInfo in list)
            {
                VideoCalss eSVideoInfo = new VideoCalss();
                eSVideoInfo.ESRoomID = int.Parse(clouds.FLRoomID);
                string str1 = clouds.FLBuildingID.Substring(0, 2).TrimStart('0');
                string str2 = clouds.FLBuildingID.Substring(2, 2).TrimStart('0');
                eSVideoInfo.RoomName = str1 +Language.StringByID( R.MyInternationalizationString.dong) + str2 + Language.StringByID(R.MyInternationalizationString.unit);
                eSVideoInfo.DeviceName = videoInfo["aliasName"];
                if (videoInfo["uuid"].Contains(","))
                {
                    var uuid = videoInfo["uuid"].Split(',');
                    eSVideoInfo.ESVideoUUID = uuid[0];
                }
                else
                {
                    eSVideoInfo.ESVideoUUID = videoInfo["uuid"];
                }
                eSVideoInfosList.Add(eSVideoInfo);
            }
            return eSVideoInfosList;
        }
    }
    public class VideoCalss
    {
        /// <summary>
        /// 室外机的UUID
        /// 例:JJY000007FSEYX
        /// </summary>
        public string ESVideoUUID = string.Empty;
        /// <summary>
        /// 当前用户的房间ID
        /// 例:0801
        /// </summary>
        public int ESRoomID;
        /// <summary>
        /// 室外机的名称
        /// 例:室外机
        /// </summary>
        public string DeviceName = string.Empty;
        /// <summary>
        /// 房间命名
        /// 例:8栋1单元0801
        /// </summary>
        public string RoomName = string.Empty;
    }
    public class CloudsVideo
    {
        /// <summary>
        /// 栋楼单元号
        /// </summary>
        public string FLBuildingID = string.Empty;
        /// <summary>
        /// 那栋楼的名称
        /// </summary>
        public string FLBuildingName = string.Empty;
        /// <summary>
        /// 小区ID
        /// </summary>
        public string FLCommunityID = string.Empty;
        /// <summary>
        /// 房间ID
        /// </summary>
        public string FLRoomID = string.Empty;
        /// <summary>
        /// 住宅ID
        /// </summary>
        public string HomeID = string.Empty;
        public string FLSecretKey = string.Empty;
    }
}