From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 16 四月 2020 17:10:57 +0800 Subject: [PATCH] 请合并代码 --- ZigbeeApp/Shared/Phone/UserCenter/Abount/AbountForm.cs | 531 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 531 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Abount/AbountForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Abount/AbountForm.cs new file mode 100755 index 0000000..7b0dbfb --- /dev/null +++ b/ZigbeeApp/Shared/Phone/UserCenter/Abount/AbountForm.cs @@ -0,0 +1,531 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.Remoting.Contexts; +using System.Text; +using Shared.Common; +using Shared.Phone.Device.CommonForm; +namespace Shared.Phone.UserCenter.Abount +{ + /// <summary> + /// 鍏充簬鐨勭敾闈� + /// </summary> + public class AbountForm : EditorCommonForm + { + #region 鈼� 鍙橀噺____________________________ + /// <summary> + /// 鏄惁姝e湪鏇存柊涓� + /// </summary> + public bool isUpdating; + /// <summary> + /// The web client. + /// </summary> + public WebClient webClient=new WebClient { }; + /// <summary> + /// 鏇存柊涓� + /// </summary> + public Button updatingBtn; + /// <summary> + /// distributedMark + /// </summary> + public string distributedMark; + /// <summary> + /// updateRow + /// </summary> + public DeviceInfoRow updateRow; + /// <summary> + /// 涓嬭浇瀹夊崜apk鐨刡yte闀垮害 + /// </summary> + public long ApkBytesTotalLength = 0; + + #endregion + + /// <summary> + /// Initializes a new instance of the <see cref="T:Shared.Phone.UserCenter.Abount.AbountForm"/> class. + /// </summary> + public AbountForm() + { + + } + /// <summary> + /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓) + /// </summary> + public void ShowForm() + { + //璁剧疆鏍囬淇℃伅 + base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAboutMe)); + //鍒濆鍖栦腑閮ㄦ帶浠� + this.InitMiddleFrame(); + } + /// <summary> + /// Closes the form. + /// </summary> + public override void CloseFormBefore() + { +#if Android + //if (isUpdating == true) + //{ + //var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CancelUpdating), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim)); + //alert.Show(); + //alert.ResultEventHandler += (send, e) => + //{ + // if (e) + // { + SetDownLoadBtnNoVisible(); + CancelDownLoadApkAsync(); + base.CloseFormBefore(); + //} + // else + // { + // return; + // } + // }; + //} + //else + //{ + // base.CloseFormBefore(); + //} +#elif iOS + base.CloseFormBefore(); +#endif + } + /// <summary> + /// 鍒濆鍖栦腑閮ㄦ帶浠� + /// </summary> + private void InitMiddleFrame() + { + bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; + var logoFrameLayout = new FrameLayout + { + Height = Application.GetRealHeight(484), + BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor + }; + bodyFrameLayout.AddChidren(logoFrameLayout); + + var logoBackground = new FrameLayout + { + Y = Application.GetRealHeight(104), + Width = Application.GetMinRealAverage(167), + Height = Application.GetMinRealAverage(167), + Gravity = Gravity.CenterHorizontal, + BackgroundColor = ZigbeeColor.Current.GXCButtonBlackSelectedColor, + Radius = (uint)Application.GetRealHeight(37), + }; + logoFrameLayout.AddChidren(logoBackground); + + var logoBtn = new Button() + { + Width = Application.GetMinRealAverage(144), + Height = Application.GetMinRealAverage(144), + UnSelectedImagePath = "Account/Logo_White.png", + Gravity = Gravity.Center + }; + logoBackground.AddChidren(logoBtn); + + var nameBtn = new Button() + { + Y = Application.GetRealHeight(294), + Width = Application.GetRealWidth(700), + Height = Application.GetRealHeight(60), + Gravity = Gravity.CenterHorizontal, + Text = "HDL Home", + TextSize = 15, + TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor + }; + logoFrameLayout.AddChidren(nameBtn); + + var versionBtn = new Button() + { + Y = Application.GetRealHeight(366), + Width = Application.GetRealWidth(700), + Height = Application.GetRealHeight(50), + Gravity = Gravity.CenterHorizontal, + Text = $"{Language.StringByID(R.MyInternationalizationString.VersionCode)} {CommonPage.CodeIDString}", + TextSize = 12, + TextColor = ZigbeeColor.Current.GXCTextGrayColor + }; + logoFrameLayout.AddChidren(versionBtn); + + + var versionFL = new FrameLayout + { + Y = Application.GetRealHeight(510), + //Height = Application.GetRealHeight(300), + Height = Application.GetRealHeight(300-127-12), + BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor + }; + bodyFrameLayout.AddChidren(versionFL); + + //var SLARow = new DeviceInfoRow(12); + //SLARow.Init(); + //SLARow.SetTipTitle(R.MyInternationalizationString.SLA); + //SLARow.NameText.TextAlignment = TextAlignment.CenterRight; + //versionFL.AddChidren(SLARow); + //SLARow.ClickBtn.MouseUpEventHandler += (sender, e) => + //{ + // var slaForm = new SLAForm(); + // slaForm.AddForm(); + //}; + + //updateRow = new DeviceInfoRow(12 + 127 + 12); + updateRow = new DeviceInfoRow(12); + updateRow.Init(); + updateRow.SetTipTitle(R.MyInternationalizationString.UpdateVersion); + updateRow.NameText.TextAlignment = TextAlignment.CenterRight; + updateRow.HideLine(true); + updateRow.SetTitle(R.MyInternationalizationString.TheAppVersionIsNewest); + updateRow.CanClick(false); + updateRow.SetTitleColor(ZigbeeColor.Current.GXCTextGrayColor); + versionFL.AddChidren(updateRow); + updateRow.ClickBtn.MouseUpEventHandler += (sender, e) => + { + UpdateVersion(); + }; + + + updatingBtn = new Button() + { + Y = Application.GetRealHeight(994), + Width = Application.GetRealWidth(556), + Height = Application.GetRealHeight(106), + Radius=(uint)Application.GetRealHeight(53), + BackgroundColor=ZigbeeColor.Current.GXCDailogBackGroundColor, + TextID = R.MyInternationalizationString.Updating, + TextSize=15, + TextColor = ZigbeeColor.Current.GXCTextWhiteColor, + Gravity=Gravity.CenterHorizontal + }; + bodyFrameLayout.AddChidren(updatingBtn); + + SetDownLoadBtnNoVisible(); + CheckVersion(); + } + + /// <summary> + /// CheckVersion + /// </summary> + private void CheckVersion() + { + new System.Threading.Thread(async () => + { + var re = await CanUpdateAsync(); + if (re) + { + Application.RunOnMainThread(() => + { + updateRow.CanClick(true); + updateRow.SetTitleColor(ZigbeeColor.Current.GXCButtonSelectedColor); + updateRow.SetTitle(R.MyInternationalizationString.Update); + }); + } + }) + { IsBackground = true }.Start(); + + } + /// <summary> + /// 璁剧疆杩涘害鎺т欢涓嶅彲瑙� + /// </summary> + private void SetDownLoadBtnNoVisible() + { + isUpdating = false; + updatingBtn.Visible = false; + } + /// <summary> + /// 璁剧疆杩涘害鎺т欢鍙 + /// </summary> + private void SetDownLoadBtnVisible() + { + isUpdating = true; + updatingBtn.Visible = true; + updateRow.CanClick(false); + } + + /// <summary> + /// 妫�鏌ョ増鏈� + /// </summary> + /// <returns></returns> + private async System.Threading.Tasks.Task<bool> CanUpdateAsync() + { +#if iOS + try + { + var versionResult = await RequestHttpsiOSAppVersionAsync(); + if (versionResult == null || versionResult.Results == null) + { + return false; + } + var results = Newtonsoft.Json.Linq.JArray.Parse(versionResult.Results.ToString()); + if (results[0] == null) + { + return false; + } + var newVersion = results[0]["version"]?.ToString(); + var updateContent = results[0]["releaseNotes"]?.ToString(); + if (newVersion != CommonPage.CodeIDString) + { + return true; + } + return false; + } + catch + { + return false; + } + +#elif Android + try + { + var versionResult = await RequestHttpsAndroidAppVersionAsync(); + if (versionResult == null) + { + return false; + } + if (int.Parse(versionResult.FirmwareVersion.Replace(".", "")) > int.Parse(CommonPage.CodeIDString.Replace(".", ""))) + { + distributedMark = versionResult.DistributedMark; + return true; + } + return false; + } + catch (Exception ex) + { + return false; + } +#endif + } + + /// <summary> + /// 鏇存柊 + /// </summary> + private async void UpdateVersion() + { +#if iOS + OpenUrl(); +#elif Android + try + { + var requestObj = new SendDataToServer.DownLoadAndroidApk + { + RequestVersion = CommonPage.RequestVersion, + DistributedMark = distributedMark + }; + var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj); + + var bytesTotalLengthResult = await CommonPage.Instance.RequestHttpsZigbeeAsync("FirmwareMana/DownloadPlatformUploadFirmwarePreLength", Encoding.UTF8.GetBytes(requestJson)); + if (bytesTotalLengthResult == null || bytesTotalLengthResult.ResponseData == null) + { + CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); + return; + } + var bytesTotalLength = Newtonsoft.Json.JsonConvert.DeserializeObject<long>(bytesTotalLengthResult.ResponseData.ToString()); + if (bytesTotalLength == 0) + { + CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); + return; + } + ApkBytesTotalLength = bytesTotalLength; + var bytes = await DownLoadApkAsync("FirmwareMana/DownloadPlatformUploadFirmware", Encoding.UTF8.GetBytes(requestJson)); + if (bytes == null) + { + CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); + return; + } + if (bytes.ToString().Contains("DownloadFail")) + { + CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain); + return; + } + var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "home.apk"); + Shared.IO.FileUtils.WriteFileByBytes(path, bytes); + Install(Shared.Application.Activity); + } + catch (Exception ex) + { + System.Console.WriteLine($"涓嬭浇澶辫触--{ex.Message}"); + } +#endif + } + +#if iOS + /// <summary> + /// 鑾峰彇iOS-APP鐗堟湰淇℃伅 + /// </summary> + /// <returns>The https app version async.</returns> + public async System.Threading.Tasks.Task<Common.ResponseEntity.ResultPack> RequestHttpsiOSAppVersionAsync() + { + try + { + var webClient = new WebClient { }; + var result = await webClient.DownloadDataTaskAsync("https://itunes.apple.com/lookup?id=1461693569"); + if (result == null) + { + return null; + } + return Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.ResultPack>(Encoding.UTF8.GetString(result)); + } + catch + { + return null; + } + } + /// <summary> + /// 璺宠浆鍒癆PP Store + /// </summary> + public void OpenUrl() + { + Uri url = new Uri("https://itunes.apple.com/cn/app/hdl-home/id1461693569?mt=8"); + UIKit.UIApplication.SharedApplication.OpenUrl(url); + } +#elif Android + + /// <summary> + /// Install the specified context. + /// </summary> + /// <param name="context">Context.</param> + private static void Install(Android.Content.Context context) + { + + //var file = new Java.IO.File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads), "home.apk"); + var file = new Java.IO.File(System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "home.apk")); + var intent = new Android.Content.Intent(Android.Content.Intent.ActionInstallPackage); + // 鐢变簬娌℃湁鍦ˋctivity鐜涓嬪惎鍔ˋctivity,璁剧疆涓嬮潰鐨勬爣绛� + intent.SetFlags(Android.Content.ActivityFlags.NewTask); + + if (Android.OS.BuildVersionCodes.M < Android.OS.Build.VERSION.SdkInt) + { + //鍙傛暟1 涓婁笅鏂�, 鍙傛暟2 Provider涓绘満鍦板潃 鍜岄厤缃枃浠朵腑淇濇寔涓�鑷� 鍙傛暟3 鍏变韩鐨勬枃浠� + var apkUri = Android.Support.V4.Content.FileProvider.GetUriForFile(context, "com.hdl.home.fileProvider", file); + //娣诲姞杩欎竴鍙ヨ〃绀哄鐩爣搴旂敤涓存椂鎺堟潈璇ri鎵�浠h〃鐨勬枃浠� + intent.AddFlags(Android.Content.ActivityFlags.GrantReadUriPermission); + intent.SetDataAndType(apkUri, "application/vnd.android.package-archive"); + } + else + { + intent.SetDataAndType(Android.Net.Uri.FromFile(file), "application/vnd.android.package-archive"); + } + context.StartActivity(intent); + } + + /// <summary> + /// 鑾峰彇 Android-APP 鐗堟湰淇℃伅 + /// </summary> + /// <returns>The https app version async.</returns> + private async System.Threading.Tasks.Task<Common.ResponseEntity.ApkInfoOBJ> RequestHttpsAndroidAppVersionAsync() + { + try + { + var requestOBJ = new SendDataToServer.GetAndroidApkInfoOBJ + { + Name = "ZigbeeApp", + RequestVersion = CommonPage.CodeIDString + }; + var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestOBJ); + var result = await CommonPage.Instance.RequestHttpsZigbeeAsync("FirmwareMana/DetectionPlatformUploadFirmware", System.Text.Encoding.UTF8.GetBytes(requestJson)); + if (result == null) + { + return null; + } + if (result.StateCode.ToUpper() == "SUCCESS") + { + if (result.ResponseData == null) + { + return null; + } + + var responeData = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.ApkInfoRes>(result.ResponseData.ToString()); + if (responeData == null || responeData.pageData == null || responeData.pageData.Count == 0) + { + return null; + } + int MaxIndex = 0; + int NewVersion = 0; + for (int i = 0; i < responeData.pageData.Count; i++) + { + var apkInfo = responeData.pageData[i]; + var version = int.Parse(apkInfo.FirmwareVersion.Replace(".", "")); + if (version > NewVersion) + { + NewVersion = version; + MaxIndex = i; + } + } + return responeData.pageData[MaxIndex]; + } + return null; + } + catch (Exception ex) + { + return null; + } + } + + /// <summary> + /// 涓嬭浇瀹夎apk + /// </summary> + /// <returns>The load apk async.</returns> + /// <param name="requestUrl">璇锋眰閾炬帴</param> + /// <param name="byteData">璇锋眰鍙傛暟</param> + private System.Threading.Tasks.Task<byte[]> DownLoadApkAsync(string requestUrl, byte[] byteData) + { + try + { + webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json"); + webClient.Headers.Add(HttpRequestHeader.Authorization, Config.Instance.Token); + webClient.UploadProgressChanged += Client_DownloadProgressChanged; + webClient.UploadDataCompleted += Client_UploadCompleted; + var result = webClient.UploadDataTaskAsync($"{CommonPage.RequestHttpsHost}/{requestUrl}", "POST", byteData); + if (result == null) + { + return null; + } + return result; + } + catch (Exception ex) + { + return null; + } + finally + { + } + } + /// <summary> + /// apk涓嬭浇杩涘害 + /// </summary> + /// <param name="sender">Sender.</param> + /// <param name="e">E.</param> + void Client_DownloadProgressChanged(object sender, UploadProgressChangedEventArgs e) + { + //System.Console.WriteLine($"褰撳墠杩涘害--{(int)(e.BytesReceived / (float)ApkBytesTotalLength * 100)} % --BytesReceived--{e.BytesReceived}--totalByte{e.TotalBytesToReceive}"); + if (e.BytesReceived <= ApkBytesTotalLength) + { + Application.RunOnMainThread(() => + { + SetDownLoadBtnVisible(); + updatingBtn.Text = $"{ Language.StringByID(R.MyInternationalizationString.Updating)} {(int)(e.BytesReceived / (float)ApkBytesTotalLength * 100)}%"; + }); + } + } + + /// <summary> + /// Client_UploadCompleted + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + void Client_UploadCompleted(object sender, UploadDataCompletedEventArgs e) + { + System.Console.WriteLine("涓嬭浇apk瀹屾垚"); + SetDownLoadBtnNoVisible(); + } + /// <summary> + /// 鍙栨秷涓嬭浇apk + /// </summary> + private void CancelDownLoadApkAsync() + { + webClient?.CancelAsync(); + SetDownLoadBtnNoVisible(); + System.Console.WriteLine("鍙栨秷涓嬭浇apk"); + } +#endif + + } +} -- Gitblit v1.8.0