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
}
}