| | |
| | | using Shared; |
| | | using HDL_ON; |
| | | using HDL_ON.UI.CSS; |
| | | using HDL_ON.DAL.Server; |
| | | using HDL_ON.UI; |
| | | using HDL_ON.Entity; |
| | | using System.Threading; |
| | | using HDL_ON.DriverLayer; |
| | | |
| | | namespace HDL_ON |
| | | { |
| | | /// <summary> |
| | | /// HDLCommon |
| | | /// 暂时没用 |
| | | /// </summary> |
| | | public class HDLCommon |
| | | { |
| | | #region ■ 变量声明___________________________ |
| | | /// <summary> |
| | | /// 通用方法 |
| | | /// </summary> |
| | | private static HDLCommon m_Current = null; |
| | | /// <summary> |
| | | /// 通用方法 |
| | | /// </summary> |
| | | public static HDLCommon Current |
| | | { |
| | | get |
| | | { |
| | | if (m_Current == null) |
| | | { |
| | | m_Current = new HDLCommon(); |
| | | } |
| | | return m_Current; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 收到推送Action事件 |
| | | /// </summary> |
| | | public static Action GetPushMessageAction; |
| | | |
| | | #region ■ 变量声明___________________________ |
| | | /// <summary> |
| | | /// 通用方法 |
| | | /// </summary> |
| | | private static HDLCommon m_Current = null; |
| | | /// <summary> |
| | | /// 通用方法 |
| | | /// </summary> |
| | | public static HDLCommon Current |
| | | { |
| | | get |
| | | { |
| | | if (m_Current == null) |
| | | { |
| | | m_Current = new HDLCommon(); |
| | | } |
| | | return m_Current; |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region ■ Alter弹窗提示_______________________ |
| | |
| | | public void ShowActionAlert(string mes, Action okAction) |
| | | { |
| | | Alert alert = new Alert("", mes, Language.StringByID(StringId.Cancel), Language.StringByID(StringId.Confirm)); |
| | | alert.ResultEventHandler += (sender2, e2) => { |
| | | alert.ResultEventHandler += (sender2, e2) => |
| | | { |
| | | if (e2) |
| | | { |
| | | okAction?.Invoke(); |
| | |
| | | #endregion |
| | | |
| | | #region ■ 通用Dialog_______________________ |
| | | /// <summary> |
| | | /// 加载提示Dialog |
| | | /// </summary> |
| | | /// <param name="titleId"></param> |
| | | /// <param name="msgId"></param> |
| | | /// <param name="callBackAction"></param> |
| | | void ShowConfirmDialogBase(int titleId, int msgId, Action okAction, Action cancelAction, int cancelID = StringId.Cancel, int confirmID = StringId.Confirm) |
| | | { |
| | | Dialog dialog = new Dialog() |
| | | { |
| | | BackgroundColor = CSS_Color.DialogTransparentColor1, |
| | | }; |
| | | |
| | | FrameLayout contentView = new FrameLayout() |
| | | { |
| | | Gravity = Gravity.Center, |
| | | Width = Application.GetRealWidth(270), |
| | | Height = Application.GetRealHeight(140), |
| | | BackgroundColor = CSS_Color.MainBackgroundColor, |
| | | BorderColor = 0x00000000, |
| | | BorderWidth = 0, |
| | | Radius = (uint)Application.GetMinRealAverage(10), |
| | | }; |
| | | dialog.AddChidren(contentView); |
| | | |
| | | Button btnTitle = new Button() |
| | | { |
| | | Y = Application.GetRealHeight(16), |
| | | Height = Application.GetRealHeight(30), |
| | | TextColor = CSS_Color.MainColor, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | TextAlignment = TextAlignment.Center, |
| | | IsBold = true, |
| | | TextID = titleId, |
| | | }; |
| | | contentView.AddChidren(btnTitle); |
| | | |
| | | Button btnMsg = new Button() |
| | | { |
| | | Gravity = Gravity.CenterHorizontal, |
| | | Height = Application.GetRealHeight(25), |
| | | Y = btnTitle.Bottom, |
| | | Width = Application.GetRealHeight(200), |
| | | TextAlignment = TextAlignment.Center, |
| | | TextColor = CSS_Color.TextualColor, |
| | | TextSize = CSS_FontSize.PromptFontSize_FirstLevel, |
| | | TextID = msgId, |
| | | }; |
| | | contentView.AddChidren(btnMsg); |
| | | |
| | | Button btnLine = new Button() |
| | | { |
| | | Y = Application.GetRealHeight(96), |
| | | Height = Application.GetRealHeight(1), |
| | | Width = Application.GetRealWidth(270 / 2), |
| | | BackgroundColor = CSS_Color.DividingLineColor, |
| | | }; |
| | | contentView.AddChidren(btnLine); |
| | | |
| | | Button btnCancel = new Button() |
| | | { |
| | | Y = btnLine.Bottom, |
| | | Width = Application.GetRealWidth(135), |
| | | Height = Application.GetRealHeight(43), |
| | | TextAlignment = TextAlignment.Center, |
| | | TextColor = CSS_Color.TextualColor, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | TextID = cancelID, |
| | | }; |
| | | contentView.AddChidren(btnCancel); |
| | | |
| | | Button btnConfirm = new Button() |
| | | { |
| | | X = btnCancel.Right, |
| | | Y = btnLine.Y, |
| | | Width = Application.GetRealWidth(135), |
| | | Height = Application.GetRealHeight(45), |
| | | TextAlignment = TextAlignment.Center, |
| | | //TextColor = CSS_Color.TextualColor, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | TextColor = CSS_Color.MainBackgroundColor, |
| | | BackgroundColor = CSS_Color.MainColor, |
| | | TextID = confirmID, |
| | | }; |
| | | contentView.AddChidren(btnConfirm); |
| | | //例:右下圆角 大小为50 |
| | | int mRectCornerID = HDLUtils.RectCornerBottomRight; |
| | | btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID); |
| | | dialog.Show(); |
| | | btnCancel.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | dialog.Close(); |
| | | cancelAction?.Invoke(); |
| | | }; |
| | | |
| | | btnConfirm.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | dialog.Close(); |
| | | okAction?.Invoke(); |
| | | }; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 加载提示Dialog |
| | | /// </summary> |
| | | /// <param name="titleId"></param> |
| | | /// <param name="msgId"></param> |
| | | /// <param name="callBackAction"></param> |
| | | public void ShowConfirmDialog(int titleId, int msgId, Action okAction, Action cancelAction = null) |
| | | { |
| | | ShowConfirmDialogBase(titleId, msgId, okAction, cancelAction); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 加载提示Dialog |
| | | /// 可以自定义按钮文字 |
| | | /// </summary> |
| | | /// <param name="titleId"></param> |
| | | /// <param name="msgId"></param> |
| | | /// <param name="okAction"></param> |
| | | /// <param name="cancelAction"></param> |
| | | /// <param name="cancelID"></param> |
| | | /// <param name="confirmID"></param> |
| | | public void ShowConfirmDialog(int titleId, int msgId, Action okAction, Action cancelAction, int cancelID, int confirmID) |
| | | { |
| | | ShowConfirmDialogBase(titleId, msgId, okAction, cancelAction, cancelID, confirmID); |
| | | } |
| | | #endregion |
| | | |
| | | #region ■ 检测更新_______________________ |
| | | /// <summary> |
| | | /// 检测更新线程 |
| | | /// </summary> |
| | | public void CheckIfNeedForceUpdate() |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | try |
| | | { |
| | | var revertObj = new HttpServerRequest().CheckAppVersion(); |
| | | if (revertObj.Code == StateCode.SUCCESS) |
| | | { |
| | | if (revertObj.Data != null) |
| | | { |
| | | var appVersionRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AppVersionRes>(revertObj.Data.ToString()); |
| | | if (appVersionRes != null) |
| | | { |
| | | |
| | | var mForceUpdateInfo = new UpdateDialogInfo() |
| | | { |
| | | UpdateType = appVersionRes.isEnforce ? 2 : 1, |
| | | NewVersion = appVersionRes.version, |
| | | NewVersionUrl = appVersionRes.androidUrl |
| | | }; |
| | | #if __IOS__ |
| | | mForceUpdateInfo.NewVersionUrl = appVersionRes.iosUrl; |
| | | #endif |
| | | //解析更新内容详情 |
| | | var reasonStrJson = GetReasonStrJson(appVersionRes.updateDescription); |
| | | if (reasonStrJson != null) |
| | | { |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | mForceUpdateInfo.ReasonStr = reasonStrJson.Chinese; |
| | | } |
| | | else |
| | | { |
| | | mForceUpdateInfo.ReasonStr = reasonStrJson.English; |
| | | } |
| | | } |
| | | |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | ShowForceUpdateDialog(mForceUpdateInfo); |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Utlis.WriteLine("请求失败"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //Shared.Utlis.WriteLine (ex.ToString ()); |
| | | } |
| | | finally |
| | | { |
| | | |
| | | } |
| | | |
| | | }); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="jsonStr"></param> |
| | | /// <returns></returns> |
| | | public ReasonStrJson GetReasonStrJson(string jsonStr) |
| | | { |
| | | try |
| | | { |
| | | if (!string.IsNullOrEmpty(jsonStr)) |
| | | { |
| | | return Newtonsoft.Json.JsonConvert.DeserializeObject<ReasonStrJson>(jsonStr); |
| | | } |
| | | return null; |
| | | } |
| | | catch |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 提示强制更新Dialog |
| | | /// 点击确认跳转浏览器 |
| | | /// </summary> |
| | | public void ShowForceUpdateDialog(UpdateDialogInfo mUpdateDialogInfo) |
| | | { |
| | | // 1.1 没有更新 返回 |
| | | if (mUpdateDialogInfo.UpdateType == 0) return; |
| | | // 1.2 有新版本但是忽略过 返回 |
| | | if (mUpdateDialogInfo.UpdateType == 1 && (OnAppConfig.Instance.IgnoreUpdateVersion == mUpdateDialogInfo.NewVersion)) return; |
| | | // 2.1 有新版本没有忽略过 提示更新 |
| | | if (mUpdateDialogInfo.UpdateType == 1) |
| | | { |
| | | Action okAction = () => |
| | | { |
| | | if (string.IsNullOrEmpty(mUpdateDialogInfo.NewVersionUrl)) return; |
| | | |
| | | HDLUtils.OpenUrl(mUpdateDialogInfo.NewVersionUrl); |
| | | }; |
| | | |
| | | Action cancelAction = () => |
| | | { |
| | | OnAppConfig.Instance.IgnoreUpdateVersion = mUpdateDialogInfo.NewVersion; |
| | | OnAppConfig.Instance.SaveConfig(); |
| | | }; |
| | | |
| | | //1提示更新 |
| | | var dialog = new UpdateTipDialog(); |
| | | var tipStr = Language.StringByID(StringId.VersionNumber) + mUpdateDialogInfo.NewVersion; |
| | | dialog.ShowUpdateDialog(Language.StringByID(StringId.DiscoverNewVersion), tipStr, mUpdateDialogInfo.ReasonStr, okAction, cancelAction); |
| | | |
| | | } |
| | | else if (mUpdateDialogInfo.UpdateType == 2) //2.2 需要强制更新 |
| | | { |
| | | //2强制更新 |
| | | //"1.发现新版本App,当前版本已停用,马上更新!\n2.请下载和安装新版本!....." |
| | | Action okAction = () => |
| | | { |
| | | if (string.IsNullOrEmpty(mUpdateDialogInfo.NewVersionUrl)) |
| | | { |
| | | Utlis.ShowTip(Language.StringByID(StringId.DataExceptionPleaseTryAgain)); |
| | | return; |
| | | }; |
| | | |
| | | HDLUtils.OpenUrl(mUpdateDialogInfo.NewVersionUrl); |
| | | }; |
| | | |
| | | //1提示更新 |
| | | var dialog = new UpdateTipDialog(); |
| | | var tipStr = Language.StringByID(StringId.VersionNumber) + mUpdateDialogInfo.NewVersion; |
| | | dialog.ShowForcedUpdateDialog(Language.StringByID(StringId.DiscoverNewVersion), tipStr, mUpdateDialogInfo.ReasonStr, okAction); |
| | | } |
| | | else //3. 只需提示 |
| | | { |
| | | //3提示通知 |
| | | Action okAction = () => |
| | | { |
| | | |
| | | }; |
| | | var dialog = new UpdateTipDialog(); |
| | | dialog.ShowTipDialog(Language.StringByID(StringId.Tip), mUpdateDialogInfo.ReasonStr, okAction); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | ///// <summary> |
| | | ///// 恢复住宅 |
| | | ///// 2020-12-03 待测试未检测 |
| | | ///// </summary> |
| | | //public void RestoreHomeBackup(string RegionID) |
| | | //{ |
| | | // var isExist = FileUtils.ExistRegion(RegionID); |
| | | // if (isExist) |
| | | // { |
| | | // //存在则恢复 |
| | | // string newRegionRootPath = FileUtils.CreateRegionBackup(RegionID); |
| | | // FileUtils.RestoreRegionFiles(newRegionRootPath); |
| | | // } |
| | | //} |
| | | |
| | | #region ■ 推送处理_______________________ |
| | | /// <summary> |
| | | /// 推送消息处理 |
| | | /// </summary> |
| | | /// <param name="jpushMessageInfo"></param> |
| | | public void AdjustPushMessage(JPushMessageInfo jpushMessageInfo) |
| | | { |
| | | try |
| | | { |
| | | if (jpushMessageInfo.Extras != null && jpushMessageInfo.Extras.Contains("OffLine")) |
| | | { |
| | | Shared.Application.RunOnMainThread(() => |
| | | { |
| | | ////账号在别处登陆,被踢下线 跳转到登录页面 |
| | | //new Alert(Language.StringByID(StringId.Tip), Language.StringByID(StringId.LoggedOnOtherDevices), Language.StringByID(StringId.Close)).Show(); |
| | | //退出登录操作 |
| | | CheckLogout(); |
| | | |
| | | }); |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | Shared.Application.RunOnMainThread(() => |
| | | { |
| | | GetPushMessageAction?.Invoke(); |
| | | //报警推送才弹窗提示(messageType包含Alarm关键字的) |
| | | if (jpushMessageInfo.messageType != null && jpushMessageInfo.messageType.Contains("Alarm")) |
| | | { |
| | | //报警推送弹窗提示 |
| | | ShowAlarmPushMessage(jpushMessageInfo); |
| | | //new Alert(jpushMessageInfo.Title, jpushMessageInfo.Content, Language.StringByID(StringId.Close)).Show(); |
| | | } |
| | | |
| | | }); |
| | | return; |
| | | } |
| | | } |
| | | catch |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 账号在别处登陆,被踢下线 跳转到登录页面 |
| | | /// 要在主线程调用 |
| | | /// 退出登录操作 |
| | | /// </summary> |
| | | public void CheckLogout() |
| | | { |
| | | //未登录不用处理 |
| | | if (!UserInfo.Current.IsLogin) return; |
| | | |
| | | //账号在别处登陆,被踢下线 跳转到登录页面 |
| | | new Alert(Language.StringByID(StringId.Tip), Language.StringByID(StringId.LoggedOnOtherDevices), Language.StringByID(StringId.Close)).Show(); |
| | | |
| | | #if DEBUG |
| | | return; |
| | | #endif |
| | | |
| | | Logout(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 退出登录操作 |
| | | /// </summary> |
| | | public void Logout() |
| | | { |
| | | //加载Loading效果 |
| | | var waitPage = new Loading(); |
| | | MainPage.BaseView.AddChidren(waitPage); |
| | | waitPage.Start(Language.StringByID(StringId.PleaseWait)); |
| | | |
| | | new Thread(() => |
| | | { |
| | | try |
| | | { |
| | | //2.注销推送 |
| | | new HttpServerRequest().SignOutPush(); |
| | | //3.跳转登录页面 |
| | | UserInfo.Current.LastTime = DateTime.MinValue; |
| | | UserInfo.Current.SaveUserInfo(); |
| | | DB_ResidenceData.Instance.EixtAccount(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"xxx:{ex.Message}"); |
| | | } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | if (waitPage != null) |
| | | { |
| | | waitPage.RemoveFromParent(); |
| | | waitPage = null; |
| | | } |
| | | MainPage.GoLoginPage(UserInfo.Current); |
| | | }); |
| | | } |
| | | }).Start(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | ConfirmDialog alarmPushConfirmDialog; |
| | | /// <summary> |
| | | /// 报警推送弹窗提示,点击查看跳转信息中心 |
| | | /// </summary> |
| | | /// <param name="jpushMessageInfo"></param> |
| | | public void ShowAlarmPushMessage(JPushMessageInfo jpushMessageInfo) |
| | | { |
| | | //没登录不处理 |
| | | if (UserInfo.Current == null || !UserInfo.Current.IsLogin || MainPage.BasePageView == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | //跳转信息中心页面 |
| | | Action goAction = () => |
| | | { |
| | | //Dialog |
| | | alarmPushConfirmDialog = null; |
| | | Action backAction = () => { |
| | | |
| | | }; |
| | | var skipPage = new MessageCenterPage(); |
| | | MainPage.BasePageView.AddChidren(skipPage); |
| | | skipPage.LoadPage(backAction); |
| | | MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; |
| | | }; |
| | | |
| | | //取消事件 |
| | | Action cancelAction = () => |
| | | { |
| | | alarmPushConfirmDialog = null; |
| | | }; |
| | | |
| | | //防止多次弹窗处理 |
| | | if (alarmPushConfirmDialog == null) |
| | | { |
| | | alarmPushConfirmDialog = new ConfirmDialog(); |
| | | alarmPushConfirmDialog.ShowDialog(Language.StringByID(StringId.Tip), jpushMessageInfo.Content, goAction, cancelAction, StringId.Cancel, StringId.LookOver); |
| | | } |
| | | else |
| | | { |
| | | alarmPushConfirmDialog.RefreshDialog(Language.StringByID(StringId.Tip), jpushMessageInfo.Content, goAction, cancelAction, StringId.Cancel, StringId.LookOver); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 常用方法_______________________ |
| | | /// <summary> |
| | | /// 设置下划线按钮状态 |
| | | /// 统一封装设置方法 |
| | | /// </summary> |
| | | /// <param name="button">下划线按钮</param> |
| | | /// <param name="bottomLineType">状态</param> |
| | | public void BottomLineShowType(Button button, BottomLineType bottomLineType) |
| | | { |
| | | switch (bottomLineType) |
| | | { |
| | | case BottomLineType.GotFocus: |
| | | button.BackgroundColor = CSS_Color.MainColor; |
| | | button.Height = Application.GetRealHeight(2); |
| | | break; |
| | | case BottomLineType.Error: |
| | | button.BackgroundColor = CSS_Color.AuxiliaryColor2; |
| | | button.Height = Application.GetRealHeight(2); |
| | | break; |
| | | case BottomLineType.Normal: |
| | | button.BackgroundColor = CSS_Color.DividingLineColor; |
| | | button.Height = Application.GetRealHeight(1); |
| | | break; |
| | | default: |
| | | button.BackgroundColor = CSS_Color.DividingLineColor; |
| | | button.Height = Application.GetRealHeight(1); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="userName"></param> |
| | | /// <returns></returns> |
| | | public string GetUserName(string userName) |
| | | { |
| | | return string.IsNullOrEmpty(userName) ? Language.StringByID(StringId.UsersWhoNameIsEmpty) : userName; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 监听网络变化后处理事件 |
| | | /// 刷新网络状态 |
| | | /// </summary> |
| | | /// <param name="internetStatus">网络变化</param> |
| | | /// <param name="IsEnterBackground">是否进入了后台</param> |
| | | public void UpdateInternetStatus(int internetStatus, bool IsEnterBackground = false) |
| | | { |
| | | MainPage.Log($"网络状态变化,当前网络:{internetStatus} 是否后台:{IsEnterBackground.ToString()}"); |
| | | //网络状态变化 重置网关状态重新搜索 |
| | | Control.Ins.GatewayOnline = false; |
| | | |
| | | //网络变化,断开重连一次 |
| | | if (Control.Ins.IsRemote) |
| | | { |
| | | Control.Ins.IsRemote = false; |
| | | DAL.Mqtt.MqttClient.DisConnectRemote("UpdateInternetStatus", false); |
| | | } |
| | | |
| | | if (internetStatus == 0)//没有网络连接 0 |
| | | { |
| | | Control.Ins.GatewayOnline = false; |
| | | Control.Ins.IsRemote = false; |
| | | MainPage.InternetStatus = 0; |
| | | } |
| | | else if (internetStatus == 1)//3,4G的网络连接 1 |
| | | { |
| | | MainPage.InternetStatus = 1; |
| | | Control.Ins.SearchLoaclGateway(); |
| | | |
| | | } |
| | | else if (internetStatus == 2)//WiFi网络 |
| | | { |
| | | MainPage.InternetStatus = 2; |
| | | Control.Ins.SearchLoaclGateway(); |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | } |