wjc
2023-04-06 75a2f82f91d6568c0b3ea60ea93086e65f8a2e49
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs
@@ -2,7 +2,9 @@
using HDL_ON.Entity;
using System.Collections.Generic;
using Shared;
using HDL_ON.DAL.Server;
#if __IOS__
using Foundation;
#else
using Com.Videogo.Hdl;
#endif
@@ -39,54 +41,81 @@
        }
        #region  --------- 跳转到Android那边的方法(萤石视频门锁) --------
        #region  --------- 跳转到Android,ios那边的方法(萤石视频门锁) --------
        /// <summary>
        /// android,ios源生添加设备到云端成功后回调方法
        /// 再读取云端的上萤石设备列表
        /// <paramref name="spk"/>spk</param>
        /// </summary>
        public void SkipAddDeviceActivity(string spk)
        {
            this.InitializationAndroidData((isBools) =>
            this.InitializationAndroidData((isEzChildAccessToken) =>
            {
                if (!isBools)
                this.SunThread(() =>
                {
                    var list = this.GetVideoDoorLockLockModelsList("notAllowedConfigNetworkModels");
                    this.MainThread(() =>
                    {
                        this.ShowTip("先获取萤石云子账号token失败。");
                    });
                }
#if __IOS__
                        //跳转添加萤石设备
                        ezsdkDelegate = new IosIHdlInterface();
                        ezsdkDelegate.mAction += (serials) =>
                        {
                            this.GetYingshiDeviceList(serials);
                        };
                        EZSDK.IOS.EZSDK.SharedInstance().Delegate = ezsdkDelegate;
                        NSObject[] nSObject = new NSObject[list.Count];
                        for (int i = 0; i < list.Count; i++)
                        {
                            string strValue = list[i];
                            nSObject[i] = new NSString(strValue);
                        }
                        EZSDK.IOS.EZSDK.SharedInstance().ConnectTipModels = nSObject;
                        EZSDK.IOS.EZSDK.SharedInstance().AddEzvizMonitorWithDeviceType(spk);
#else
                HDLEzvizSdk.Instance.JumpToEZScanActivity(Application.Activity,spk);
                HDLEzvizSdk.SetAddCallback(new AndroidIHdlInterface((isBool, adnroidActionDevSerial) =>
                {
                    if (isBool)
                    HDLEzvizSdk.Instance.JumpToEZScanActivity(Application.Activity, spk,list);
                        HDLEzvizSdk.SetAddCallback(new AndroidIHdlInterface((isBool, serials) =>
                    {
                        var list = VideDoorLockSend.Current.GetVideoDoorLockDeviceList(SPK.VideoDoorLock);
                        if (list.Count > 0)
                        if (isBool)
                        {
                            var function = list.Find((o) => o.sid == adnroidActionDevSerial);
                            if (function != null)
                            {
                                this.SaveFunctionFile(function);
                            }
                            this.GetYingshiDeviceList(serials);
                        }
                    }
                }));
                    }));
#endif
                    });
                });
            });
        }
        /// <summary>
        /// 读取云端的上萤石设备列表
        /// <paramref name="serials"/>序列号</param>
        private void GetYingshiDeviceList(string serials)
        {
            this.SunThread(() =>
            {
                var list = VideDoorLockSend.Current.GetVideoDoorLockDeviceList(SPK.VideoDoorLock);
                this.MainThread(() =>
                {
                    if (list.Count > 0)
                    {
                        var function = list.Find((o) => o.sid == serials);
                        if (function != null)
                        {
                            this.SaveFunctionFile(function);
                        }
                    }
                });
            });
        }
        /// <summary>
