using System;
using Shared.Common;
using Shared.Phone.UserView;
using Shared.Phone.Device.CommonForm;
using Shared.Phone.UserCenter;
namespace Shared.Phone.Login
{
///
/// 登录界面
///
public class AccountLoginForm : FrameLayoutBase
{
#region ■ 变量声明___________________________
///
/// 错误提示控件
///
private NormalViewControl btnErrorMsg = null;
///
/// 是否同意隐私协议
///
private bool isAgreePrivacyPolicy = false;
#endregion
#region ■ 初始化_____________________________
///
/// 界面显示
///
/// 登陆账号
public void ShowForm(string account = "")
{
if (account == string.Empty)
{
//使用上一次登陆的账号
account = Common.Config.Instance.Account;
}
CommonPage.Instance.IsDrawerLockMode = true;
this.Tag = "Login";
//界面上部的黑色图片
var btnTopBlackPic = new NormalViewControl(this.Width, Application.GetRealHeight(619), false);
btnTopBlackPic.UnSelectedImagePath = "Account/Logo_loginBG.png";
this.AddChidren(btnTopBlackPic);
//中间浅白色的背景
var frameMidBack = new FrameLayout();
frameMidBack.Y = btnTopBlackPic.Bottom;
frameMidBack.Height = this.Height - btnTopBlackPic.Bottom;
frameMidBack.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
this.AddChidren(frameMidBack);
//Evoyo Home的图标
var btnLogoIcon = new PicViewControl(184, 184);
btnLogoIcon.Y = Application.GetRealHeight(230);
btnLogoIcon.UnSelectedImagePath = "Account/Logo_WhiteHome.png";
btnLogoIcon.Gravity = Gravity.CenterHorizontal;
this.AddChidren(btnLogoIcon);
//Evoyo Home
var btnLogoName = new NormalViewControl(700, 69, true);
btnLogoName.Y = btnLogoIcon.Bottom;
btnLogoName.Gravity = Gravity.CenterHorizontal;
btnLogoName.TextID = R.MyInternationalizationString.AppName;
btnLogoName.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
btnLogoName.TextAlignment = TextAlignment.Center;
btnLogoName.TextSize = 16;
this.AddChidren(btnLogoName);
//1:手机号 2:邮箱
int selectIndex = account.Contains("@") == false ? 1 : 2;
//初始化 手机账号登陆窗口
var frameAccLoginPhoneback = this.InitAccoutLoginWindow(frameMidBack, selectIndex == 1 ? account : string.Empty, 1);
//初始化 邮箱账号登陆窗口
var frameEmailLoginPhoneback = this.InitAccoutLoginWindow(frameMidBack, selectIndex == 1 ? string.Empty : account, 2);
//初始化 手机账号验证码登陆窗口
var frameAccCodeLoginPhoneback = this.InitCodeLoginWindow(frameMidBack, selectIndex == 1 ? account : string.Empty, 1);
//初始化 邮箱账号验证码登陆窗口
var frameEmailCodeLoginPhoneback = this.InitCodeLoginWindow(frameMidBack, selectIndex == 1 ? string.Empty : account, 2);
//定义这两个东西,是为了减少判断的代码
var framePhone = frameAccLoginPhoneback;
var frameEmail = frameEmailLoginPhoneback;
//邮箱,手机号的切换控件
var sitchControl = new Controls.PhoneEmailSelectControl();
sitchControl.Y = Application.GetRealHeight(559);
this.AddChidren(sitchControl);
sitchControl.SelectMenuEvent += (selectMenu) =>
{
selectIndex = selectMenu;
//手机号
if (selectIndex == 1)
{
framePhone.Visible = true;
frameEmail.Visible = false;
}
//邮箱
else if (selectIndex == 2)
{
framePhone.Visible = false;
frameEmail.Visible = true;
}
};
//执行初始化
sitchControl.InitControl(ZigbeeColor.Current.GXCButtonSelectedColor, selectIndex);
//错误提示控件
this.btnErrorMsg = new NormalViewControl(700, 60, true);
btnErrorMsg.Y = frameAccLoginPhoneback.Y - Application.GetRealHeight(60 + 3);
btnErrorMsg.X = Application.GetRealWidth(288);
btnErrorMsg.TextColor = ZigbeeColor.Current.GXCTextRed;
btnErrorMsg.IsBold = true;
frameMidBack.AddChidren(btnErrorMsg);
//验证码登陆
//1:账号登陆 2:验证码登陆
int codeDiv = 1;
var btnLoginByCode = new NormalViewControl(300, 100, true);
btnLoginByCode.X = Application.GetRealWidth(98);
btnLoginByCode.Y = frameAccLoginPhoneback.Bottom + Application.GetRealHeight(21);
btnLoginByCode.TextID = R.MyInternationalizationString.LoginByCode;
btnLoginByCode.TextColor = UserCenterColor.Current.TextGrayColor3;
btnLoginByCode.TextSize = 12;
frameMidBack.AddChidren(btnLoginByCode);
btnLoginByCode.ButtonClickEvent += (sender, e) =>
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
if (codeDiv == 1)
{
//验证码登陆
codeDiv = 2;
btnLoginByCode.TextID = R.MyInternationalizationString.LoginByAccountPWD; //账号登陆
//账号登陆的两个东西隐藏
frameAccLoginPhoneback.Visible = false;
frameEmailLoginPhoneback.Visible = false;
//替换这两个东西
framePhone = frameAccCodeLoginPhoneback;
frameEmail = frameEmailCodeLoginPhoneback;
}
else
{
//账号登陆
codeDiv = 1;
btnLoginByCode.TextID = R.MyInternationalizationString.LoginByCode;//验证码登陆
//验证码登陆的两个东西隐藏
frameAccCodeLoginPhoneback.Visible = false;
frameEmailCodeLoginPhoneback.Visible = false;
//替换这两个东西
framePhone = frameAccLoginPhoneback;
frameEmail = frameEmailLoginPhoneback;
}
//刷新菜单
sitchControl.SetSelectIndex(1);
};
//注册用户
var btnRegister = new NormalViewControl(300, 100, true);
btnRegister.Y = btnLoginByCode.Y;
btnRegister.X = frameMidBack.Width - Application.GetRealWidth(98 + 300);
btnRegister.TextID = R.MyInternationalizationString.Register;
btnRegister.TextColor = UserCenterColor.Current.TextGrayColor3;
btnRegister.TextSize = 12;
btnRegister.TextAlignment = TextAlignment.CenterRight;
frameMidBack.AddChidren(btnRegister);
btnRegister.ButtonClickEvent += (sender, e) =>
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
var registerPage = new AccountRegister();
CommonPage.Instance.AddChidren(registerPage);
registerPage.Show();
};
//微信图标
var btnWebChat = new IconViewControl(115);
btnWebChat.Y = frameMidBack.Height - Application.GetRealHeight(69) - btnWebChat.IconSize;
btnWebChat.UnSelectedImagePath = "Account/Wechat.png";
btnWebChat.Gravity = Gravity.CenterHorizontal;
//frameMidBack.AddChidren(btnWebChat);
btnWebChat.ButtonClickEvent += (sender, e) =>
{
//微信登陆
this.LoginByWechat();
};
//添加服务协议控件
this.AddServiceAgreementControl(frameMidBack);
//游客体验
var btnTiyan = new NormalViewControl(300, 100, true);
btnTiyan.Y = btnLoginByCode.Y;
btnTiyan.TextAlignment = TextAlignment.Center;
btnTiyan.TextColor = UserCenterColor.Current.TextOrangeColor;
btnTiyan.TextSize = 12;
btnTiyan.Gravity = Gravity.CenterHorizontal;
btnTiyan.TextID = R.MyInternationalizationString.uExperienceAccount;
frameMidBack.AddChidren(btnTiyan);
btnTiyan.ButtonClickEvent += (sender, e) =>
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
btnTiyan.CanClick = false;
//显示启动页
HdlThreadLogic.Current.RunThread(() =>
{
//初始化全部体验数据
HdlExperienceAccountLogic.Current.InitAllExperienceData();
HdlThreadLogic.Current.RunMain(() =>
{
this.RemoveFromParent();
CommonPage.Instance.RemoveViewByTag("Login");
UserPage.Instance.ReFreshControl();
});
});
};
}
#endregion
#region ■ 初始化账号登陆窗口_________________
///
/// 初始化账号登陆窗口
///
/// 中间浅色的背景容器
/// 登陆账号
/// 1:手机号 2:邮箱
private FrameLayout InitAccoutLoginWindow(FrameLayout frameMidBack, string i_account, int i_div)
{
//登陆按钮
BottomClickButton btnLogin = null;
//账号输入框
TextInputControl txtAccount = null;
//密码输入框
TextInputControl txtPsw = null;
//容器
var frameBack = new FrameLayout();
frameBack.Height = Application.GetRealHeight(620);
frameBack.Y = Application.GetRealHeight(181);
frameMidBack.AddChidren(frameBack);
frameBack.Visible = false;
//白色背景
var frameWhiteBack = new FrameLayout();
frameWhiteBack.Width = Application.GetRealWidth(942);
frameWhiteBack.Height = Application.GetRealHeight(553);
frameWhiteBack.BackgroundColor = UserCenterColor.Current.White;
frameWhiteBack.Radius = (uint)Application.GetRealHeight(17);
frameWhiteBack.Gravity = Gravity.CenterHorizontal;
frameBack.AddChidren(frameWhiteBack);
//账号行
var rowAccount = new FrameLayout();
rowAccount.Y = Application.GetRealHeight(29);
rowAccount.Width = Application.GetRealWidth(884);
rowAccount.Height = Application.GetRealHeight(138);
rowAccount.Gravity = Gravity.CenterHorizontal;
frameWhiteBack.AddChidren(rowAccount);
//账号图标
var btnAccountIcon = new IconViewControl(92);
btnAccountIcon.X = Application.GetRealWidth(69);
btnAccountIcon.Gravity = Gravity.CenterVertical;
btnAccountIcon.UnSelectedImagePath = "Account/Account.png";
rowAccount.AddChidren(btnAccountIcon);
//账号输入框
txtAccount = new TextInputControl(600, 92, true);
txtAccount.X = btnAccountIcon.Right + Application.GetRealWidth(35);
txtAccount.Gravity = Gravity.CenterVertical;
if (i_div == 1)
{
//手机号
txtAccount.IsNumberKeyboardType = true;
txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPhoneNum);
}
else
{
//邮箱
txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputEmail);
}
txtAccount.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor;
txtAccount.Text = i_account;
rowAccount.AddChidren(txtAccount);
txtAccount.TextChangeEventHandler += (sender, e) =>
{
//隐藏错误提示
this.btnErrorMsg.Text = string.Empty;
if (txtAccount.Text.Trim().Length > 0 && txtPsw.Text.Length > 0)
{
//能够登陆
if (btnLogin.CanClick == false) { btnLogin.CanClick = true; }
return;
}
//不能点击
if (btnLogin.CanClick == true) { btnLogin.CanClick = false; }
};
//底线
var btnAccountLine = new NormalViewControl(rowAccount.Width, 1, false);
btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnAccountLine.Y = rowAccount.Height - 2;
rowAccount.AddChidren(btnAccountLine);
txtAccount.FoucsChanged += (sender, focusEvent) =>
{
//焦点进入时,底线颜色变更
if (focusEvent.Focus)
{
btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor;
btnAccountLine.Height = 2;
}
else
{
btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnAccountLine.Height = 1;
}
};
//密码行
var rowPassword = new FrameLayout();
rowPassword.Y = rowAccount.Bottom + Application.GetRealHeight(58);
rowPassword.Width = rowAccount.Width;
rowPassword.Height = rowAccount.Height;
rowPassword.Gravity = Gravity.CenterHorizontal;
frameWhiteBack.AddChidren(rowPassword);
//账号图标
var btnPswIcon = new IconViewControl(92);
btnPswIcon.X = btnAccountIcon.X;
btnPswIcon.Gravity = Gravity.CenterVertical;
btnPswIcon.UnSelectedImagePath = "Account/Password.png";
rowPassword.AddChidren(btnPswIcon);
//密码输入框
txtPsw = new TextInputControl(600, 92, true);
txtPsw.X = txtAccount.X;
txtPsw.Gravity = Gravity.CenterVertical;
txtPsw.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPWD);
txtPsw.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor;
txtPsw.SecureTextEntry = true;
rowPassword.AddChidren(txtPsw);
txtPsw.TextChangeEventHandler += (sender, e) =>
{
txtAccount.TextChangeEventHandler(sender, e);
};
//隐藏或者显示密码的图标
var btnHiden = new IconViewControl(92);
btnHiden.X = rowPassword.Width - Application.GetRealWidth(46) - btnHiden.IconSize;
btnHiden.SelectedImagePath = "Account/UnhidePwd.png";
btnHiden.UnSelectedImagePath = "Account/HidePwd.png";
btnHiden.Gravity = Gravity.CenterVertical;
rowPassword.AddChidren(btnHiden);
btnHiden.ButtonClickEvent += (sender, e) =>
{
txtPsw.SecureTextEntry = !txtPsw.SecureTextEntry;
btnHiden.IsSelected = !btnHiden.IsSelected;
};
//底线
var btnPswLine = new NormalViewControl(rowPassword.Width, 1, false);
btnPswLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnPswLine.Y = rowPassword.Height - 2;
rowPassword.AddChidren(btnPswLine);
txtPsw.FoucsChanged += (sender, focusEvent) =>
{
//焦点进入时,底线颜色变更
if (focusEvent.Focus)
{
btnPswLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor;
btnPswLine.Height = 2;
}
else
{
btnPswLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnPswLine.Height = 1;
}
};
//忘记密码?
var btnForgot = new NormalViewControl(250, 90, true);
btnForgot.Y = rowPassword.Bottom + Application.GetRealHeight(15);
btnForgot.X = frameWhiteBack.Width - Application.GetRealWidth(250 + 35);
btnForgot.TextSize = 12;
btnForgot.TextColor = UserCenterColor.Current.TextGrayColor3;
btnForgot.TextAlignment = TextAlignment.CenterRight;
btnForgot.TextID = R.MyInternationalizationString.ForgotPWD_1;
frameWhiteBack.AddChidren(btnForgot);
btnForgot.ButtonClickEvent += (sender, e) =>
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
var forgot = new AccountForgetPWD();
CommonPage.Instance.AddChidren(forgot);
forgot.Show();
};
//登陆按钮
btnLogin = new BottomClickButton(688);
btnLogin.Gravity = Gravity.BottomCenter;
btnLogin.TextID = R.MyInternationalizationString.Login;
btnLogin.oldBackgroundColor = btnLogin.BackgroundColor;
frameBack.AddChidren(btnLogin);
btnLogin.CanClick = false;
btnLogin.ButtonClickEvent += (sender, e) =>
{
//账号密码登陆
this.LoginByAccountAndPsw(txtAccount.Text.Trim(), txtPsw.Text, i_div);
};
return frameBack;
}
#endregion
#region ■ 初始化验证码登陆窗口_______________
///
/// 初始化验证码登陆窗口
///
/// 中间浅色的背景容器
/// 登陆账号
/// 1:手机号 2:邮箱
private FrameLayout InitCodeLoginWindow(FrameLayout frameMidBack, string i_account, int i_div)
{
//登陆按钮
BottomClickButton btnLogin = null;
//账号输入框
TextInputControl txtAccount = null;
//密码输入框
TextInputControl txtVerCode = null;
//当前输入的账号(防止发送验证码之后,修改账号)
string nowInputAccount = string.Empty;
//是否已经发送了验证码
bool hadSendCode = false;
//容器
var frameBack = new FrameLayout();
frameBack.Height = Application.GetRealHeight(620);
frameBack.Y = Application.GetRealHeight(181);
frameMidBack.AddChidren(frameBack);
frameBack.Visible = false;
//白色背景
var frameWhiteBack = new FrameLayout();
frameWhiteBack.Width = Application.GetRealWidth(942);
frameWhiteBack.Height = Application.GetRealHeight(553);
frameWhiteBack.BackgroundColor = UserCenterColor.Current.White;
frameWhiteBack.Radius = (uint)Application.GetRealHeight(17);
frameWhiteBack.Gravity = Gravity.CenterHorizontal;
frameBack.AddChidren(frameWhiteBack);
//账号行
var rowAccount = new FrameLayout();
rowAccount.Y = Application.GetRealHeight(29);
rowAccount.Width = Application.GetRealWidth(884);
rowAccount.Height = Application.GetRealHeight(138);
rowAccount.Gravity = Gravity.CenterHorizontal;
frameWhiteBack.AddChidren(rowAccount);
if (i_div == 2)
{
//账号图标
var btnAccountIcon = new IconViewControl(92);
btnAccountIcon.X = Application.GetRealWidth(69);
btnAccountIcon.Gravity = Gravity.CenterVertical;
btnAccountIcon.UnSelectedImagePath = "Account/Account.png";
rowAccount.AddChidren(btnAccountIcon);
}
else
{
//地区码
var btnArea = new NormalViewControl(139, 60, true);
btnArea.TextColor = UserCenterColor.Current.TextGrayColor1;
btnArea.TextAlignment = TextAlignment.CenterRight;
btnArea.Text = "+86";
btnArea.Gravity = Gravity.CenterVertical;
rowAccount.AddChidren(btnArea);
}
//账号输入框
txtAccount = new TextInputControl(600, 92, true);
txtAccount.X = Application.GetRealWidth(193);
txtAccount.Gravity = Gravity.CenterVertical;
if (i_div == 1)
{
//手机号
txtAccount.IsNumberKeyboardType = true;
txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPhoneNum);
}
else
{
//邮箱
txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputEmail);
}
txtAccount.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor;
txtAccount.Text = i_account;
rowAccount.AddChidren(txtAccount);
txtAccount.TextChangeEventHandler += (sender, e) =>
{
//隐藏错误提示
this.btnErrorMsg.Text = string.Empty;
//必须要发送成功才行
if (hadSendCode == true && txtAccount.Text.Trim().Length > 0 && txtVerCode.Text.Length > 0)
{
//能够登陆
if (btnLogin.CanClick == false) { btnLogin.CanClick = true; }
return;
}
//不能点击
if (btnLogin.CanClick == true) { btnLogin.CanClick = false; }
};
//底线
var btnAccountLine = new NormalViewControl(rowAccount.Width, 1, false);
btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnAccountLine.Y = rowAccount.Height - 2;
rowAccount.AddChidren(btnAccountLine);
txtAccount.FoucsChanged += (sender, focusEvent) =>
{
//焦点进入时,底线颜色变更
if (focusEvent.Focus)
{
btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor;
btnAccountLine.Height = 2;
}
else
{
btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnAccountLine.Height = 1;
}
};
//验证码行
var rowVerCode = new FrameLayout();
rowVerCode.Y = rowAccount.Bottom + Application.GetRealHeight(58);
rowVerCode.Width = rowAccount.Width;
rowVerCode.Height = rowAccount.Height;
rowVerCode.Gravity = Gravity.CenterHorizontal;
frameWhiteBack.AddChidren(rowVerCode);
//账号图标
var btnCodeIcon = new IconViewControl(92);
btnCodeIcon.X = Application.GetRealWidth(69);
btnCodeIcon.Gravity = Gravity.CenterVertical;
btnCodeIcon.UnSelectedImagePath = "Account/Code.png";
rowVerCode.AddChidren(btnCodeIcon);
//验证码输入框
txtVerCode = new TextInputControl(350, 92, true);
txtVerCode.X = btnCodeIcon.Right + Application.GetRealWidth(35);
txtVerCode.Gravity = Gravity.CenterVertical;
txtVerCode.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputVerificationCode);
txtVerCode.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor;
rowVerCode.AddChidren(txtVerCode);
txtVerCode.TextChangeEventHandler += (sender, e) =>
{
txtAccount.TextChangeEventHandler(sender, e);
};
//竖线
var btnLine2 = new NormalViewControl(1, Application.GetRealHeight(66), false);
btnLine2.X = Application.GetRealWidth(611);
btnLine2.Gravity = Gravity.CenterVertical;
btnLine2.BackgroundColor = ZigbeeColor.Current.GXCLineColor;
rowVerCode.AddChidren(btnLine2);
//获取验证码
var btnSendCode = new NormalViewControl(250, 70, true);
btnSendCode.X = btnLine2.Right + Application.GetRealWidth(36);
btnSendCode.Gravity = Gravity.CenterVertical;
btnSendCode.TextID = R.MyInternationalizationString.SendVerificationCode;
btnSendCode.TextColor = UserCenterColor.Current.TextGrayColor3;
btnSendCode.TextAlignment = TextAlignment.Center;
btnSendCode.IsBold = true;
rowVerCode.AddChidren(btnSendCode);
btnSendCode.ButtonClickEvent += (sender, e) =>
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
//检测输入的账号
nowInputAccount = txtAccount.Text.Trim();
if (this.CheckInputAccount("86", nowInputAccount, i_div) == false)
{
return;
}
//发送验证码
hadSendCode = this.SendVerCode(btnSendCode, nowInputAccount, i_div);
};
//底线
var btnCodeLine = new NormalViewControl(rowVerCode.Width, 1, false);
btnCodeLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnCodeLine.Y = rowVerCode.Height - 2;
rowVerCode.AddChidren(btnCodeLine);
txtVerCode.FoucsChanged += (sender, focusEvent) =>
{
//焦点进入时,底线颜色变更
if (focusEvent.Focus)
{
btnCodeLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor;
btnCodeLine.Height = 2;
}
else
{
btnCodeLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
btnCodeLine.Height = 1;
}
};
//忘记密码?
var btnForgot = new NormalViewControl(250, 90, true);
btnForgot.Y = rowVerCode.Bottom + Application.GetRealHeight(15);
btnForgot.X = frameWhiteBack.Width - Application.GetRealWidth(250 + 35);
btnForgot.TextSize = 12;
btnForgot.TextColor = UserCenterColor.Current.TextGrayColor3;
btnForgot.TextAlignment = TextAlignment.CenterRight;
btnForgot.TextID = R.MyInternationalizationString.ForgotPWD_1;
frameWhiteBack.AddChidren(btnForgot);
btnForgot.ButtonClickEvent += (sender, e) =>
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
var forgot = new AccountForgetPWD();
CommonPage.Instance.AddChidren(forgot);
forgot.Show();
};
//登陆按钮
btnLogin = new BottomClickButton(688);
btnLogin.Gravity = Gravity.BottomCenter;
btnLogin.TextID = R.MyInternationalizationString.Login;
btnLogin.oldBackgroundColor = btnLogin.BackgroundColor;
frameBack.AddChidren(btnLogin);
btnLogin.CanClick = false;
btnLogin.ButtonClickEvent += (sender, e) =>
{
//验证码登陆
this.LoginByVerCode(nowInputAccount, txtVerCode.Text.Trim(), i_div);
};
return frameBack;
}
#endregion
#region ■ 服务协议___________________________
///
/// 添加服务协议控件
///
///
private void AddServiceAgreementControl(FrameLayout frameBack)
{
var frameRow = new FrameLayout();
frameRow.Height = this.GetPictrueRealSize(110);
frameRow.Y = Application.GetRealHeight(959);
frameRow.Gravity = Gravity.CenterHorizontal;
//字体总宽度
int fontWidth = 0;
int btnWidth = 0;
//特殊的误差值
int speceilValue = ControlCommonResourse.TwoTextSpace;
//我已阅读并同意
var btnMsg1 = new NormalViewControl(100, 90, true);
btnMsg1.Gravity = Gravity.CenterVertical;
btnMsg1.Y = Application.GetRealHeight(968);
btnMsg1.TextSize = 12;
btnMsg1.TextColor = UserCenterColor.Current.TextGrayColor1;
btnMsg1.TextID = R.MyInternationalizationString.uMyHadReadAndAgree;
//计算真实宽度
btnWidth = btnMsg1.GetRealWidthByText();
btnMsg1.Width = btnWidth;
fontWidth += btnWidth;
//《隐私权政策》
var btnMsg2 = new NormalViewControl(100, 90, true);
btnMsg2.Gravity = Gravity.CenterVertical;
btnMsg2.TextSize = 12;
btnMsg2.TextColor = 0xFF4A90E2;
btnMsg2.Text = "《" + Language.StringByID(R.MyInternationalizationString.uPrivacyPolicy) + "》";
//计算真实宽度
btnWidth = btnMsg2.GetRealWidthByText();
btnMsg2.Width = btnWidth;
fontWidth += btnWidth;
btnMsg2.ButtonClickEvent += (sender, e) =>
{
var form = new UserCenter.Abount.SLAForm();
CommonPage.Instance.AddChidren(form);
form.InitTopFrameLayout();
form.InitBodyFrameLayout();
form.ShowForm();
};
//和
var btnMsg3 = new NormalViewControl(100, 90, true);
btnMsg3.Gravity = Gravity.CenterVertical;
btnMsg3.TextSize = 12;
btnMsg3.TextColor = UserCenterColor.Current.TextGrayColor1;
btnMsg3.TextID = R.MyInternationalizationString.uAnd;
//计算真实宽度
btnWidth = btnMsg3.GetRealWidthByText();
btnMsg3.Width = btnWidth;
fontWidth += btnWidth;
//《服务条款》
var btnMsg4 = new NormalViewControl(100, 90, true);
btnMsg4.Gravity = Gravity.CenterVertical;
btnMsg4.TextSize = 12;
btnMsg4.TextColor = 0xFF4A90E2;
btnMsg4.Text = "《" + Language.StringByID(R.MyInternationalizationString.uTermsOfService) + "》";
//计算真实宽度
btnWidth = btnMsg4.GetRealWidthByText();
btnMsg4.Width = btnWidth;
fontWidth += btnWidth;
btnMsg4.ButtonClickEvent += (sender, e) =>
{
btnMsg2.ButtonClickEvent(null, null);
};
//图标
var btnIcon = new IconBigViewControl(42, 42);
btnIcon.UnSelectedImagePath = "Item/Check1.png";
btnIcon.SelectedImagePath = "Item/Check1Selected.png";
//计算行控件的宽度
frameRow.Width = fontWidth + this.GetPictrueRealSize(42) + Application.GetRealWidth(23) - speceilValue * 3;
frameBack.AddChidren(frameRow);
//图标控件初始化
frameRow.AddChidren(btnIcon);
btnIcon.InitControl();
btnIcon.X = -btnIcon.XOffset;
btnIcon.UseClickStatu = false;
btnIcon.ButtonClickEvent += (sender, e) =>
{
btnIcon.IsSelected = !btnIcon.IsSelected;
isAgreePrivacyPolicy = btnIcon.IsSelected;
};
btnMsg1.X = btnIcon.btnIcon.Width + Application.GetRealWidth(23);
frameRow.AddChidren(btnMsg1);
btnMsg2.Y = btnMsg1.Y;
btnMsg2.X = btnMsg1.Right - speceilValue;
frameRow.AddChidren(btnMsg2);
btnMsg3.X = btnMsg2.Right - speceilValue;
btnMsg3.Y = btnMsg1.Y;
frameRow.AddChidren(btnMsg3);
btnMsg4.X = btnMsg3.Right - speceilValue;
btnMsg4.Y = btnMsg1.Y;
frameRow.AddChidren(btnMsg4);
}
#endregion
#region ■ 账号密码登陆_______________________
///
/// 账号密码登陆
///
/// 账号
/// 密码
/// 1:手机号 2:邮箱
private void LoginByAccountAndPsw(string i_account, string i_psw, int i_div)
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
//检测账号
if (this.CheckInputAccount(string.Empty, i_account, i_div) == false)
{
return;
}
//登陆中....
CommonPage.Loading.Start(Language.StringByID(R.MyInternationalizationString.Logining));
HdlThreadLogic.Current.RunThread(() =>
{
//登陆参数
var pra = new SendDataToServer.LoginObj();
pra.Account = i_account;
pra.Password = i_psw;
//访问接口
var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(pra);
var result = CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/Login", System.Text.Encoding.UTF8.GetBytes(requestJson));
//处理登陆成功的数据
this.AdjustLoginSuccessData(result, pra, i_account, i_psw, i_div);
});
}
///
/// 检测输入的账号
///
/// 地区码
/// 账号
/// 1:手机号 2:邮箱
///
private bool CheckInputAccount(string i_areaCode, string i_account, int i_div)
{
if (i_div == 1)
{
//检测手机
if (i_areaCode != string.Empty && AccountLogic.Instance.CheckPhoneWithZone(i_account, i_areaCode) == false)
{
btnErrorMsg.TextID = R.MyInternationalizationString.ThePhoneError;
return false;
}
//检测手机
if (i_areaCode == string.Empty && AccountLogic.Instance.CheckPhone(i_account) == false)
{
btnErrorMsg.TextID = R.MyInternationalizationString.ThePhoneError;
return false;
}
}
else
{
//检测邮箱
if (AccountLogic.Instance.CheckEmail(i_account) == false)
{
btnErrorMsg.TextID = R.MyInternationalizationString.TheEmailError;
return false;
}
}
return true;
}
#endregion
#region ■ 微信登陆___________________________
///
/// 微信登录
///
private void LoginByWechat()
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
#if Android
com.hdl.home.Application.WXLogin();
com.hdl.home.WXEntryActivity.RespAction = (authStr) =>
{
#endif
#if iOS
Home.IOS.AppDelegate.WXLogin();
Home.IOS.AppDelegate.RespAction = (authStr) =>
{
#endif
if (authStr == null)
{
return;
}
HdlThreadLogic.Current.RunThread(() =>
{
//是否已经绑定
var re = isBindAuthAsync(authStr);
if (re)
{
ProgressBar.Show(Language.StringByID(R.MyInternationalizationString.Logining));
var resultRegID = Shared.Common.CommonPage.Instance.PushRegID();
var homes = HdlResidenceLogic.Current.GetHomeListsFromDb(false);
//刷新个人中心的内存及线程
bool result = UserCenterLogic.InitUserCenterMenmoryAndThread();
//启动ZigBee
ZigBee.Common.Application.Init();
HdlThreadLogic.Current.RunMain(() =>
{
ProgressBar.Close();
this.RemoveFromParent();
CommonPage.Instance.RemoveViewByTag("Login");
if (result == true)
{
//false:开启了调试功能
UserPage.Instance.ReFreshControl();
}
});
}
else
{
var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr);
HdlThreadLogic.Current.RunMain(() =>
{
var registerPage = new AccountRegister();
CommonPage.Instance.AddChidren(registerPage);
registerPage.OpenID = authRes.openid;
registerPage.Show();
});
}
});
};
}
///
/// 是否已绑定
///
///
///
private bool 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 = 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 = 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.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid;
Config.Instance.Account = revertData.Account;
Config.Instance.MD5PWD = revertData.MD5PWD;
Config.Instance.Guid = revertData.Guid;
Config.Instance.LoginDateTime = DateTime.Now;
Config.Instance.Save();
return true;
}
else
{
return false;
}
}
#endregion
#region ■ 验证码登陆_________________________
///
/// 验证码登陆
///
/// 账号
/// 验证码
/// 1:手机号 2:邮箱
private void LoginByVerCode(string i_account, string i_verCode, int i_div)
{
//检测是否同意服务协议
if (this.CheckPrivacyPolicy() == false) { return; }
//登陆中....
CommonPage.Loading.Start(Language.StringByID(R.MyInternationalizationString.Logining));
HdlThreadLogic.Current.RunThread(() =>
{
var pra = new SendDataToServer.LoginValidCodeOBJ()
{
Account = i_account,
Code = i_verCode,
Language = CommonPage.ZigBeeLanguage,
AreaCode = int.Parse(CommonPage.PhoneZoneStr)
};
var result = CommonFormResouce.LoginByCode(pra);
//处理登陆成功的数据
this.AdjustLoginSuccessData(result, pra, i_account, string.Empty, i_div);
});
}
///
/// 发送验证码
///
/// 发送按钮
/// 账号
/// 1:手机号 2:邮箱
///
private bool SendVerCode(NormalViewControl btnSendCode, string account, int i_div)
{
//不能再点击
btnSendCode.CanClick = false;
int companyInt = 0;
if (CommonPage.PhoneZoneStr == "86" || i_div == 2)
{
companyInt = CommonPage.Company;
}
else
{
companyInt = CommonPage.CompanyForINTERNETION;
}
var reqDtoSignPhone = new SendDataToServer.LoginSendVerCodeObj()
{
Account = account,
Company = companyInt,
AreaCode = int.Parse(CommonPage.PhoneZoneStr),
Language = CommonPage.ZigBeeLanguage
};
var requestRevertObj = CommonFormResouce.LoginSendVerCode(reqDtoSignPhone);
if (requestRevertObj == null)
{
//请求服务器失败
CommonPage.Instance.FailureToServer();
return false;
}
var stateCodeStr = requestRevertObj.StateCode.ToUpper();
if (stateCodeStr == "SUCCESS")
{
//开启发送验证码的倒计时
this.StartSendVerCodeTimeOutThread(btnSendCode);
return true;
}
if (stateCodeStr == "PARAMETEROREMPTY")
{
//提供的参数错误
btnErrorMsg.TextID = R.MyInternationalizationString.PARAMETEROREMPTY;
}
else if (stateCodeStr == "ACCOUNTNOEXISTS")
{
//账号不存在
btnErrorMsg.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS;
}
else if (stateCodeStr == "SENDFAIL")
{
//验证码发送失败
btnErrorMsg.TextID = R.MyInternationalizationString.SENDFAIL;
}
else
{
//请求服务器失败
btnErrorMsg.TextID = R.MyInternationalizationString.RequestServerFailed;
//写Log
IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/LoginSendVerCode", requestRevertObj, reqDtoSignPhone);
}
HdlThreadLogic.Current.RunThread(() =>
{
//发送失败后,5秒之后才能再次发送
int i = 0;
while (i <= 5)
{
i++;
System.Threading.Thread.Sleep(1000);
}
btnSendCode.CanClick = true;
});
return false;
}
///
/// 开启发送验证码的倒计时
///
///
private void StartSendVerCodeTimeOutThread(NormalViewControl btnSendCode)
{
HdlThreadLogic.Current.RunThread(() =>
{
//后重发
string strText = Language.StringByID(R.MyInternationalizationString.SendVerificationCodeAgain);
int time = 60;
while (time > 0 && btnSendCode.Parent != null)
{
HdlThreadLogic.Current.RunMain(() =>
{
btnSendCode.Text = time + "s" + strText;
});
time--;
System.Threading.Thread.Sleep(1000);
}
//倒计时完成之后,可以再次点击
btnSendCode.CanClick = true;
HdlThreadLogic.Current.RunMain(() =>
{
//获取验证码
btnSendCode.Text = Language.StringByID(R.MyInternationalizationString.SendVerificationCode);
});
});
}
#endregion
#region ■ 处理登陆成功的数据_________________
///
/// 处理登陆成功的数据
///
/// 云端返回的数据
/// 接口请求参数
/// 账号
/// 密码,验证码登陆时,设置为 string.Empty
/// 1:手机号 2:邮箱
private void AdjustLoginSuccessData(Common.ResponseEntity.ResponsePack revertObj, object pra,
string i_account, string i_psw, int i_div)
{
if (revertObj == null)
{
HdlThreadLogic.Current.RunMain(() =>
{
//请求服务器失败
CommonPage.Instance.FailureToServer();
CommonPage.Loading.Hide();
});
HdlLogLogic.Current.WriteLog(-1, "登陆时,没网络");
return;
}
var stateCodeStr = revertObj.StateCode.ToUpper();
//Error 不能直接从服务器取,只能根据状态码逐一判断
if (stateCodeStr == "SUCCESS")
{
//存储数据
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString());
var revertData = responseDataObj;
Config.ReFresh();
//标记上一次是不是同一个账号登陆
Config.Instance.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid;
Config.Instance.Account = revertData.Account;
Config.Instance.Password = i_psw;
Config.Instance.MD5PWD = revertData.MD5PWD;
Config.Instance.Guid = revertData.Guid;
Config.Instance.LoginDateTime = DateTime.Now;
Config.Instance.LoginToken = revertData.Token;
Config.Instance.Save();
var resultRegID = CommonPage.Instance.PushRegID();
var homes = HdlResidenceLogic.Current.GetHomeListsFromDb(false);
//刷新个人中心的内存及线程
bool result = UserCenterLogic.InitUserCenterMenmoryAndThread();
//启动ZigBee
ZigBee.Common.Application.Init();
//#if iOS
// //初始化全视通
// Shared.IOS.HDLFVSDK.Video.Init("", revertData.UserID.ToString());
//#endif
HdlThreadLogic.Current.RunMain(() =>
{
CommonPage.Loading.Hide();
this.RemoveFromParent();
CommonPage.Instance.RemoveViewByTag("Login");
if (result == true)
{
//false:开启了调试功能
UserPage.Instance.ReFreshControl();
}
});
return;
}
//关闭转圈的
HdlThreadLogic.Current.RunMain(() =>
{
CommonPage.Loading.Hide();
if (stateCodeStr == "NOTVERIFY")
{
//未激活
btnErrorMsg.TextID = R.MyInternationalizationString.NOTVERIFY;
}
else if (stateCodeStr == "NOTENABLE")
{
//该用户属于调试账号,并未启用
btnErrorMsg.TextID = R.MyInternationalizationString.NOTENABLE;
}
else if (stateCodeStr == "PARAMETEROREMPTY")
{
//提供的参数错误
btnErrorMsg.TextID = R.MyInternationalizationString.PARAMETEROREMPTY;
}
else if (stateCodeStr == "VALIDCODEANDPHONENOEQUAL")
{
//验证码错误,请重新输入
btnErrorMsg.TextID = R.MyInternationalizationString.VALIDCODEANDPHONENOEQUAL;
}
else if (stateCodeStr == "USERNAMEORPWDERROR")
{
//账号或密码错误
btnErrorMsg.TextID = R.MyInternationalizationString.USERNAMEORPWDERROR;
}
else if (stateCodeStr == "ACCOUNTNOEXISTS")
{
//账号不存在
btnErrorMsg.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS;
}
else if (stateCodeStr == "NORECORD" && i_psw == string.Empty)
{
//请先获取验证码
btnErrorMsg.TextID = R.MyInternationalizationString.NORECORD;
}
else if (stateCodeStr == "BERESTRICT")
{
//此账号无权登录
btnErrorMsg.TextID = R.MyInternationalizationString.ThisAccountHasNoAuthorityToLogin;
}
else if (stateCodeStr == "YOUDATANOISLOCALREGION")
{
//不在本区域,需要重定向区域后再次请求登录
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString());
CommonPage.RequestHttpsHost = responseDataObj.RegionServer;
if (i_psw != string.Empty)
{
//再次登录
this.LoginByAccountAndPsw(i_account, i_psw, i_div);
}
}
else
{
btnErrorMsg.TextID = R.MyInternationalizationString.RequestServerFailed;
//写Log
if (pra is SendDataToServer.LoginObj)
{
((SendDataToServer.LoginObj)pra).Password = "*********";
IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/Login", revertObj, pra);
}
else
{
IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/LoginValidCode", revertObj, pra);
}
}
});
}
#endregion
#region ■ 一般方法___________________________
///
/// 检测隐私协议
///
///
private bool CheckPrivacyPolicy()
{
if (isAgreePrivacyPolicy == false)
{
//请先阅读并同意《隐私权政策》和《服务条款》
var btnMsg = new ShowMsgControl(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.uPleaseReadAndAgreePrivacyPolicyMsg));
btnMsg.Show();
return false;
}
return true;
}
#endregion
}
}