using System;
using Shared.Common;
using Shared.Phone.UserView;
using Shared.Phone.Device.CommonForm;
namespace Shared.Phone.Login
{
///
/// 登录界面
///
public class AccountLogin : FrameLayout
{
#region ◆ 变量____________________________
///
/// 背景视图
///
private FrameLayout midFrameLayout;
///
/// 手机邮箱
///
private PhoneEmailForm phoneEmailForm;
///
/// phoneRowForm
///
private PhoneLoginRowForm phoneRow;
///
/// emailRow
///
private EmailLoginRowForm emailRow;
///
/// pwdRow
///
private PwdLoginRowForm pwdRow;
///
/// 账号密码fl
///
private FrameLayout accountPwdFL;
///
/// 登录错误提示按钮
///
private Button loginErrorBtn;
///
/// 忘记密码按钮
///
private Button forgotPasswordBtn;
///
/// 登录按钮
///
private Button loginBtn;
///
/// 验证码登录按钮
///
private Button loginByCodeBtn;
///
/// 注册按钮
///
private Button registerBtn;
///
/// 账号
///
private string account;
///
/// 密码
///
private string password;
///
/// wechat
///
private Button wechatBtn;
///
/// qq
///
private Button qqBtn;
#endregion
#region ◆ 构造方法_________________________
///
/// 构造方法
///
public AccountLogin()
{
CommonPage.Instance.IsDrawerLockMode = true;
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
Tag = "Login";
}
public override void RemoveFromParent()
{
base.RemoveFromParent();
}
#endregion
#region ◆ 显示界面_________________________
///
/// 显示界面
///
/// Account.
/// Password.
public void Show(string account = "", string password = "")
{
if (Config.Instance.IsLogin)
{
}
else
{
LoginViewShow(account, password);
}
}
///
/// Logins the view show.
///
/// Account.
/// Password.
public void LoginViewShow(string account = "", string password = "")
{
this.account = account;
this.password = password;
#region midFrameLayout
midFrameLayout = new FrameLayout()
{
Width = LayoutParams.MatchParent,
Height = Application.GetRealHeight(CommonPage.AppRealHeight),
BackgroundColor =ZigbeeColor.Current.GXCBackgroundColor
};
AddChidren(midFrameLayout);
#endregion
#region 布局账户,密码,忘记密码,注册 手机验证码登录
var logoBG = new Button()
{
Height = Application.GetRealHeight(619),
UnSelectedImagePath = "Account/Logo_loginBG.png"
};
midFrameLayout.AddChidren(logoBG);
var phoneEmailBGFL = new FrameLayout()
{
Y = logoBG.Bottom,
Height = Application.GetRealHeight(1921),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
midFrameLayout.AddChidren(phoneEmailBGFL);
var logo = new Button()
{
Width = Application.GetMinRealAverage(184),
Height = Application.GetMinRealAverage(184),
Y = Application.GetRealHeight(230),
UnSelectedImagePath = "Account/Logo_White.png",
Gravity = Gravity.CenterHorizontal
};
midFrameLayout.AddChidren(logo);
var logoName = new Button()
{
Y = logo.Bottom,
Height = Application.GetRealHeight(69),
Width = Application.GetRealWidth(300),
Gravity = Gravity.CenterHorizontal,
TextID = R.MyInternationalizationString.AppName,
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
TextSize=16
};
midFrameLayout.AddChidren(logoName);
phoneEmailForm = new PhoneEmailForm();
phoneEmailForm.Init(midFrameLayout);
//错误提示Btn
loginErrorBtn = new Button()
{
X = Application.GetRealWidth(242),
Y = Application.GetRealHeight(740),
Width = Application.GetRealWidth(700),
Height = Application.GetRealHeight(58),
TextColor = ZigbeeColor.Current.GXCTextRed,
TextAlignment = TextAlignment.CenterLeft,
TextSize=CommonFormResouce.TextSize,
IsBold=true
};
midFrameLayout.AddChidren(loginErrorBtn);
accountPwdFL = new FrameLayout()
{
Y = Application.GetRealHeight(801),
Height = Application.GetRealHeight(553),
Width = Application.GetRealWidth(942),
Gravity = Gravity.CenterHorizontal,
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Radius = (uint)Application.GetRealHeight(17)
};
midFrameLayout.AddChidren(accountPwdFL);
AddPhoneOrEmailFL(accountPwdFL, "Phone");
forgotPasswordBtn = new Button()
{
X = Application.GetRealWidth(CommonPage.AppRealWidth - 115 - 250),
Y = Application.GetRealHeight(1198),
Width = Application.GetRealWidth(250),
Height = Application.GetRealHeight(58),
TextID = R.MyInternationalizationString.ForgotPWD_1,
TextSize = CommonFormResouce.loginTextSize,
TextColor = Shared.Common.ZigbeeColor.Current.GXCTextGrayColor,
TextAlignment = TextAlignment.CenterRight
};
midFrameLayout.AddChidren(forgotPasswordBtn);
loginBtn = new Button()
{
Y = Application.GetRealHeight(1293),
Width = Application.GetRealWidth(688),
Height = Application.GetRealHeight(127),
Gravity = Gravity.CenterHorizontal,
TextID = R.MyInternationalizationString.Login,
TextSize = 16,
TextColor = ZigbeeColor.Current.GXCTextGrayColor,
SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
SelectedBackgroundColor = ZigbeeColor.Current.GXCButtonBlackSelectedColor,
BackgroundColor = ZigbeeColor.Current.GXCButtonUnSelectedColor,
Radius = (uint)Application.GetRealHeight(127 / 2),
Enable = !string.IsNullOrEmpty(pwdRow.PasswrodET?.Text),
IsSelected = !string.IsNullOrEmpty(pwdRow.PasswrodET?.Text),
IsBold=true
};
midFrameLayout.AddChidren(loginBtn);
loginByCodeBtn = new Button()
{
X=Application.GetRealWidth(98),
Y = Application.GetRealHeight(1466),
Width = Application.GetRealWidth(300),
Height = Application.GetRealHeight(49),
TextID = R.MyInternationalizationString.LoginByCode,
TextColor = ZigbeeColor.Current.GXCTextGrayColor,
TextAlignment = TextAlignment.CenterLeft,
TextSize = CommonFormResouce.loginTextSize
};
midFrameLayout.AddChidren(loginByCodeBtn);
registerBtn = new Button()
{
X = Application.GetRealWidth(738),
Y = Application.GetRealHeight(1466),
Width = Application.GetRealWidth(244),
Height = Application.GetRealHeight(49),
TextID = R.MyInternationalizationString.Register,
TextColor = ZigbeeColor.Current.GXCTextGrayColor,
TextAlignment = TextAlignment.CenterRight,
TextSize = CommonFormResouce.loginTextSize
};
midFrameLayout.AddChidren(registerBtn);
wechatBtn = new Button
{
X = Application.GetRealWidth(395),
Y = Application.GetRealHeight(1737),
Width = Application.GetMinRealAverage(115),
Height = Application.GetMinRealAverage(115),
UnSelectedImagePath = "Account/Wechat.png",
Gravity=Gravity.CenterHorizontal
};
midFrameLayout.AddChidren(wechatBtn);
qqBtn = new Button
{
X = Application.GetRealWidth(567),
Y = Application.GetRealHeight(1737),
Width = Application.GetMinRealAverage(115),
Height = Application.GetMinRealAverage(115),
UnSelectedImagePath = "Account/QQ.png"
};
//midFrameLayout.AddChidren(qqBtn);
#endregion
BindEvent();
if (string.IsNullOrEmpty(account) == false && AccountLogic.Instance.CheckEmail(account) == true)
{
SelectPhoneOrEmail_MouseUpEvent(phoneEmailForm.SelectedEmail, null);
this.account = string.Empty;
}
else
{
this.account = string.Empty;
}
}
#endregion
#region ◆ 绑定事件_________________________
///
/// 绑定按钮事件
///
private void BindEvent()
{
//选择手机邮箱
phoneEmailForm.SelectedPhone.MouseUpEventHandler += SelectPhoneOrEmail_MouseUpEvent;
phoneEmailForm.SelectedEmail.MouseUpEventHandler += SelectPhoneOrEmail_MouseUpEvent;
//登录事件
loginBtn.MouseUpEventHandler += LoginBtnEvent;
//短信登录
loginByCodeBtn.MouseUpEventHandler += LoginByCode;
//注册事件
registerBtn.MouseUpEventHandler += Register;
//忘记密码
forgotPasswordBtn.MouseUpEventHandler += ForgetPWD_MouseUpEvent;
//wechat
wechatBtn.MouseUpEventHandler += LoginByWechat;
//qq
qqBtn.MouseUpEventHandler += LoginByQQ;
}
#endregion
#region ◆ 登录____________________________
///
/// 登录事件
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void LoginBtnEvent(object sender,MouseEventArgs mouseEventArgs)
{
if (phoneEmailForm.SelectedPhone.IsSelected)
{
Login(phoneRow.AccountET.Text.Trim(), pwdRow.PasswrodET.Text.Trim());
}
else
{
Login(emailRow.AccountET.Text.Trim(), pwdRow.PasswrodET.Text.Trim());
}
}
///
/// 登录
///
/// Account.
/// Password.
private void Login(string accountStr, string passwordStr)
{
//Application.RunOnMainThread( () =>
//{
Action action = async () =>
{
try
{
if(CheckAccount(accountStr)==false)
{
return;
}
CommonPage.Loading.Start(Language.StringByID(R.MyInternationalizationString.Logining));
var requestObj = new SendDataToServer.LoginObj
{
Account = accountStr,
Password = passwordStr,
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();
CommonPage.Loading.Hide();
return;
}
var stateCodeStr = revertObj.StateCode.ToUpper();
//Error 不能直接从服务器取,只能根据状态码逐一判断
if (stateCodeStr == "SUCCESS")
{
if (revertObj.ResponseData == null)
{
return;
}
HomePage.Instance.ShowLoginLoadView();
new System.Threading.Thread(async () =>
{
//存储数据
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString());
var revertData = responseDataObj;
Config.ReFresh();
Config.Instance.Account = revertData.Account;
Config.Instance.Password = passwordStr;
Config.Instance.MD5PWD = revertData.MD5PWD;
Config.Instance.Guid = revertData.Guid;
Config.Instance.LoginDateTime = DateTime.Now;
Config.Instance.LoginToken = revertData.Token;
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();
//启动ZigBee
ZigBee.Common.Application.Init();
UserCenter.HdlRoomLogic.Current.InitAllRoom();
Application.RunOnMainThread(() =>
{
CommonPage.Loading.Hide();
this.RemoveFromParent();
CommonPage.Instance.RemoveViewByTag("Login");
UserPage.Instance.Fresh();
});
})
{ IsBackground = true }.Start();
}
else if (stateCodeStr == "NOTVERIFY")
{
CommonPage.Loading.Hide();
//未激活
loginErrorBtn.TextID = R.MyInternationalizationString.NOTVERIFY;
}
else if (stateCodeStr == "NOTENABLE")
{
CommonPage.Loading.Hide();
//该用户属于调试账号,并未启用
loginErrorBtn.TextID = R.MyInternationalizationString.NOTENABLE;
}
else if (stateCodeStr == "USERNAMEORPWDERROR")
{
CommonPage.Loading.Hide();
//账号或密码错误
loginErrorBtn.TextID = R.MyInternationalizationString.USERNAMEORPWDERROR;
}
else if (stateCodeStr == "ACCOUNTNOEXISTS")
{
CommonPage.Loading.Hide();
//账号不存在
loginErrorBtn.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS;
}
else if (stateCodeStr == "YOUDATANOISLOCALREGION")
{
CommonPage.Loading.Hide();
//不在本区域,需要重定向区域后再次请求登录
if (revertObj.ResponseData == null)
{
return;
}
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString());
CommonPage.RequestHttpsHost = responseDataObj.RegionServer;
//再次登录
Login(accountStr, passwordStr);
}
else
{
loginErrorBtn.TextID = R.MyInternationalizationString.RequestServerFailed;
}
}
catch (Exception ex)
{
System.Console.WriteLine($"登录失败--{ex.Message}");
CommonPage.Loading.Hide();
CommonPage.Instance.FailureToServer();
}
finally
{
//CommonPage.Loading.Hide();
}
//});
};
action();
}
///
/// CheckAccount
///
///
///
private bool CheckAccount(string accountStr)
{
if (phoneEmailForm.SelectedEmail.IsSelected)
{
if (AccountLogic.Instance.CheckEmail(accountStr) == false)
{
loginErrorBtn.TextID = R.MyInternationalizationString.TheEmailError;
return false;
}
}
else
{
if (AccountLogic.Instance.CheckPhone(accountStr) == false)
{
loginErrorBtn.TextID = R.MyInternationalizationString.ThePhoneError;
return false;
}
}
return true;
}
///
/// 通过验证码登录
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void LoginByCode(object sender,MouseEventArgs mouseEventArgs)
{
//this.RemoveFromParent();
var loginByCodePage = new AccountLoginByCode();
CommonPage.Instance.AddChidren(loginByCodePage);
loginByCodePage.Show();
}
///
/// wechat登录
///
///
///
private void LoginByWechat(object sender, MouseEventArgs mouseEventArgs)
{
#if Android
//var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP),
// Language.StringByID(R.MyInternationalizationString.LoginByWechat),
// Language.StringByID(R.MyInternationalizationString.Cancel),
// Language.StringByID(R.MyInternationalizationString.Confrim));
//alert.Show();
//alert.ResultEventHandler += (send, e) =>
//{
//if (e)
//{
com.hdl.home.Application.WXLogin();
com.hdl.home.WXEntryActivity.RespAction = (authStr) =>
{
if (authStr == null)
{
}
else
{
new System.Threading.Thread(async () =>
{
var re = await isBindAuthAsync(authStr);
if (re)
{
Application.RunOnMainThread(() =>
{
//直接登录
HomePage.Instance.ShowLoginLoadView();
});
var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID();
var homes = await House.GetHomeLists();
//刷新个人中心的内存及线程
await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
//启动ZigBee
ZigBee.Common.Application.Init();
UserCenter.HdlRoomLogic.Current.InitAllRoom();
Application.RunOnMainThread(() =>
{
this.RemoveFromParent();
CommonPage.Instance.RemoveViewByTag("Login");
UserPage.Instance.Fresh();
});
}
else
{
var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr);
Application.RunOnMainThread(() =>
{
var registerPage = new AccountRegister();
Shared.Common.CommonPage.Instance.AddChidren(registerPage);
registerPage.OpenID = authRes.openid;
registerPage.Show();
});
}
})
{ IsBackground = true }.Start();
}
};
//}
//};
#endif
#if iOS
Home.IOS.AppDelegate.WXLogin();
Home.IOS.AppDelegate.RespAction = (authStr) =>
{
if (authStr == null)
{
}
else
{
new System.Threading.Thread(async () =>
{
var re = await isBindAuthAsync(authStr);
if (re)
{
//直接登录
//this.RemoveFromParent();
//UserPage.Instance.Fresh();
var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID();
var homes = await House.GetHomeLists();
//启动ZigBee
ZigBee.Common.Application.Init();
//刷新个人中心的内存及线程
await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
UserCenter.HdlRoomLogic.Current.InitAllRoom();
Application.RunOnMainThread(() =>
{
this.RemoveFromParent();
UserPage.Instance.Fresh();
});
}
else
{
var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr);
Application.RunOnMainThread(() =>
{
var registerPage = new AccountRegister();
Shared.Common.CommonPage.Instance.AddChidren(registerPage);
registerPage.OpenID = authRes.openid;
registerPage.Show();
});
}
})
{ IsBackground = true }.Start();
}
};
#endif
}
///
/// qq登录
///
///
///
private void LoginByQQ(object sender, MouseEventArgs mouseEventArgs)
{
}
///
/// 是否已绑定
///
///
///
private async System.Threading.Tasks.Task isBindAuthAsync(string authStr)
{
var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr);
var auth = new SendDataToServer.AuthUser()
{
AccessToken = authRes.access_token,
RefreshToken = authRes.refresh_token,
OpenID = authRes.openid
};
//获取微信昵称
var strUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + authRes.access_token;
strUrl += "&openid=" + authRes.openid;
var byteData = await Common.CommonPage.Instance.DoRequestZigbeeHttpsInterface(strUrl, null, null, "GET");
if (byteData == null)
{
return false;
}
var receipData = System.Text.Encoding.UTF8.GetString(byteData);
var nickData = Newtonsoft.Json.JsonConvert.DeserializeObject(receipData);
auth.UserName = nickData.nickname;
var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(auth);
var revertObj = await CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/InsertOrUpdateAuthUser", System.Text.Encoding.UTF8.GetBytes(requestJson));
if (revertObj == null)
{
return false;
}
var stateCodeStr = revertObj.StateCode.ToUpper();
if (stateCodeStr == "SUCCESS")
{
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString());
var revertData = responseDataObj;
Config.Instance.Account = revertData.Account;
Config.Instance.MD5PWD = revertData.MD5PWD;
Config.Instance.Guid = revertData.Guid;
Config.Instance.LoginDateTime = DateTime.Now;
if (Config.Instance.AccountList.Find((obj) => obj == revertData.Account) == null)
{
Config.Instance.AccountList.Add(revertData.Account);
}
Config.Instance.Save();
return true;
}
else
{
return false;
}
}
///
/// phone/email 选择
///
///
///
private void SelectPhoneOrEmail_MouseUpEvent(object sender, MouseEventArgs mouseEventArgs)
{
phoneEmailForm.SelectedPhone.IsSelected = phoneEmailForm.SelectedEmail.IsSelected = false;
phoneEmailForm.SelectedPhone.IsBold = phoneEmailForm.SelectedEmail.IsBold = false;
loginBtn.Enable = loginBtn.IsSelected = false;
loginErrorBtn.Text = string.Empty;
(sender as Button).IsSelected = (sender as Button).IsBold = true;
if((sender as Button).Tag.ToString()=="Phone")
{
AddPhoneOrEmailFL(accountPwdFL, "Phone");
}
else
{
AddPhoneOrEmailFL(accountPwdFL, "Email");
}
}
///
/// AddPhoneOrEmailFL
///
///
///
private void AddPhoneOrEmailFL(FrameLayout accountPwdFrameLayout,string phoneOrEmail)
{
accountPwdFrameLayout.RemoveAll();
if (phoneOrEmail == "Phone")
{
phoneRow = new PhoneLoginRowForm();
phoneRow.Init(accountPwdFrameLayout, this, this.account, 29, 29);
phoneRow.AccountET.TextChangeEventHandler += Account_TextChange;
}
else
{
emailRow = new EmailLoginRowForm();
emailRow.Init(accountPwdFrameLayout, this.account, 29, 29);
emailRow.AccountET.TextChangeEventHandler += Account_TextChange;
}
pwdRow = new PwdLoginRowForm();
pwdRow.Init(accountPwdFrameLayout, 29, 225);
pwdRow.PasswrodET.TextChangeEventHandler += Pwd_TextChange;
}
#endregion
#region ◆ 忘记密码________________________
///
/// 忘记密码
///
private void ForgetPWD_MouseUpEvent(object sender, MouseEventArgs mouseEventArgs)
{
var forgot = new AccountForgetPWD();
CommonPage.Instance.AddChidren(forgot);
forgot.Show();
}
#endregion
#region ◆ 注册_____________________________
///
/// 注册
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void Register(object sender,MouseEventArgs mouseEventArgs)
{
var registerPage = new AccountRegister();
CommonPage.Instance.AddChidren(registerPage);
registerPage.Show();
}
#endregion
#region ◆ 账号密码监听______________________
///
/// 账号监听
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void Account_TextChange(object sender,string mouseEventArgs)
{
loginErrorBtn.Text = string.Empty;
}
///
/// 密码监听事件
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void Pwd_TextChange(object sender,string mouseEventArgs)
{
loginErrorBtn.Text = string.Empty;
if (1 <= pwdRow.PasswrodET.Text.Trim().Length && pwdRow.PasswrodET.Text.Trim().Length <= 16 && (phoneRow.AccountET.Text.Trim().Length > 0 || emailRow?.AccountET.Text.Trim().Length>0))
{
loginBtn.Enable = loginBtn.IsSelected = true;
}
else if (pwdRow.PasswrodET.Text.Trim().Length > 16)
{
pwdRow.PasswrodET.Text = mouseEventArgs.Remove(16);
}
else if (pwdRow.PasswrodET.Text.Trim().Length > 16 && (phoneRow.AccountET.Text.Trim().Length > 0 || emailRow?.AccountET.Text.Trim().Length > 0))
{
loginBtn.Enable = loginBtn.IsSelected = true;
pwdRow.PasswrodET.Text = mouseEventArgs.Remove(16);
}
else
{
loginBtn.Enable = loginBtn.IsSelected = false;
}
}
#endregion
}
}