using 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 { /// /// 关于的画面 /// public class AbountForm : EditorCommonForm { #region **变量***************************** /// /// 是否正在更新中 /// public bool isUpdating=false; /// /// The web client. /// public WebClient webClient=new WebClient { }; /// /// 进度条 /// public HorizontalSeekBar seekBar; /// /// 进度百分比 /// public Button seekBarTitle; /// /// 取消下载按钮 /// public Button cancelDownLoadBtn; /// /// 更新按钮 /// public Button updateBtn; /// /// 更新中 /// public Button updatingBtn; /// /// The instance. /// public static AbountForm instance; #endregion /// /// Initializes a new instance of the class. /// public AbountForm() { instance = this; } /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// public void ShowForm() { //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uVersionInformation)); //初始化中部控件 this.InitMiddleFrame(); } /// /// Closes the form. /// 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) { updateBtn.Visible = true; SetDownLoadBtnNoVisible(); CommonPage.CancelDownLoadApkAsync(); base.CloseFormBefore(); } else { return; } }; } else { Phone.UserView.HomePage.Instance.ScrollEnabled = true; base.CloseFormBefore(); } #elif iOS base.CloseFormBefore(); #endif } /// /// 初始化中部控件 /// private void InitMiddleFrame() { var logoBtn = new Button() { Width = Application.GetMinRealAverage(270), Height = Application.GetMinRealAverage(270), Y = Application.GetRealHeight(100), UnSelectedImagePath = "Logo/Logo.png", Gravity = Gravity.CenterHorizontal }; bodyFrameLayout.AddChidren(logoBtn); var nameBtn = new Button() { Width = Application.GetMinRealAverage(700), Height = Application.GetMinRealAverage(100), Y = Application.GetRealHeight(100)+logoBtn.Bottom, Gravity = Gravity.CenterHorizontal, Text="HDL Home", TextSize=20, TextColor=ZigbeeColor.Current.GXCTextBlackColor }; bodyFrameLayout.AddChidren(nameBtn); var versionBtn = new Button() { Width = Application.GetMinRealAverage(700), Height = Application.GetMinRealAverage(100), Y = Application.GetRealHeight(10) + nameBtn.Bottom, Gravity = Gravity.CenterHorizontal, Text = $"v{CommonPage.CodeIDString}", TextSize = 14, TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor }; bodyFrameLayout.AddChidren(versionBtn); updateBtn = new Button() { Y= Application.GetRealHeight(50)+versionBtn.Bottom, Width = Application.GetMinRealAverage(700), Gravity = Gravity.CenterHorizontal, Height =Application.GetRealHeight(Shared.Common.CommonPage.ButtonHeight), TextID=R.MyInternationalizationString.Update, TextColor=ZigbeeColor.Current.GXCTextBlueColor }; bodyFrameLayout.AddChidren(updateBtn); updateBtn.MouseUpEventHandler += GetVersion; seekBar = new HorizontalSeekBar() { Y = updateBtn.Bottom + Application.GetRealHeight(50), Width = Application.GetRealWidth(750), Height = Application.GetRealHeight(80), Gravity = Gravity.CenterHorizontal, BackgroundColor = ZigbeeColor.Current.GXCSliderUnSelectedColor, ThumbColor = 0x00000000, ProgressColor = ZigbeeColor.Current.GXCButtonBlueColor, Max = 100, Progress = 0, IsCanScrolled=false, IsCanMove=false }; bodyFrameLayout.AddChidren(seekBar); seekBarTitle = new Button() { Y = updateBtn.Bottom + Application.GetRealHeight(50), X= seekBar.Right+Application.GetRealWidth(10), Width = Application.GetRealWidth(150), Height = Application.GetRealHeight(80), Text = $"{seekBar.Progress}%", TextAlignment=TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.GXCTextBlackColor, }; bodyFrameLayout.AddChidren(seekBarTitle); updatingBtn = new Button() { Y = seekBar.Bottom + Application.GetRealHeight(20), Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(80), TextID= R.MyInternationalizationString.Updating, TextAlignment = TextAlignment.Center, TextColor = ZigbeeColor.Current.GXCTextBlackColor, Gravity=Gravity.CenterHorizontal }; bodyFrameLayout.AddChidren(updatingBtn); cancelDownLoadBtn = new Button() { TextID = R.MyInternationalizationString.Cancel, TextColor = ZigbeeColor.Current.GXCTextBlueColor, Height = Application.GetRealHeight(80), Width = Application.GetRealWidth(500), Gravity = Gravity.CenterHorizontal, Y = updatingBtn.Bottom + Application.GetRealHeight(500) }; bodyFrameLayout.AddChidren(cancelDownLoadBtn); #if Android cancelDownLoadBtn.MouseUpEventHandler += CancelDownLoadApk; #endif SetDownLoadBtnNoVisible(); } /// /// 设置进度控件不可见 /// public void SetDownLoadBtnNoVisible() { Phone.UserView.HomePage.Instance.ScrollEnabled = true; isUpdating = false; updateBtn.Visible = true; seekBar.Visible = seekBarTitle.Visible = cancelDownLoadBtn.Visible = updatingBtn.Visible = false; } /// /// 设置进度控件可见 /// public void SetDownLoadBtnVisible() { Phone.UserView.HomePage.Instance.ScrollEnabled = false; isUpdating = true; updateBtn.Visible = false; seekBar.Visible = seekBarTitle.Visible = cancelDownLoadBtn.Visible = updatingBtn.Visible = true; } /// /// Gets the version. /// /// Sender. /// E. private async void GetVersion(object sender, MouseEventArgs e) { #if iOS try { CommonPage.Loading.Start(); var versionResult = await Shared.Common.CommonPage.Instance.RequestHttpsiOSAppVersionAsync(); if (versionResult == null || versionResult.Results == null) { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); return; } var results = Newtonsoft.Json.Linq.JArray.Parse(versionResult.Results.ToString()); if (results[0] == null) { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); return; } var newVersion = results[0]["version"]?.ToString(); var updateContent = results[0]["releaseNotes"]?.ToString(); if (newVersion != CommonPage.CodeIDString) { Application.RunOnMainThread(() => { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.UpdateContent), updateContent, Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim)); alert.Show(); alert.ResultEventHandler += (sender1, e1) => { if (e1) { CommonPage.Instance.OpenUrl(); } }; }); } else { Application.RunOnMainThread(() => { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.TheAppVersionIsNewest), Language.StringByID(R.MyInternationalizationString.Close)); alert.Show(); }); } } catch { } finally { CommonPage.Loading.Hide(); } #elif Android try { CommonPage.Loading.Start(); var versionResult = await CommonPage.Instance.RequestHttpsAndroidAppVersionAsync(); if (versionResult == null) { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); return; } if (int.Parse(versionResult.FirmwareVersion.Replace(".","")) > int.Parse(CommonPage.CodeIDString.Replace(".",""))) { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.UpdateContent), versionResult.Remarks, Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim)); alert.Show(); alert.ResultEventHandler += async (sender1, e1) => { if (e1) { try { SetDownLoadBtnVisible(); var requestObj = new SendDataToServer.DownLoadAndroidApk { RequestVersion = CommonPage.RequestVersion, DistributedMark = versionResult.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) { SetDownLoadBtnNoVisible(); CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); return; } var bytesTotalLength = Newtonsoft.Json.JsonConvert.DeserializeObject(bytesTotalLengthResult.ResponseData.ToString()); if (bytesTotalLength == 0) { SetDownLoadBtnNoVisible(); CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); return; } CommonPage.ApkBytesTotalLength = bytesTotalLength; var bytes = await CommonPage.Instance.DownLoadApkAsync("FirmwareMana/DownloadPlatformUploadFirmware", Encoding.UTF8.GetBytes(requestJson)); if (bytes == null) { SetDownLoadBtnNoVisible(); CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail); return; } if(bytes.ToString().Contains("DownloadFail")) { SetDownLoadBtnNoVisible(); 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) { SetDownLoadBtnNoVisible(); System.Console.WriteLine($"下载失败--{ex.Message}"); } } }; } else { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.TheAppVersionIsNewest), Language.StringByID(R.MyInternationalizationString.Close)); alert.Show(); } } catch (Exception ex) { SetDownLoadBtnNoVisible(); System.Console.WriteLine(ex.Message); } finally { CommonPage.Loading.Hide(); } #endif } #if Android /// /// Cancels down load apk. /// private void CancelDownLoadApk(object sender,MouseEventArgs mouseEventArgs) { 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) { isUpdating = false; updateBtn.Visible = true; SetDownLoadBtnNoVisible(); CommonPage.CancelDownLoadApkAsync(); } }; } /// /// Install the specified context. /// /// Context. 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); // 由于没有在Activity环境下启动Activity,设置下面的标签 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); //添加这一句表示对目标应用临时授权该Uri所代表的文件 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); } #endif } }