gxc
2020-01-02 00ab3ddb140ba8bb88b5cf572b004a85e1da85e9
ZigbeeApp/Shared/Phone/UserCenter/Abount/AbountForm.cs
@@ -25,17 +25,17 @@
        /// 更新中
        /// </summary>
        public Button updatingBtn;
        /// <summary>
        /// distributedMark
        /// <summary>
        /// distributedMark
        /// </summary>
        public string distributedMark;
        /// <summary>
        /// updateRow
        /// </summary>
        public DeviceInfoRow updateRow;
        /// <summary>
        /// 下载安卓apk的byte长度
        /// </summary>
        public string distributedMark;
        /// <summary>
        /// updateRow
        /// </summary>
        public DeviceInfoRow updateRow;
        /// <summary>
        /// 下载安卓apk的byte长度
        /// </summary>
        public long ApkBytesTotalLength = 0;
        #endregion
@@ -45,7 +45,7 @@
        /// </summary>
        public AbountForm()
        {
        }
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
@@ -95,21 +95,21 @@
        private void InitMiddleFrame()
        {
            bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            var logoFrameLayout = new FrameLayout
            {
                Height = Application.GetRealHeight(484),
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
            var logoFrameLayout = new FrameLayout
            {
                Height = Application.GetRealHeight(484),
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
            };
            bodyFrameLayout.AddChidren(logoFrameLayout);
            var logoBackground = new FrameLayout
            {
                Y = Application.GetRealHeight(104),
            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),
                Height = Application.GetMinRealAverage(167),
                Gravity = Gravity.CenterHorizontal,
                BackgroundColor = ZigbeeColor.Current.GXCButtonBlackSelectedColor,
                Radius = (uint)Application.GetRealHeight(37),
            };
            logoFrameLayout.AddChidren(logoBackground);
@@ -147,40 +147,40 @@
            logoFrameLayout.AddChidren(versionBtn);
            var versionFL = new FrameLayout
            {
                Y = Application.GetRealHeight(510),
                Height = Application.GetRealHeight(300),
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
            var versionFL = new FrameLayout
            {
                Y = Application.GetRealHeight(510),
                Height = Application.GetRealHeight(300),
                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();
            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.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();
            };
            updateRow = new DeviceInfoRow(12 + 127 + 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),
@@ -194,31 +194,31 @@
                Gravity=Gravity.CenterHorizontal
            };
            bodyFrameLayout.AddChidren(updatingBtn);
            SetDownLoadBtnNoVisible();
            CheckVersion();
        }
        /// <summary>
        /// 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);
                    });
                }
            })
        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>
        /// 设置进度控件不可见
@@ -238,12 +238,12 @@
            updateRow.CanClick(false);
        }
        /// <summary>
        /// 检查版本
        /// </summary>
        /// <summary>
        /// 检查版本
        /// </summary>
        /// <returns></returns>
        private async System.Threading.Tasks.Task<bool> CanUpdateAsync()
        {
        private async System.Threading.Tasks.Task<bool> CanUpdateAsync()
        {
#if iOS
            try
            {
@@ -271,7 +271,7 @@
            return false;
                }
#elif Android
            try
            {
@@ -291,93 +291,93 @@
            {
                return false;
            }
#endif
        }
        /// <summary>
        /// 更新
        /// </summary>
        private async void UpdateVersion()
        {
#if iOS
            CommonPage.Instance.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
        }
        /// <summary>
        /// 更新
#if iOS
        /// <summary>
        /// 获取iOS-APP版本信息
        /// </summary>
        private async void UpdateVersion()
        {
#if iOS
            CommonPage.Instance.OpenUrl();
        /// <returns>The https app version async.</returns>
        public async System.Threading.Tasks.Task<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<ResponseEntity.ResultPack>(Encoding.UTF8.GetString(result));
            }
            catch
            {
                return null;
            }
        }
        /// <summary>
        /// 跳转到APP 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
            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<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<ResponseEntity.ResultPack>(Encoding.UTF8.GetString(result));
            }
            catch
            {
                return null;
            }
        }
        /// <summary>
        /// 跳转到APP 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>
@@ -404,127 +404,127 @@
                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");
        }
        }
        /// <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
    }