wxr
2024-05-20 efcffde735fa65ae34bae0bcc86313b74ed0e36c
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/AddMemberScanPage.cs
@@ -16,6 +16,11 @@
        Button btnAddMember;
        Button btnScan;
        EditText etMemberAccount;
        EditText etMemberName;
        /// <summary>
        /// 人脸照片数据
        /// </summary>
        string base64string;
        Action backAction;
@@ -29,84 +34,87 @@
        public void LoadPage()
        {
            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(StringId.AddMember)).LoadTopView();
            var topView = new TopViewDiv(bodyView, Language.StringByID(StringId.AddMember));
            topView.maginY = 10;
            topView.LoadTopView();
            var btnMemberName = new Button()
            {
                Y = Application.GetRealHeight(70+10),
                X = Application.GetRealWidth(16),
                Height = Application.GetRealHeight(32),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = StringId.MemberName,
            };
            bodyView.AddChidren(btnMemberName);
            etMemberName = new EditText()
            {
                Y = btnMemberName.Bottom,
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(356),
                Height = Application.GetRealHeight(40),
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.CenterLeft,
                PlaceholderText = Language.StringByID(StringId.PleaseEnterContent),
                PlaceholderTextColor = CSS_Color.PromptingColor2
            };
            bodyView.AddChidren(etMemberName);
            var btnLine = new Button()
            {
                Y = etMemberName.Bottom,
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(1),
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            bodyView.AddChidren(btnLine);
            var btnTitle = new Button()
            {
                Y = btnLine.Bottom + Application.GetRealHeight(20),
                X = Application.GetRealWidth(16),
                Height = Application.GetRealHeight(32),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = StringId.MemberAccount,
            };
            bodyView.AddChidren(btnTitle);
            etMemberAccount = new EditText()
            {
                Y = btnTitle.Bottom,
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(356),
                Height = Application.GetRealHeight(40),
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.CenterLeft,
                PlaceholderText = Language.StringByID(StringId.PleaseEnterContent),
                PlaceholderTextColor = CSS_Color.PromptingColor2
            };
            bodyView.AddChidren(etMemberAccount);
            var btnLine1 = new Button()
            {
                Y = etMemberAccount.Bottom,
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(1),
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            bodyView.AddChidren(btnLine1);
            int btnAddmemberY = 30;
            if (Entity.DB_ResidenceData.Instance.SupportFacePass)
            {
                var btnMemberName = new Button()
                {
                    Y = Application.GetRealHeight(70),
                    X = Application.GetRealWidth(16),
                    Height = Application.GetRealHeight(32),
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextID = StringId.MemberName,
                };
                bodyView.AddChidren(btnMemberName);
                var etMemberName = new EditText()
                {
                    Y = btnMemberName.Bottom,
                    X = Application.GetRealWidth(16),
                    Width = Application.GetRealWidth(356),
                    Height = Application.GetRealHeight(40),
                    TextColor = CSS_Color.TextualColor,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextAlignment = TextAlignment.CenterLeft,
                    PlaceholderText = Language.StringByID(StringId.PleaseEnterContent),
                    PlaceholderTextColor = CSS_Color.PromptingColor2
                };
                bodyView.AddChidren(etMemberName);
                var btnLine = new Button()
                {
                    Y = etMemberName.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(343),
                    Height = Application.GetRealHeight(1),
                    BackgroundColor = CSS_Color.DividingLineColor,
                };
                bodyView.AddChidren(btnLine);
                var btnTitle = new Button()
                {
                    Y = btnLine.Bottom + Application.GetRealHeight(20),
                    X = Application.GetRealWidth(16),
                    Height = Application.GetRealHeight(32),
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextID = StringId.MemberAccount,
                };
                bodyView.AddChidren(btnTitle);
                etMemberAccount = new EditText()
                {
                    Y = btnTitle.Bottom,
                    X = Application.GetRealWidth(16),
                    Width = Application.GetRealWidth(356),
                    Height = Application.GetRealHeight(40),
                    TextColor = CSS_Color.TextualColor,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextAlignment = TextAlignment.CenterLeft,
                    PlaceholderText = Language.StringByID(StringId.PleaseEnterContent),
                    PlaceholderTextColor = CSS_Color.PromptingColor2
                };
                bodyView.AddChidren(etMemberAccount);
                var btnLine1 = new Button()
                {
                    Y = etMemberAccount.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(343),
                    Height = Application.GetRealHeight(1),
                    BackgroundColor = CSS_Color.DividingLineColor,
                };
                bodyView.AddChidren(btnLine1);
                btnAddmemberY = 203;
                #region 人脸管理
                var btnMemberFaceTitle = new Button()
                {
@@ -119,8 +127,6 @@
                    TextID = StringId.MemberFace,
                };
                bodyView.AddChidren(btnMemberFaceTitle);
                var btnAddFace = new Button()
                {
@@ -141,11 +147,12 @@
                EventHandler<MouseEventArgs> eFaceHandler = (sender, e) =>
                {
                    Application.HideSoftInput();
                    if (OnAppConfig.Instance.FaceManagementTip)
                    {
                        OnAppConfig.Instance.FaceManagementTip = true;
                        OnAppConfig.Instance.SaveConfig();
                        LoadPictureOptionView();
                        LoadPictureOptionView(btnAddFace);
                        return;
                    }
@@ -166,7 +173,7 @@
                    };
                    dialog.AddChidren(contentView);
                    Button btnTitle = new Button()
                    Button btnTitle2 = new Button()
                    {
                        Y = Application.GetRealHeight(16),
                        Height = Application.GetRealHeight(30),
@@ -176,18 +183,18 @@
                        IsBold = true,
                        TextID = StringId.FaceProtocolPrompt,
                    };
                    contentView.AddChidren(btnTitle);
                    contentView.AddChidren(btnTitle2);
                    Button btnMsg = new Button()
                    {
                        Gravity = Gravity.CenterHorizontal,
                        Height = Application.GetRealHeight(35),
                        Y = btnTitle.Bottom,
                        Y = btnTitle2.Bottom,
                        Width = Application.GetRealHeight(200),
                        TextAlignment = TextAlignment.CenterLeft,
                        TextColor = CSS_Color.TextualColor,
                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                        Text = "    为保护您的个人隐私权益,特向您通知并申请明确同意授权。请你仔细阅读",
                        TextID = StringId.FaceProTipText1,
                        IsMoreLines = true,
                    };
                    contentView.AddChidren(btnMsg);
@@ -201,9 +208,10 @@
                        TextAlignment = TextAlignment.CenterLeft,
                        TextColor = CSS_Color.MainColor,
                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                        Text = "    《On Pro人脸信息采集协议》",
                        TextID = StringId.FaceProTipText2,
                        IsMoreLines = true,
                    };
                    contentView.AddChidren(btnMsg1);
                    Button btnMsg2 = new Button()
@@ -215,23 +223,23 @@
                        TextAlignment = TextAlignment.CenterLeft,
                        TextColor = CSS_Color.TextualColor,
                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                        Text = "    若同意该协议,请点击【同意】按键,表示您已经理解并同意人脸信息采集协议。",
                        TextID = StringId.FaceProTipText3,
                        IsMoreLines = true,
                    };
                    contentView.AddChidren(btnMsg2);
                    Button btnLine = new Button()
                    Button btnLine2 = new Button()
                    {
                        Y = Application.GetRealHeight(149),
                        Height = Application.GetRealHeight(1),
                        Width = Application.GetRealWidth(270 / 2),
                        BackgroundColor = CSS.CSS_Color.DividingLineColor,
                    };
                    contentView.AddChidren(btnLine);
                    contentView.AddChidren(btnLine2);
                    Button btnCancel = new Button()
                    {
                        Y = btnLine.Bottom,
                        Y = btnLine2.Bottom,
                        Width = Application.GetRealWidth(135),
                        Height = Application.GetRealHeight(43),
                        TextAlignment = TextAlignment.Center,
@@ -246,7 +254,7 @@
                    Button btnConfirm = new Button()
                    {
                        X = btnCancel.Right,
                        Y = btnLine.Y,
                        Y = btnLine2.Y,
                        Width = Application.GetRealWidth(135),
                        Height = Application.GetRealHeight(45),
                        TextAlignment = TextAlignment.Center,
@@ -262,130 +270,64 @@
                    btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
                    dialog.Show();
                    btnCancel.MouseUpEventHandler += (sender, e) =>
                    btnCancel.MouseUpEventHandler += (sender2, e2) =>
                    {
                        dialog.Close();
                    };
                    btnMsg1.MouseUpEventHandler += (sender, e) =>
                    btnMsg1.MouseUpEventHandler += (sender2, e2) =>
                    {
                        string url = "https://developer.hdlcontrol.com/人脸信息采集协议.html";
                        if (Language.CurrentLanguage != "Chinese")
                        {
                            url = "https://developer.hdlcontrol.com/Face information collection protocol.html";
                        }
                        new WebViewDialog().LoadPage("人脸信息采集协议", url);
                        new WebViewDialog().LoadPage(Language.StringByID(StringId.GetFaceProtocol), url);
                        dialog.Close();
                    };
                    btnConfirm.MouseUpEventHandler = (sender, e) => {
                    btnConfirm.MouseUpEventHandler = (sender2, e2) =>
                    {
                        dialog.Close();
                        OnAppConfig.Instance.FaceManagementTip = true;
                        OnAppConfig.Instance.SaveConfig();
                        LoadPictureOptionView();
                        LoadPictureOptionView(btnAddFace);
                    };
                };
                btnAddFace.MouseUpEventHandler = eFaceHandler;
                #endregion
                btnAddMember = new Button()
                {
                    Gravity = Gravity.CenterHorizontal,
                    Y = btnAddFace.Bottom + Application.GetRealHeight(30),
                    Width = Application.GetRealWidth(220),
                    Height = Application.GetRealWidth(44),
                    Radius = (uint)Application.GetRealWidth(22),
                    BorderWidth = 0,
                    BorderColor = 0x00000000,
                    BackgroundColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    IsBold = true,
                    TextAlignment = TextAlignment.Center,
                    TextID = StringId.ConfirmInvitation,
                };
                bodyView.AddChidren(btnAddMember);
                btnScan = new Button()
                {
                    Y = btnTitle.Bottom,
                    Width = Application.GetRealWidth(40),
                    Height = Application.GetRealWidth(40),
                    X = Application.GetRealWidth(310),
                    UnSelectedImagePath = "Public/Scan.png"
                };
                bodyView.AddChidren(btnScan);
            }
            else
            btnAddMember = new Button()
            {
                var btnTitle = new Button()
                {
                    Y = Application.GetRealHeight(70),
                    X = Application.GetRealWidth(16),
                    Height = Application.GetRealHeight(32),
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextID = StringId.NewMemberAccount,
                };
                bodyView.AddChidren(btnTitle);
                Gravity = Gravity.CenterHorizontal,
                Y = btnLine1.Bottom + Application.GetRealHeight(btnAddmemberY),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                BorderWidth = 0,
                BorderColor = 0x00000000,
                BackgroundColor = CSS_Color.MainColor,
                TextColor = CSS_Color.MainBackgroundColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                IsBold = true,
                TextAlignment = TextAlignment.Center,
                TextID = StringId.Confirm,
            };
            bodyView.AddChidren(btnAddMember);
                etMemberAccount = new EditText()
                {
                    Y = btnTitle.Bottom,
                    X = Application.GetRealWidth(16),
                    Width = Application.GetRealWidth(356),
                    Height = Application.GetRealHeight(40),
                    TextColor = CSS_Color.TextualColor,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextAlignment = TextAlignment.CenterLeft,
                    PlaceholderText = Language.StringByID(StringId.PleaseEnterContent),
                    PlaceholderTextColor = CSS_Color.PromptingColor2
                };
                bodyView.AddChidren(etMemberAccount);
                var btnLine = new Button()
                {
                    Y = etMemberAccount.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(343),
                    Height = Application.GetRealHeight(1),
                    BackgroundColor = CSS_Color.DividingLineColor,
                };
                bodyView.AddChidren(btnLine);
            btnScan = new Button()
            {
                Y = btnTitle.Bottom,
                Width = Application.GetRealWidth(40),
                Height = Application.GetRealWidth(40),
                X = Application.GetRealWidth(310),
                UnSelectedImagePath = "Public/Scan.png"
            };
            bodyView.AddChidren(btnScan);
                btnAddMember = new Button()
                {
                    Gravity = Gravity.CenterHorizontal,
                    Y = Application.GetRealHeight(244),
                    Width = Application.GetRealWidth(220),
                    Height = Application.GetRealWidth(44),
                    Radius = (uint)Application.GetRealWidth(22),
                    BorderWidth = 0,
                    BorderColor = 0x00000000,
                    BackgroundColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    IsBold = true,
                    TextAlignment = TextAlignment.Center,
                    TextID = StringId.ConfirmInvitation,
                };
                bodyView.AddChidren(btnAddMember);
                btnScan = new Button()
                {
                    Y = btnAddMember.Bottom,
                    Height = Application.GetRealHeight(44),
                    TextAlignment = TextAlignment.Center,
                    TextColor = CSS_Color.MainColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextID = StringId.ScanQRCoden,
                };
                bodyView.AddChidren(btnScan);
            }
            LoadEventList();
        }
@@ -435,7 +377,7 @@
        /// <summary>
        /// 加载图标选择选项
        /// </summary>
        void LoadPictureOptionView()
        void LoadPictureOptionView(Button btnAddFace)
        {
            var pView = new FrameLayout()
            {
@@ -527,8 +469,14 @@
                var imageName = Guid.NewGuid().ToString();
                CropImage.TakePicture((imagePath) =>
                {
                    CropImageCallBack(imagePath, 1, imageName);
                }, imageName, 4, 6, imageHeight);
                    if (imagePath != null)
                    {
                        var imageBytes = getFaceImageBytes(imagePath);
                        btnAddFace.ImageBytes = imageBytes;
                        base64string = Convert.ToBase64String(imageBytes);
                    }
                }, imageName, 6, 6, imageHeight);
                pictureOptionView.Parent.RemoveFromParent();
            };
