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