using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter.Password
{
///
/// 编辑二次验证的手势验证界面
///
public class EditorGesturePasswordForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 当前界面模式
///
private FormMode formMode = FormMode.A新建密码;
///
/// 第一次密码
///
private string firstPssword = string.Empty;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
public void ShowForm()
{
//界面右划不可
this.ScrollEnabled = false;
//设置头部信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uGestureAuthentication));
if (string.IsNullOrEmpty(HdlUserCenterResourse.AccountOption.GestureAuthentication) == false)
{
formMode = FormMode.A验证前回密码;
}
//初始化中部信息
this.InitMiddleFrame();
}
///
/// 初始化中部信息
///
private void InitMiddleFrame()
{
//清空bodyFrame
this.ClearBodyFrame();
string titleText = string.Empty;
if (formMode == FormMode.A新建密码)
{
//请输入新手势
titleText = Language.StringByID(R.MyInternationalizationString.uPleaseInputNewGesture);
}
else if (formMode == FormMode.A验证前回密码)
{
//请输入手势
titleText = Language.StringByID(R.MyInternationalizationString.uPleaseInputGesture);
}
else if (formMode == FormMode.A确认新建密码
|| formMode == FormMode.A确认修改密码)
{
//请再次输入手势
titleText = Language.StringByID(R.MyInternationalizationString.uPleaseConfirmPswAgain);
}
else if (formMode == FormMode.A修改密码)
{
//更改手势,请输入手势
titleText = Language.StringByID(R.MyInternationalizationString.uEditorGesturePleaseInputNewGesture);
}
//手势控件
var pswControl = new PswGestureInputControl(titleText);
pswControl.Y = Application.GetRealHeight(173);
pswControl.Gravity = Gravity.CenterHorizontal;
bodyFrameLayout.AddChidren(pswControl);
pswControl.InitControl();
pswControl.FinishInputEvent += (password, pswleng) =>
{
//校验密码
this.DoAdjustPssword(password, pswleng, pswControl);
};
if (formMode == FormMode.A验证前回密码)
{
//忘记手势?
var btnForgotPsw = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(49), false);
btnForgotPsw.Y = Application.GetRealHeight(1492);
btnForgotPsw.TextSize = 12;
btnForgotPsw.TextColor = UserCenterColor.Current.TextOrangeColor;
btnForgotPsw.TextID = R.MyInternationalizationString.ForgotPasswordMsg;
btnForgotPsw.TextAlignment = TextAlignment.Center;
bodyFrameLayout.AddChidren(btnForgotPsw);
btnForgotPsw.ButtonClickEvent += (sender, e) =>
{
var form = new ForgotSecondaryPasswordForm();
form.AddForm();
};
//底线
int lineWidth = btnForgotPsw.GetRealWidthByText();
var btnLine = new NormalViewControl(lineWidth, HdlControlResourse.BottomLineHeight, false);
btnLine.BackgroundColor = UserCenterColor.Current.TextOrangeColor;
btnLine.Gravity = Gravity.CenterHorizontal;
btnLine.Y = btnForgotPsw.Bottom - Application.GetRealHeight(8);
bodyFrameLayout.AddChidren(btnLine);
}
}
#endregion
#region ■ 校验密码___________________________
///
/// 校验密码
///
///
///
///
private void DoAdjustPssword(string i_Psw, int pswLength, PswGestureInputControl pswControl)
{
if (formMode == FormMode.A新建密码)
{
if (pswLength <= 4)
{
//手势密码长度必须大于4
string msg = Language.StringByID(R.MyInternationalizationString.uGesturePswLenthError).Replace("{0}", "4");
pswControl.SetErrorMsg(msg);
return;
}
//输入二次密码
this.firstPssword = i_Psw;
formMode = FormMode.A确认新建密码;
this.InitMiddleFrame();
}
else if (formMode == FormMode.A确认新建密码)
{
if (this.firstPssword != i_Psw)
{
//确认手势错误,请重新设置
pswControl.SetErrorMsg(Language.StringByID(R.MyInternationalizationString.uGestureNotEqual));
return;
}
//保存密码
this.SaveSecondaryPassword(pswControl, i_Psw);
}
else if (formMode == FormMode.A验证前回密码)
{
if (HdlUserCenterResourse.AccountOption.GestureAuthentication != i_Psw)
{
HdlUserCenterResourse.AccountOption.PasswordGestureInputCount--;
if (HdlUserCenterResourse.AccountOption.PasswordGestureInputCount <= 0)
{
//管理员身份验证失败,请重新登录
string msg2 = Language.StringByID(R.MyInternationalizationString.uCheckAdministratorFailAndReload);
this.ShowMassage(ShowMsgType.Tip, msg2);
HdlAccountLogic.Current.ReLoginAgain(Common.Config.Instance.Account);
return;
}
//手势错误,请重新输入
pswControl.SetErrorMsg(Language.StringByID(R.MyInternationalizationString.uOldGestureIsError));
return;
}
//重置剩余密码次数
HdlUserCenterResourse.AccountOption.ResetPasswordCount();
formMode = FormMode.A修改密码;
this.InitMiddleFrame();
}
else if (formMode == FormMode.A修改密码)
{
if (i_Psw == HdlUserCenterResourse.AccountOption.GestureAuthentication)
{
//新密码和原密码一致,请重新输入
pswControl.SetErrorMsg(Language.StringByID(R.MyInternationalizationString.uNewPswAndOldPswIsEqual));
return;
}
if (pswLength <= 4)
{
//手势密码长度必须大于4
string msg = Language.StringByID(R.MyInternationalizationString.uGesturePswLenthError).Replace("{0}", "4");
pswControl.SetErrorMsg(msg);
return;
}
//输入二次密码
this.firstPssword = i_Psw;
formMode = FormMode.A确认修改密码;
this.InitMiddleFrame();
}
else if (formMode == FormMode.A确认修改密码)
{
if (this.firstPssword != i_Psw)
{
//确认手势错误,请重新设置
pswControl.SetErrorMsg(Language.StringByID(R.MyInternationalizationString.uGestureNotEqual));
return;
}
//保存密码
this.SaveSecondaryPassword(pswControl, i_Psw);
}
}
#endregion
#region ■ 外部指定模式_______________________
///
/// 强制指定新密码模式(由外部调用)
///
public void SetNewPasswordFormMode()
{
formMode = FormMode.A新建密码;
this.InitMiddleFrame();
}
#endregion
#region ■ 保存密码___________________________
///
/// 保存密码
///
/// 控件
/// 密码
private void SaveSecondaryPassword(PswGestureInputControl contr, string psw)
{
HdlThreadLogic.Current.RunThread(() =>
{
//打开进度条
this.ShowProgressBar();
var result = HdlAccountLogic.Current.EditorNumberAndGesturePassword(null, psw);
//关闭进度条
this.CloseProgressBar();
HdlThreadLogic.Current.RunMain(() =>
{
if (result == false)
{
//修改密码失败
contr.SetErrorMsg(Language.StringByID(R.MyInternationalizationString.uEditorPasswordFail));
}
else
{
HdlUserCenterResourse.AccountOption.GestureAuthentication = psw;
HdlUserCenterResourse.AccountOption.Save();
//界面关闭
this.CloseForm();
}
});
});
}
#endregion
#region ■ 结构体_____________________________
///
/// 界面模式
///
private enum FormMode
{
A新建密码 = 1,
A确认新建密码 = 2,
A验证前回密码 = 3,
A修改密码 = 4,
A确认修改密码 = 5
}
#endregion
}
}