@@ -99,46 +128,47 @@
        public void SkipRTVActivity(string deviceSerial, string deviceId, string spk, bool isDialog)
        {
            this.InitializationAndroidData((isBools) =>
            this.InitializationAndroidData((isEzChildAccessToken) =>
            {
                if (!isBools)
                this.MainThread(() =>
                {
                    this.MainThread(() =>
                    if (isDialog)
                    {
                        this.ShowTip("先获取萤石云子账号token失败。");
                    });
                }
                if (isDialog)
                {
                    Video.View.ShowDialog.Currnet.ClickBox(Language.StringByID(StringId.laizimenlinghujiao), (dialog) =>
                        Video.View.ShowDialog.Currnet.ClickBox(Language.StringByID(StringId.laizimenlinghujiao), (dialog) =>
                        {
                            dialog.Close();
                            this.SkipRTVActivity(deviceSerial, deviceId, spk);
                        }, (dialog) => { dialog.Close(); });
                    }
                    else
                    {
                        dialog.Close();
#if __IOS__
                        this.SkipRTVActivity(deviceSerial, deviceId, spk);
                    }
#else
                    HDLEzvizSdk.Instance.JumpToEZRealPlayActivity(Application.Activity,deviceId,deviceSerial,spk);
#endif
                    }, (dialog) =>
                    {
                        dialog.Close();
                    });
                }
                else
                {
#if __IOS__
#else
                    HDLEzvizSdk.Instance.JumpToEZRealPlayActivity(Application.Activity,deviceId,deviceSerial,spk);
#endif
                }
                });
            });
        }
        /// <summary>
        /// 打开实时视频画面
        /// </summary>
        /// <param name="deviceSerial">设备序列号</param>
        /// <param name="deviceId">设备id(云端上deviceId)</param>
        /// <param name="spk">设备spk(云雀上定义好的)</param>
        private void SkipRTVActivity(string deviceSerial, string deviceId, string spk)
        {
#if __IOS__
            //打开萤石视频界面
            EZSDK.IOS.EZSDK.SharedInstance().PlayWithDeviceSerial(deviceSerial, deviceId, spk);
#else
            HDLEzvizSdk.Instance.JumpToEZRealPlayActivity(Application.Activity,deviceId,deviceSerial,spk);
#endif
        }
        /// <summary>
        /// 浏览历史记录
        /// </summary>
@@ -146,14 +176,17 @@
        {
            this.InitializationAndroidData((s) =>
            {
                this.MainThread(() =>
                {
#if __IOS__
                    //打开萤石历史记录界面
                    EZSDK.IOS.EZSDK.SharedInstance().ToDeviceMsgListView(deviceId);
#else
                HDLEzvizSdk.Instance.JumpLockHistoryActivity(Application.Activity, deviceId);
#endif
                });
            });
        }
        /// <summary>
        /// 临时密码开门
@@ -163,19 +196,15 @@
        {
            this.InitializationAndroidData((isBools) =>
            {
                if (!isBools)
                this.MainThread(() =>
                {
                    this.MainThread(() =>
                    {
                        this.ShowTip("先获取萤石云子账号token失败。");
                    });
                }
#if __IOS__
                    //打开萤石临时密码界面
                    EZSDK.IOS.EZSDK.SharedInstance().ToTemPassView(deviceId);
#else
                HDLEzvizSdk.Instance.JumpTempPasswordActivity(Application.Activity, deviceId);
                HDLEzvizSdk.Instance.JumpTempPasswordActivity(Application.Activity, deviceId);
#endif
                });
            });
        }
