using System;
|
using System.Collections.Generic;
|
using System.Net;
|
using System.Text;
|
using uPLibrary.Networking.M2Mqtt;
|
using Shared.Common;
|
using Shared.IO;
|
using Shared.Phone.UserView;
|
using System.Net.Http;
|
|
namespace Shared.Phone.Device.Account
|
{
|
/// <summary>
|
/// 登录界面
|
/// </summary>
|
public class AccountLogin : FrameLayout
|
{
|
#region ◆ 变量____________________________
|
/// <summary>
|
/// 背景视图
|
/// </summary>
|
private FrameLayout midFrameLayout;
|
/// <summary>
|
/// 注册按钮
|
/// </summary>
|
private Button registerBtn;
|
/// <summary>
|
/// 账号输入控件
|
/// </summary>
|
private EditText accountET;
|
/// <summary>
|
/// 密码输入控件
|
/// </summary>
|
private EditText passwrodET;
|
/// <summary>
|
/// 登录按钮
|
/// </summary>
|
private Button loginBtn;
|
/// <summary>
|
/// 隐藏密码
|
/// </summary>
|
private Button hidenPWDbtn;
|
/// <summary>
|
/// 登录错误提示按钮
|
/// </summary>
|
private Button loginErrorBtn;
|
/// <summary>
|
/// 忘记密码按钮
|
/// </summary>
|
private Button forgotPasswordBtn;
|
/// <summary>
|
/// 验证码登录按钮
|
/// </summary>
|
private Button loginByCodeBtn;
|
|
#endregion
|
|
#region ◆ 构造方法_________________________
|
|
/// <summary>
|
/// 构造方法
|
/// </summary>
|
public AccountLogin()
|
{
|
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
|
}
|
|
#endregion
|
|
#region ◆ 显示界面_________________________
|
|
/// <summary>
|
/// 显示界面
|
/// </summary>
|
/// <param name="account">Account.</param>
|
/// <param name="password">Password.</param>
|
public void Show(string account = "", string password = "")
|
{
|
if (Config.Instance.IsLogin)
|
{
|
|
}
|
else
|
{
|
LoginViewShow(account, password);
|
}
|
}
|
|
/// <summary>
|
/// Logins the view show.
|
/// </summary>
|
/// <param name="account">Account.</param>
|
/// <param name="password">Password.</param>
|
public void LoginViewShow(string account = "", string password = "")
|
{
|
#region midFrameLayout
|
midFrameLayout = new FrameLayout()
|
{
|
Width = LayoutParams.MatchParent,
|
Height = Application.GetRealHeight(CommonPage.AppRealHeight),
|
//Y = Application.GetRealHeight(36),
|
BackgroundColor =ZigbeeColor.Current.GXCBackgroundColor
|
};
|
AddChidren(midFrameLayout);
|
#endregion
|
|
#region 布局账户,密码,忘记密码,注册 手机验证码登录
|
registerBtn = new Button()
|
{
|
Width = Application.GetRealWidth(250),
|
Height = Application.GetRealHeight(80),
|
X = Application.GetRealWidth(CommonPage.AppRealWidth-250-50),
|
Y = Application.GetRealHeight(100),
|
TextID = R.MyInternationalizationString.Register,
|
TextSize = 15,
|
TextColor = ZigbeeColor.Current.GXCTextBlueColor,
|
TextAlignment = TextAlignment.CenterRight
|
};
|
midFrameLayout.AddChidren(registerBtn);
|
|
var logoBtn = new Button()
|
{
|
Width = Application.GetMinRealAverage(270),
|
Height = Application.GetMinRealAverage(270),
|
Y = Application.GetRealHeight(150)+registerBtn.Bottom,
|
UnSelectedImagePath = "Logo/Logo.png",
|
Gravity=Gravity.CenterHorizontal
|
};
|
midFrameLayout.AddChidren(logoBtn);
|
|
var accountFL = new FrameLayout()
|
{
|
Width = Application.GetRealWidth(700),
|
Height = Application.GetRealHeight(110),
|
Y = Application.GetRealHeight(200) + logoBtn.Bottom,
|
Radius = (uint)Application.GetRealHeight(55),
|
BorderColor = ZigbeeColor.Current.GXCBorderColor,
|
BorderWidth = 1,
|
Gravity = Gravity.CenterHorizontal
|
};
|
midFrameLayout.AddChidren(accountFL);
|
|
accountET = new EditText()
|
{
|
X=Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(660),
|
PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPhoneNumberOrEmail),
|
TextAlignment = TextAlignment.Center,
|
PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
|
Text=account
|
};
|
accountFL.AddChidren(accountET);
|
|
var passwordFL = new FrameLayout()
|
{
|
Width = Application.GetRealWidth(700),
|
Height = Application.GetRealHeight(110),
|
Y = accountFL.Bottom + Application.GetRealHeight(100),
|
Radius = (uint)Application.GetRealHeight(55),
|
BorderColor = ZigbeeColor.Current.GXCBorderColor,
|
BorderWidth = 1,
|
Gravity = Gravity.CenterHorizontal
|
};
|
midFrameLayout.AddChidren(passwordFL);
|
|
passwrodET = new EditText()
|
{
|
Width = Application.GetRealWidth(450),
|
PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPWD),
|
TextAlignment = TextAlignment.Center,
|
SecureTextEntry = true,
|
PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
|
Text=password,
|
Gravity=Gravity.CenterHorizontal
|
};
|
passwordFL.AddChidren(passwrodET);
|
|
hidenPWDbtn = new Button()
|
{
|
X = passwrodET.Right + Application.GetRealWidth(20),
|
Width = Application.GetMinReal(72),
|
Height = Application.GetMinReal(72),
|
UnSelectedImagePath = "Account/HidenPWD.png",
|
SelectedImagePath = "Account/UnHidenPWD.png",
|
Gravity=Gravity.CenterVertical
|
};
|
passwordFL.AddChidren(hidenPWDbtn);
|
|
forgotPasswordBtn = new Button()
|
{
|
Width = Application.GetRealWidth(400),
|
Height = Application.GetRealHeight(110),
|
Y = passwordFL.Bottom + Application.GetRealHeight(100),
|
TextID = R.MyInternationalizationString.ForgotPassword,
|
TextSize = 15,
|
TextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlackColor,
|
TextAlignment = TextAlignment.Center,
|
Gravity=Gravity.CenterHorizontal
|
};
|
midFrameLayout.AddChidren(forgotPasswordBtn);
|
|
loginBtn = new Button()
|
{
|
Width = Application.GetRealWidth(700),
|
Height = Application.GetRealHeight(110),
|
Y = Application.GetRealHeight(100) + forgotPasswordBtn.Bottom,
|
TextID = R.MyInternationalizationString.Login,
|
TextSize = 15,
|
TextColor = Shared.Common.ZigbeeColor.Current.GXCTextWhiteColor,
|
Radius = (uint)Application.GetRealHeight(55),
|
BorderWidth = 0,
|
BackgroundColor = ZigbeeColor.Current.GXCButtonUnselectedColor,
|
SelectedBackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor,
|
Gravity = Gravity.CenterHorizontal,
|
Enable = !string.IsNullOrEmpty(passwrodET.Text),
|
IsSelected = !string.IsNullOrEmpty(passwrodET.Text)
|
};
|
midFrameLayout.AddChidren(loginBtn);
|
|
//错误提示Btn
|
loginErrorBtn = new Button()
|
{
|
Y=loginBtn.Bottom+Application.GetRealHeight(50),
|
Width=Application.GetRealWidth(1080-100),
|
Height=Application.GetRealHeight(110),
|
TextColor=ZigbeeColor.Current.GXCRedColor,
|
Gravity=Gravity.CenterHorizontal
|
};
|
midFrameLayout.AddChidren(loginErrorBtn);
|
|
loginByCodeBtn = new Button()
|
{
|
Width = Application.GetRealWidth(300),
|
Height = Application.GetRealHeight(110),
|
Y = midFrameLayout.Bottom - Application.GetRealHeight(100+110),
|
TextID = R.MyInternationalizationString.LoginByCode,
|
TextColor = ZigbeeColor.Current.GXCTextBlueColor,
|
TextAlignment = TextAlignment.Center,
|
TextSize = 15,
|
Gravity = Gravity.CenterHorizontal
|
};
|
midFrameLayout.AddChidren(loginByCodeBtn);
|
#endregion
|
|
#region event
|
passwrodET.EditorEnterAction = (ae) =>
|
{
|
Application.HideSoftInput();
|
};
|
|
BindEvent();
|
#endregion
|
}
|
|
#endregion
|
|
#region ◆ 绑定事件_________________________
|
|
/// <summary>
|
/// 绑定按钮事件
|
/// </summary>
|
private void BindEvent()
|
{
|
//登录事件
|
loginBtn.MouseUpEventHandler += LoginBtnEvent;
|
//短信登录
|
loginByCodeBtn.MouseUpEventHandler += LoginByCode;
|
//忘记密码
|
forgotPasswordBtn.MouseUpEventHandler += ForgetPWD;
|
//注册事件
|
registerBtn.MouseUpEventHandler += Register;
|
//账号监听
|
accountET.TextChangeEventHandler += Account_TextChange;
|
//密码监听事件
|
passwrodET.TextChangeEventHandler += Pwd_TextChange;
|
//隐藏密码
|
hidenPWDbtn.MouseUpEventHandler += HidePWD;
|
|
}
|
|
#endregion
|
|
#region ◆ 登录____________________________
|
|
/// <summary>
|
/// 登录事件
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void LoginBtnEvent(object sender,MouseEventArgs mouseEventArgs)
|
{
|
Login(accountET.Text.Trim(), passwrodET.Text.Trim());
|
}
|
|
/// <summary>
|
/// 登录
|
/// </summary>
|
/// <param name="account">Account.</param>
|
/// <param name="password">Password.</param>
|
private void Login(string account, string password)
|
{
|
//Application.RunOnMainThread( () =>
|
//{
|
Action action = async () =>
|
{
|
try
|
{
|
CommonPage.Loading.Start(Language.StringByID(R.MyInternationalizationString.Logining));
|
|
var requestObj = new SendDataToServer.LoginObj
|
{
|
Account = account,
|
Password = password,
|
Source = CommonPage.Source,
|
Company = CommonPage.Company
|
};
|
var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
|
var revertObj = await CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/Login", System.Text.Encoding.UTF8.GetBytes(requestJson));
|
if (revertObj == null)
|
{
|
CommonPage.Instance.FailureToServer();
|
return;
|
}
|
var stateCodeStr = revertObj.StateCode.ToUpper();
|
//Error 不能直接从服务器取,只能根据状态码逐一判断
|
if (stateCodeStr == "SUCCESS")
|
{
|
if (revertObj.ResponseData == null)
|
{
|
return;
|
}
|
this.RemoveFromParent();
|
|
UserPage.Instance.Fresh();
|
|
new System.Threading.Thread(async () =>
|
{
|
//启动ZigBee
|
ZigBee.Common.Application.Init();
|
//存储数据
|
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginRes>(revertObj.ResponseData.ToString());
|
var revertData = responseDataObj;
|
Config.ReFresh();
|
Config.Instance.UserID = revertData.UserID;
|
Config.Instance.MasterID = revertData.MainUserID;
|
Config.Instance.AccountType = revertData.UserType;
|
Config.Instance.Account = revertData.Account;
|
Config.Instance.MqttKey = revertData.MqttKey;
|
Config.Instance.Password = password;
|
Config.Instance.Guid = revertData.Guid;
|
Config.Instance.LoginDateTime = DateTime.Now;
|
Config.Instance.ConnectZigbeeMqttBrokerPwd = revertData.ConnectZigbeeMqttBrokerPwd;
|
Config.Instance.ConnectZigbeeMqttClientId = revertData.ConnectZigbeeMqttClientId;
|
Config.Instance.ZigbeeMqttBrokerLoadSubDomain = revertData.ZigbeeMqttBrokerLoadSubDomain;
|
if (Config.Instance.AccountList.Find((obj) => obj == revertData.Account) == null)
|
{
|
Config.Instance.AccountList.Add(revertData.Account);
|
}
|
Config.Instance.Save();
|
|
var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID();
|
var homes = await House.GetHomeLists();
|
//刷新个人中心的内存及线程
|
await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
|
Shared.Common.Room.canInitAllRoom = true;
|
Shared.Common.Room.InitAllRoom();
|
Application.RunOnMainThread(() =>
|
{
|
UserPage.Instance.Fresh();
|
CommonPage.Loading.Hide();
|
});
|
})
|
{ IsBackground = true }.Start();
|
}
|
else if (stateCodeStr == "NOTVERIFY")
|
{
|
CommonPage.Loading.Hide();
|
//未激活
|
loginErrorBtn.TextID = R.MyInternationalizationString.NOTVERIFY;
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.NOTVERIFY);
|
}
|
else if (stateCodeStr == "NOTENABLE")
|
{
|
CommonPage.Loading.Hide();
|
//该用户属于调试账号,并未启用
|
loginErrorBtn.TextID = R.MyInternationalizationString.NOTENABLE;
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.NOTENABLE);
|
}
|
else if (stateCodeStr == "USERNAMEORPWDERROR")
|
{
|
CommonPage.Loading.Hide();
|
//账号或密码错误
|
loginErrorBtn.TextID = R.MyInternationalizationString.USERNAMEORPWDERROR;
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.USERNAMEORPWDERROR);
|
}
|
else if (stateCodeStr == "ACCOUNTNOEXISTS")
|
{
|
CommonPage.Loading.Hide();
|
//账号不存在
|
loginErrorBtn.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS;
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ACCOUNTNOEXISTS);
|
}
|
else if (stateCodeStr == "YOUDATANOISLOCALREGION")
|
{
|
CommonPage.Loading.Hide();
|
//不在本区域,需要重定向区域后再次请求登录
|
if (revertObj.ResponseData == null)
|
{
|
return;
|
}
|
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginLocalRegionRes>(revertObj.ResponseData.ToString());
|
CommonPage.RequestHttpsHost = responseDataObj.RegionServer;
|
//再次登录
|
Login(account, password);
|
}
|
else
|
{
|
loginErrorBtn.TextID = R.MyInternationalizationString.RequestServerFailed;
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.RequestServerFailed);
|
}
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"登录失败--{ex.Message}");
|
CommonPage.Loading.Hide();
|
CommonPage.Instance.FailureToServer();
|
}
|
finally
|
{
|
//CommonPage.Loading.Hide();
|
}
|
//});
|
};
|
action();
|
}
|
|
/// <summary>
|
/// 通过验证码登录
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void LoginByCode(object sender,MouseEventArgs mouseEventArgs)
|
{
|
this.RemoveFromParent();
|
var loginByCodePage = new AccountLoginByCode();
|
CommonPage.Instance.AddChidren(loginByCodePage);
|
loginByCodePage.Show();
|
}
|
|
#endregion
|
|
#region ◆ 忘记密码________________________
|
/// <summary>
|
/// 忘记密码
|
/// </summary>
|
private void ForgetPWD(object sender, MouseEventArgs mouseEventArgs)
|
{
|
var forgetWPDDialog = new Dialog()
|
{
|
BackgroundColor = ZigbeeColor.Current.GXCDailogBackGroundColor
|
};
|
forgetWPDDialog.Show();
|
var forgetSelectedView = new FrameLayout()
|
{
|
BackgroundColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
Gravity = Gravity.Center,
|
Width = Application.GetRealWidth(700),
|
Height = Application.GetRealHeight(700),
|
Radius = (uint)Application.GetRealHeight(30),
|
};
|
forgetWPDDialog.AddChidren(forgetSelectedView);
|
|
var forgetByPhone = new Button()
|
{
|
Y = Application.GetRealHeight(100),
|
Width = Application.GetRealWidth(600),
|
Height = Application.GetRealHeight(100),
|
TextID = R.MyInternationalizationString.FindPWDByPhone,
|
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
TextAlignment = TextAlignment.Center,
|
BackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor,
|
Radius = (uint)Application.GetRealHeight(50),
|
Gravity = Gravity.CenterHorizontal
|
};
|
forgetSelectedView.AddChidren(forgetByPhone);
|
|
var forgetByEmail = new Button()
|
{
|
Y = Application.GetRealHeight(100) + forgetByPhone.Bottom,
|
Width = Application.GetRealWidth(600),
|
Height = Application.GetRealHeight(100),
|
TextID = R.MyInternationalizationString.FindPWDByEmail,
|
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
TextAlignment = TextAlignment.Center,
|
BackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor,
|
Radius = (uint)Application.GetRealHeight(50),
|
Gravity = Gravity.CenterHorizontal
|
};
|
forgetSelectedView.AddChidren(forgetByEmail);
|
|
var cancleBtn = new Button()
|
{
|
Y = Application.GetRealHeight(100) + forgetByEmail.Bottom,
|
Width = Application.GetRealWidth(300),
|
Height = Application.GetRealHeight(100),
|
TextID = R.MyInternationalizationString.Cancel,
|
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
TextAlignment = TextAlignment.Center,
|
BackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor,
|
Radius = (uint)Application.GetRealHeight(50),
|
Gravity = Gravity.CenterHorizontal
|
};
|
forgetSelectedView.AddChidren(cancleBtn);
|
|
forgetByPhone.MouseUpEventHandler += (sender1, e1) =>
|
{
|
forgetWPDDialog.Close();
|
this.RemoveFromParent();
|
var forgot = new Account.ForgotPasswordByPhone();
|
CommonPage.Instance.AddChidren(forgot);
|
forgot.Show();
|
};
|
forgetByEmail.MouseUpEventHandler += (sender1, e1) =>
|
{
|
forgetWPDDialog.Close();
|
this.RemoveFromParent();
|
var forgot = new Account.ForgotPasswordByEmail();
|
CommonPage.Instance.AddChidren(forgot);
|
forgot.Show();
|
};
|
cancleBtn.MouseUpEventHandler += (sender1, e1) =>
|
{
|
forgetWPDDialog.Close();
|
};
|
}
|
|
#endregion
|
|
#region ◆ 注册_____________________________
|
|
/// <summary>
|
/// 注册
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void Register(object sender,MouseEventArgs mouseEventArgs)
|
{
|
this.RemoveFromParent();
|
var registerPage = new RegistrationPhoneOREmail();
|
Shared.Common.CommonPage.Instance.AddChidren(registerPage);
|
registerPage.Show();
|
}
|
|
#endregion
|
|
#region ◆ 账号密码监听______________________
|
/// <summary>
|
/// 账号监听
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void Account_TextChange(object sender,string mouseEventArgs)
|
{
|
loginErrorBtn.Text = "";
|
}
|
|
/// <summary>
|
/// 密码监听事件
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void Pwd_TextChange(object sender,string mouseEventArgs)
|
{
|
loginErrorBtn.Text = "";
|
if (1 <= passwrodET.Text.Trim().Length && passwrodET.Text.Trim().Length <= 16 && accountET.Text.Trim().Length > 0)
|
{
|
loginBtn.Enable = loginBtn.IsSelected = true;
|
}
|
else if (passwrodET.Text.Trim().Length > 16)
|
{
|
passwrodET.Text = mouseEventArgs.Remove(16);
|
}
|
else if (passwrodET.Text.Trim().Length > 16 && accountET.Text.Trim().Length > 0)
|
{
|
loginBtn.Enable = loginBtn.IsSelected = true;
|
passwrodET.Text = mouseEventArgs.Remove(16);
|
}
|
else
|
{
|
loginBtn.Enable = loginBtn.IsSelected = false;
|
}
|
}
|
|
|
|
#endregion
|
|
#region ◆ 密码隐藏__________________________
|
|
private void HidePWD(object sender, MouseEventArgs mouseEventArgs)
|
{
|
passwrodET.SecureTextEntry = !passwrodET.SecureTextEntry;
|
hidenPWDbtn.IsSelected = !hidenPWDbtn.IsSelected;
|
}
|
|
#endregion
|
}
|
}
|