xm
2020-07-21 9a4b76398009cf76c508d61f7e48fb6f5cb7ac2d
ZigbeeApp/Shared/Phone/UserCenter/Safety/CoercePswEditorForm.cs
New file
@@ -0,0 +1,400 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter.Safety
{
    /// <summary>
    /// 编辑胁迫密码的界面
    /// </summary>
    public class CoercePswEditorForm : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 用户账号
        /// </summary>
        private int pswNo = 5;
        /// <summary>
        /// 密码
        /// </summary>
        private string password = string.Empty;
        /// <summary>
        /// 密码提示
        /// </summary>
        private string passwordTip = string.Empty;
        /// <summary>
        /// 联系人的列表控件
        /// </summary>
        private FrameListControl listPhoneView = null;
        /// <summary>
        /// 信息控件
        /// </summary>
        private InformationEditorControl tableContr = null;
        /// <summary>
        /// 密码控件
        /// </summary>
        private NormalViewControl btnPassword = null;
        /// <summary>
        /// 当前的联系人列表
        /// </summary>
        private List<ZigBee.Device.Safeguard.PushTargetInfo> listPhoneData = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        /// <param name="i_password">用户密码</param>
        /// <param name="i_passwordTip">用户密码提示</param>
        public void ShowForm(string i_password, string i_passwordTip)
        {
            this.password = i_password;
            this.passwordTip = i_passwordTip;
            this.ScrollEnabled = false;
            //设置头部信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uCoercePassword));
            //初始化中部信息
            this.InitMiddleFrame(i_password);
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        /// <param name="i_password">用户密码</param>
        private void InitMiddleFrame(string i_password)
        {
            //清空bodyFrame
            this.ClearBodyFrame();
            var listBackControl = new VerticalFrameControl();
            listBackControl.Height = bodyFrameLayout.Height;
            bodyFrameLayout.AddChidren(listBackControl);
            var frameback = new FrameLayout();
            frameback.Y = Application.GetRealHeight(179);
            frameback.Height = Application.GetRealHeight(395);
            frameback.Width = Application.GetRealWidth(717);
            frameback.Gravity = Gravity.CenterHorizontal;
            frameback.BackgroundImagePath = "Safeguard/SafeguardPasswordGround.png";
            listBackControl.frameTable.AddChidren(frameback);
            //当前使用密码
            var btnNowTip = new NormalViewControl(frameback.Width, Application.GetRealHeight(50), false);
            btnNowTip.Y = Application.GetRealHeight(81);
            btnNowTip.TextSize = 12;
            btnNowTip.TextAlignment = TextAlignment.Center;
            btnNowTip.TextColor = UserCenterColor.Current.TextGrayColor3;
            btnNowTip.TextID = R.MyInternationalizationString.uNowUsePassword;
            frameback.AddChidren(btnNowTip);
            this.btnPassword = new NormalViewControl(frameback.Width, Application.GetRealHeight(90), false);
            btnPassword.TextAlignment = TextAlignment.Center;
            btnPassword.Y = Application.GetRealHeight(150);
            btnPassword.TextSize = 24;
            btnPassword.TextColor = 0xfffc744b;
            btnPassword.Text = i_password;
            btnPassword.IsBold = true;
            frameback.AddChidren(btnPassword);
            //初始化列表控件
            this.InitListViewControl(listBackControl);
        }
        /// <summary>
        /// 初始化列表控件
        /// </summary>
        private void InitListViewControl(VerticalFrameControl listBackControl)
        {
            //初始化桌布
            this.tableContr = new InformationEditorControl();
            var listView = tableContr.InitControl(listBackControl.frameTable, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 1025);
            //备注信息
            string caption = Language.StringByID(R.MyInternationalizationString.uNoteInformation);
            var rowNote = new FrameCaptionInputControl(caption, passwordTip, listView.rowSpace / 2);
            rowNote.txtInput.PlaceholderText = Language.StringByID(R.MyInternationalizationString.uPlesaeInputNoteInformation);
            rowNote.txtInput.MaxByte = 90;
            listView.AddChidren(rowNote);
            rowNote.InitControl();
            rowNote.AddBottomLine();
            rowNote.txtInput.FinishInputEvent += async () =>
            {
                if (rowNote.Text == string.Empty)
                {
                    rowNote.Text = passwordTip;
                    return;
                }
                if (passwordTip != rowNote.Text)
                {
                    //修改密码备注
                    await this.EditorPassworTip(password, rowNote.Text, true);
                }
            };
            //修改密码
            var rowPsw = new FrameRowControl(listView.rowSpace / 2);
            listView.AddChidren(rowPsw);
            rowPsw.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uChangedPassword), 300);
            rowPsw.AddRightArrow();
            rowPsw.AddBottomLine();
            rowPsw.ButtonClickEvent += (sender, e) =>
            {
                var form = new CoercePswAddNewForm();
                form.AddForm(rowNote.Text);
                form.PasswordChangedEvent += (newPassword) =>
                {
                    this.btnPassword.Text = newPassword;
                    this.password = newPassword;
                };
            };
            //初始化联系人控件
            this.InitPhoneControl(listView);
            //重写底层的返回按键事件
            this.BackButtonClickEvent = async (sender) =>
             {
                 sender.CanClick = false;
                 if (rowNote.Text == string.Empty || passwordTip == rowNote.Text)
                 {
                     this.CloseForm();
                 }
                 else
                 {
                     //修改密码备注
                     var result = await this.EditorPassworTip(password, rowNote.Text, false);
                     sender.CanClick = true;
                     if (result == true)
                     {
                         this.CloseForm();
                     }
                 }
             };
        }
        #endregion
        #region ■ 初始化联系人控件___________________
        /// <summary>
        /// 初始化联系人控件
        /// </summary>
        private void InitPhoneControl(FrameListControl listTableView)
        {
            //联系人的列表控件
            if (listPhoneView == null)
            {
                this.listPhoneView = new FrameListControl();
                listPhoneView.rowSpace = listTableView.rowSpace;
                listPhoneView.Height = Application.GetRealHeight(200);
                listTableView.AddChidren(listPhoneView);
                listPhoneView.Y -= listTableView.rowSpace;
            }
            else
            {
                this.listPhoneView.RemoveAll();
            }
            HdlThreadLogic.Current.RunThread(async () =>
            {
                //开启进度条
                this.ShowProgressBar();
                //获取联系方式
                var result = await HdlSafeguardLogic.Current.GetCoercePhoneNumber();
                if (result == null)
                {
                    //关闭进度条
                    this.CloseProgressBar(ShowReLoadMode.YES);
                    return;
                }
                //关闭进度条
                this.CloseProgressBar();
                HdlThreadLogic.Current.RunMain(() =>
                {
                    this.listPhoneData = new List<ZigBee.Device.Safeguard.PushTargetInfo>();
                    //联系人
                    var rowContact = new FrameRowControl(this.listPhoneView.rowSpace / 2);
                    rowContact.UseClickStatu = false;
                    listPhoneView.AddChidren(rowContact);
                    rowContact.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uContactPersion), 300);
                    var btnAdd = rowContact.AddMostRightEmptyIcon(81, 81);
                    btnAdd.UnSelectedImagePath = "Item/Add.png";
                    rowContact.ButtonClickEvent += (sender, e) =>
                    {
                        var form = new CoercePswAddContactForm();
                        form.AddForm(listPhoneData);
                        form.AddPhoneEvent += () =>
                        {
                            //重新刷新
                            this.InitPhoneControl(listTableView);
                        };
                    };
                    if (result.Actions.Count > 0)
                    {
                        listPhoneData = result.Actions[0].PushTarget;
                        foreach (var data in listPhoneData)
                        {
                            //添加联系人行
                            this.AddPhoneNumRowLayout(data);
                        }
                    }
                    else
                    {
                        //没有联系人的话,添加个底线
                        rowContact.AddBottomLine();
                    }
                    //调整桌布大小
                    this.AdjustPhoneContrlTable();
                });
            });
        }
        /// <summary>
        /// 调整桌布大小
        /// </summary>
        private void AdjustPhoneContrlTable()
        {
            //调整桌布
            listPhoneView.AdjustRealHeight();
            tableContr.FinishInitControl(false, true);
        }
        #endregion
        #region ■ 添加联系人行_______________________
        /// <summary>
        /// 添加联系人行
        /// </summary>
        /// <param name="data"></param>
        private void AddPhoneNumRowLayout(ZigBee.Device.Safeguard.PushTargetInfo data)
        {
            var strArry = data.PushNumber.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
            if (strArry.Length != 2)
            {
                return;
            }
            string areaCode2 = strArry[0];
            string phoneNum = strArry[1];
            string strPhone = "+" + areaCode2 + " " + phoneNum;
            if (phoneNum.Length >= 11)
            {
                phoneNum = phoneNum.Substring(0, 3) + "".PadLeft(phoneNum.Length - 7, '*') + phoneNum.Substring(phoneNum.Length - 4, 4);
                strPhone = "+" + areaCode2 + " " + phoneNum;
            }
            else if (phoneNum.Length >= 5)
            {
                //或许这是国外的手机吧
                phoneNum = phoneNum.Substring(0, 3) + "".PadLeft(phoneNum.Length - 5, '*') + phoneNum.Substring(phoneNum.Length - 2, 2);
                strPhone = "+" + areaCode2 + " " + phoneNum;
            }
            var rowContact = new RowLayoutControl();
            rowContact.MainKeys = strPhone;
            this.listPhoneView.AddChidren(rowContact);
            rowContact.frameTable.UseClickStatu = false;
            //联系方式
            rowContact.frameTable.AddLeftCaption(strPhone + " (" + data.PushNumberNote + ")", 800);
            rowContact.frameTable.AddBottomLine();
            //删除
            var btnDetete = rowContact.AddDeleteControl();
            btnDetete.ButtonClickEvent += (sender, e) =>
            {
                string[] Arry = data.PushNumber.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                string PNumber = string.Empty;
                string areaCode = string.Empty;
                if (Arry.Length == 1)
                {
                    PNumber = Arry[0];
                }
                else
                {
                    areaCode = Arry[0];
                    PNumber = Arry[1];
                }
                string msg = Language.StringByID(R.MyInternationalizationString.uShowDoDeleteMsg);
                this.ShowMassage(ShowMsgType.Confirm, msg, () =>
                {
                    //删除联系人方式
                    this.DeleteCoercePhoneNumber(areaCode, PNumber, rowContact);
                });
            };
        }
        /// <summary>
        /// 删除联系人方式
        /// </summary>
        /// <param name="areaCode"></param>
        /// <param name="phone"></param>
        /// <param name="rowContact"></param>
        public async void DeleteCoercePhoneNumber(string areaCode, string phone, RowLayoutControl rowContact)
        {
            bool result = await HdlSafeguardLogic.Current.DeleteCoercePhoneNumber(areaCode, phone);
            if (result == true)
            {
                bool canMove = false;
                for (int i = 0; i < this.listPhoneView.ChildrenCount; i++)
                {
                    var myRow = this.listPhoneView.GetChildren(i) as RowLayoutControl;
                    if (myRow != null && myRow.MainKeys == rowContact.MainKeys)
                    {
                        //循环到了当前控件
                        canMove = true;
                        continue;
                    }
                    if (canMove == true)
                    {
                        //它之后的控件全部往上移动
                        myRow.Y -= rowContact.Height;
                    }
                }
                rowContact.RemoveFromParent();
                //移除缓存
                string checkKeys = areaCode + "-" + phone;
                for (int i = 0; i < this.listPhoneData.Count; i++)
                {
                    if (listPhoneData[i].PushNumber == checkKeys)
                    {
                        listPhoneData.RemoveAt(i);
                    }
                }
                //调整桌布大小
                this.AdjustPhoneContrlTable();
            }
        }
        #endregion
        #region ■ 修改备注___________________________
        /// <summary>
        /// 修改密码备注
        /// </summary>
        /// <param name="i_password">用户密码</param>
        /// <param name="i_passwordTip">用户密码提示</param>
        private async System.Threading.Tasks.Task<bool> EditorPassworTip(string i_password, string i_passwordTip, bool ShowMsg)
        {
            var result = await HdlSafeguardLogic.Current.AddPassWordTips(this.pswNo, i_password, i_passwordTip);
            if (result == true)
            {
                if (ShowMsg == true)
                {
                    //修改备注信息成功!
                    string msg = Language.StringByID(R.MyInternationalizationString.uEditorNoteInformationSuccess);
                    this.ShowMassage(ShowMsgType.Tip, msg);
                }
                this.passwordTip = i_passwordTip;
            }
            return result;
        }
        #endregion
    }
}