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
|
{
|
/// <summary>
|
/// 关于的画面
|
/// </summary>
|
public class AbountForm : EditorCommonForm
|
{
|
#region **变量*****************************
|
/// <summary>
|
/// 是否正在更新中
|
/// </summary>
|
public bool isUpdating=false;
|
/// <summary>
|
/// The web client.
|
/// </summary>
|
public WebClient webClient=new WebClient { };
|
/// <summary>
|
/// 进度条
|
/// </summary>
|
public HorizontalSeekBar seekBar;
|
/// <summary>
|
/// 进度百分比
|
/// </summary>
|
public Button seekBarTitle;
|
/// <summary>
|
/// 取消下载按钮
|
/// </summary>
|
public Button cancelDownLoadBtn;
|
/// <summary>
|
/// 更新按钮
|
/// </summary>
|
public Button updateBtn;
|
/// <summary>
|
/// 更新中
|
/// </summary>
|
public Button updatingBtn;
|
/// <summary>
|
/// The instance.
|
/// </summary>
|
public static AbountForm instance;
|
#endregion
|
/// <summary>
|
/// Initializes a new instance of the <see cref="T:Shared.Phone.UserCenter.Abount.AbountForm"/> class.
|
/// </summary>
|
public AbountForm()
|
{
|
instance = this;
|
}
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
public void ShowForm()
|
{
|
//设置标题信息
|
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uVersionInformation));
|
//初始化中部控件
|
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)
|
{
|
updateBtn.Visible = true;
|
SetDownLoadBtnNoVisible();
|
CommonPage.CancelDownLoadApkAsync();
|
base.CloseFormBefore();
|
}
|
else
|
{
|
return;
|
}
|
};
|
}
|
else
|
{
|
Phone.UserView.HomePage.Instance.ScrollEnabled = true;
|
base.CloseFormBefore();
|
}
|
#elif iOS
|
base.CloseFormBefore();
|
#endif
|
}
|
/// <summary>
|
/// 初始化中部控件
|
/// </summary>
|
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();
|
}
|
/// <summary>
|
/// 设置进度控件不可见
|
/// </summary>
|
public void SetDownLoadBtnNoVisible()
|
{
|
Phone.UserView.HomePage.Instance.ScrollEnabled = true;
|
isUpdating = false;
|
updateBtn.Visible = true;
|
seekBar.Visible = seekBarTitle.Visible = cancelDownLoadBtn.Visible = updatingBtn.Visible = false;
|
}
|
/// <summary>
|
/// 设置进度控件可见
|
/// </summary>
|
public void SetDownLoadBtnVisible()
|
{
|
Phone.UserView.HomePage.Instance.ScrollEnabled = false;
|
isUpdating = true;
|
updateBtn.Visible = false;
|
seekBar.Visible = seekBarTitle.Visible = cancelDownLoadBtn.Visible = updatingBtn.Visible = true;
|
}
|
/// <summary>
|
/// Gets the version.
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="e">E.</param>
|
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<long>(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
|
/// <summary>
|
/// Cancels down load apk.
|
/// </summary>
|
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();
|
}
|
};
|
}
|
/// <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);
|
// 由于没有在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
|
}
|
}
|