@@ -184,8 +213,6 @@
        /// </summary>
        public void InitializationAndroidData(Action<bool> action)
        {
            bool isBool = true;
            this.SunThread(() =>
            {
@@ -199,29 +226,29 @@
                        {
                            //Token
                            isBool = false;
                            this.ShowTip("先获取萤石云子账号token失败。");
                            return;
                        }
                        Application.RunOnMainThread(() =>
                        {
#if __IOS__
                            //iOS
                            //初始化萤石云SDK,中文国内key、英文海外key 开发者账号使用应用包名申请的APPKEY,不同包名应用需配置不同的APPKEY
                            EZSDK.IOS.EZSDK.SharedInstance().InitLibWithAppKey("1aa98a90489b4838b966b57018b4b04b", "1aa98a90489b4838b966b57018b4b04b");
                            //1.设置所需河东的AccessToken和RefreshToken、域名地址
                            EZSDK.IOS.EZSDK.SharedInstance().SetHDlAccessToken(UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken);
                            EZSDK.IOS.EZSDK.SharedInstance().SetRequestHttpsHostAndPlatform(OnAppConfig.Instance.RequestHttpsHost, 1, DB_ResidenceData.Instance.CurrentRegion.id);
                            //2.设置萤石子账号的AccessToken到SDK
                            EZSDK.IOS.EZSDK.SharedInstance().SetEZAccessToken(ezChildAccessToken);
                            //////3.打开摄像头设备列表页面
                            //EZSDK.IOS.EZSDK.SharedInstance().Go2EZvizMonitor();
                            //EZSDK.IOS.EZDeviceInfo info = new EZSDK.IOS.EZDeviceInfo();
                            //info.de
                            //EZSDK.IOS.EZSDK.Play(info);
                        //iOS
                        //初始化萤石云SDK,中文国内key、英文海外key 开发者账号使用应用包名申请的APPKEY,不同包名应用需配置不同的APPKEY
                        EZSDK.IOS.EZSDK.SharedInstance().InitLibWithAppKey("1aa98a90489b4838b966b57018b4b04b", "1aa98a90489b4838b966b57018b4b04b");
                        //1.设置所需河东的AccessToken和RefreshToken、域名地址
                        EZSDK.IOS.EZSDK.SharedInstance().SetHDlAccessToken(UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken);
                        EZSDK.IOS.EZSDK.SharedInstance().SetRequestHttpsHostAndPlatform(OnAppConfig.Instance.RequestHttpsHost, 1, DB_ResidenceData.Instance.CurrentRegion.id);
                        //2.设置萤石子账号的AccessToken到SDK
                        EZSDK.IOS.EZSDK.SharedInstance().SetEZAccessToken(ezChildAccessToken);
                        //////3.打开摄像头设备列表页面
                        //EZSDK.IOS.EZSDK.SharedInstance().Go2EZvizMonitor();
                        //EZSDK.IOS.EZDeviceInfo info = new EZSDK.IOS.EZDeviceInfo();
                        //info.de
                        //EZSDK.IOS.EZSDK.Play(info);
#else
                            HDLEzvizSdk.Instance.Init(Application.Activity.Application, ezChildAccessToken, UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken, OnAppConfig.Instance.RequestHttpsHost, "1aa98a90489b4838b966b57018b4b04b", 1, DB_ResidenceData.Instance.CurrentRegion.id);
#endif
                        });
                    });
@@ -245,7 +272,7 @@
        /// <param name="home">对象</param>
        public void ChangeCurrHome(RegionInfoRes home)
        {
            if (DB_ResidenceData.Instance.CurrentRegion.id == home.id || string.IsNullOrEmpty(home.id)) return;
#if __IOS__
#else
@@ -256,20 +283,84 @@
        #endregion
        /// <summary>
        /// 萤石视频门锁的图标
        /// <param name="comerom">来自那里</param>
        /// 获取【门锁型号】列表
        /// </summary>
        public string GetVideoDoorLockIcon(Comerom comerom)
        /// <returns>返回结果不会为null</returns>
        public List<string> GetVideoDoorLockLockModelsList(string mode = "lockModels")
        {
            if (comerom == Comerom.collect)
            return VideDoorLockSend.Current.GetVideoDoorLockLockModelsList(mode);
        }
        /// <summary>
        /// 门锁推送
        /// </summary>
        /// <param name="pushMessageType"></param>
        /// <param name="jPushMessageInfo"></param>
        public void DoorLockPush(JPushMessageInfo jpushMessageInfo)
        {
            this.MainThread(() =>
            {
                return "FunctionIcon/DoorLock/VideoDoorLockOpen.png";
            }
            else
                if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return;
                //{ "deviceSid":"J92513662","type":"opendoormsg","extDevId":"J92513662","deviceId":"1641010144999936001","spk":"security.door.ezviz"}
                var expantContent = Newtonsoft.Json.JsonConvert.DeserializeObject<ExpantContent>(jpushMessageInfo.expantContent);
                if (expantContent == null)
                {
                    return;
                }
                if (expantContent.spk != SPK.VideoDoorLock)
                {
                    return;
                }
                if (jpushMessageInfo.messageType.Contains(PushMessageType.DOOR_BELL.ToString()))
                {
                    ///打开视频门锁
                    this.SkipRTVActivity(expantContent.devSerial, expantContent.deviceId, expantContent.spk, true);
                }
                else if (jpushMessageInfo.messageType.Contains(PushMessageType.Alarm.ToString()))
                {
                    //低电量推送
                    this.UpdateDoorLockState(PushMessageType.Alarm);
                }
                else if (jpushMessageInfo.messageType.Contains(PushMessageType.Prompt.ToString()))
                {
                    //开门推送
                    this.UpdateDoorLockState(PushMessageType.Prompt);
                }
            });
        }
        /// <summary>
        /// 更新开锁图标和电池状态
        /// </summary>
        private void UpdateDoorLockState(PushMessageType pushMessageType)
        {
            int childrenCount = MainPage.BasePageView.ChildrenCount - 1;
            for (int i = childrenCount; childrenCount > i; i--)
            {
                return "FunctionIcon/DoorLock/VideoDoorlockClose.png";
                View view = MainPage.BasePageView.GetChildren(i);
                if (view is VideoDoorLockPage)
                {
                    VideoDoorLockPage videoDoorLockPage = (VideoDoorLockPage)view;
                    if (videoDoorLockPage != null)
                    {
                        videoDoorLockPage.UpdateState(pushMessageType);
                    }
                }
            }
        }
        /// <summary>
        /// 获取萤石视频【门锁】列表
        /// </summary>
        /// <returns></returns>
        public List<Function> GetVideoDoorLockList()
        {
            var list = FunctionList.List.GetVideoDoorLockList();
#if DEBUG
            //list.Add(new Function { name = "视频门锁一", sid = "23456789", spk = SPK.VideoDoorLock });
            //list.Add(new Function { name = "视频门锁二", sid = "2345678922", spk = SPK.VideoDoorLock });
#endif
            return list;
        }
        #region  --------- 功能文件保存,删除 --------
        /// <summary>
@@ -296,6 +387,23 @@
            MainPage.Log($"文件删除->{function.name}-->{function.spk}");
        }
        #endregion
        /// <summary>
        /// 萤石视频门锁的图标
        /// <param name="comerom">来自那里</param>
        /// </summary>
        public string GetVideoDoorLockIcon(Comerom comerom)
        {
            if (comerom == Comerom.collect)
            {
                return "FunctionIcon/DoorLock/VideoDoorLockOpen.png";
            }
            else
            {
                return "FunctionIcon/DoorLock/VideoDoorlockClose.png";
            }
        }
        /// <summary>
        /// 获取Loading对象
        /// </summary>