@@ -545,120 +493,29 @@
                //var imageName = scene.sid;
                CropImage.SelectPicture((imagePath) =>
                {
                    CropImageCallBack(imagePath, 2, imageName);
                }, imageName, 4, 6, imageHeight);
                    if (imagePath != null)
                    {
                        var imageBytes = getFaceImageBytes(imagePath);
                        btnAddFace.ImageBytes = imageBytes;
                        base64string = Convert.ToBase64String(imageBytes);
                    }
                }, imageName, 6, 6, imageHeight);
                pictureOptionView.Parent.RemoveFromParent();
            };
        }
        /// <summary>
        /// 裁剪完照片回调,统一处理
        /// 获取本地选取的人脸数据
        /// </summary>
        /// <param name="imagePath">裁剪后的真实路径</param>
        /// <param name="imageSource">照片来源;1:拍照;2:图库</param>
        void CropImageCallBack(string selectImagePath, int imageSource, string imageName)
        /// <param name="selectImagePath"></param>
        /// <returns></returns>
        byte[] getFaceImageBytes(string selectImagePath)
        {
            if (string.IsNullOrEmpty(selectImagePath) == true)
            {
                return;
            }
            //上传成功到回调
            Action<bool> uploadSuccessAction = (isSuccess) =>
            {
                //点击重新录入事件
                Action action = () =>
                {
                    if (!isSuccess)
                    {
                        if (imageSource == 1)
                        {
                            CropImage.TakePicture((imagePath) =>
                            {
                                CropImageCallBack(imagePath, 2, imageName);
                            }, imageName, 4, 6, imageHeight);
                        }
                        else
                        {
                            CropImage.SelectPicture((imagePath) =>
                            {
                                CropImageCallBack(imagePath, 1, imageName);
                            }, imageName, 4, 6, imageHeight);
                        }
                    }
                };
                if (isSuccess)
                {
                    //ReadFaceInfo(false);
                }
                Application.RunOnMainThread(() =>
                {
                    var page = new FaceSettingResultPage(action);
                    MainPage.BasePageView.AddChidren(page);
                    page.LoadPage(isSuccess);
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                });
            };
            //上传图片到云端
            UploadImage(selectImagePath, uploadSuccessAction);
        }
        /// <summary>
        /// 上传图片方法
        /// </summary>
        /// <param name="selectImagePath">裁剪后的图片路径</param>
        /// <param name="imageView"></param>
        /// <param name="uploadResultAction"></param>
        void UploadImage(string selectImagePath, Action<bool> uploadResultAction)
        {
            try
            {
                //1.读取裁剪后的图片,然后删除
                var imageBytes = Shared.IO.FileUtils.ReadFile(selectImagePath);
                System.IO.File.Delete(selectImagePath);
                var waitPage = new Loading();
                bodyView.AddChidren(waitPage);
                waitPage.Start(Language.StringByID(StringId.PleaseWait));
                //开始上传
                new Thread(() =>
                {
                    try
                    {
                        string base64string = Convert.ToBase64String(imageBytes);
                        //Utlis.WriteLine("上传图片Length:" + imageBytes.Length + " base64:" + base64string);
                        var pack = new HttpServerRequest().FaceSetting(base64string);
                        if (pack != null)
                        {
                            Utlis.WriteLine("上传结果:" + pack.message);
                            uploadResultAction?.Invoke(pack.Code == StateCode.SUCCESS);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    finally
                    {
                        Application.RunOnMainThread(() =>
                        {
                            if (waitPage != null)
                            {
                                waitPage.RemoveFromParent();
                                waitPage = null;
                            }
                        });
                    }
                })
                { IsBackground = true }.Start();
            }
            catch (Exception ex)
            {
                MainPage.Log(ex.Message);
            }
            var imageBytes = Shared.IO.FileUtils.ReadFile(selectImagePath);
            System.IO.File.Delete(selectImagePath);
            return imageBytes;
        }
    }