@@ -329,19 +437,7 @@
        }
        /// <summary>
        /// 获取萤石视频门锁列表
        /// </summary>
        /// <returns></returns>
        public List<Function> GetVideoDoorLockList()
        {
            var list = FunctionList.List.GetVideoDoorLockList();
#if DEBUG
            //list.Add(new Function { name = "视频门锁一", sid = "23456789", spk = SPK.VideoDoorLock });
            //list.Add(new Function { name = "视频门锁二", sid = "2345678922", spk = SPK.VideoDoorLock });
#endif
            return list;
        }
        #region  ---------自定义线程(子线程,主线程)--------
        /// <summary>
        /// 子线程
@@ -425,6 +521,8 @@
                new PublicAssmebly().TipMsgAutoClose(msg, false, time * 1000);
            });
        }
        #endregion
        /// <summary>
        /// 弹框类型
@@ -444,29 +542,31 @@
            collect,//收藏
            room,//房间
            push,//推送
            sanfan,//三方
        }
#if __IOS__
        ///// <summary>
        ///// 专门定义给Ios回调用着,没有特殊含义
        ///// </summary>
        //public class IosIHdlInterface : Shared.IOS.HDLLinphoneSDK.HDLLinphoneCallDelegate
        //{
        //    Action<bool, string> mAction;
        //    public IosIHdlInterface(Action<bool, string> action)
        //    {
        //        mAction = action;
        //    }
        //    /// <summary>
        //    ///
        //    /// </summary>
        //    /// <param name="p0">true是入网成功(源生回调返回)</param>
        //    /// <param name="p1">设备的序列化(源生回调返回)</param>
        //    public void AddCallback(bool p0, string p1)
        //    {
        //        mAction?.Invoke(p0, p1);
        //    }
        //}
        IosIHdlInterface ezsdkDelegate;
        /// <summary>
        /// 专门定义给Ios回调用着,没有特殊含义
        /// </summary>
        public class IosIHdlInterface : EZSDK.IOS.EZSDKDelegate
        {
            public Action<string> mAction;
            public IosIHdlInterface()
            {
            }
            /// <summary>
            ///
            /// </summary>
            /// <param name="p0">true是入网成功(源生回调返回)</param>
            /// <param name="p1">设备的序列化(源生回调返回)</param>
            public override void AddDeviceSuccessed(string deviceSerial)
            {
                mAction?.Invoke(deviceSerial);
            }
        }
#else
        /// <summary>
        /// 专门定义给安卓回调用着,没有特殊含义