mac
2024-07-25 f9181a9c8125136f597add7c30cb2ff508d54ba7
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberManagementPage.cs
@@ -29,6 +29,9 @@
        public void LoadPage()
        {
#if DEBUG
            //Entity.DB_ResidenceData.Instance.SupportFacePass = true;
#endif
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            //创建读取成员账号线程
            var thread = LoadThread_GetResidenceMemberAccount();
@@ -50,7 +53,9 @@
                mmp.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            new TopViewDiv(bodyView, Language.StringByID(StringId.MemberManagement)).LoadTopView_MemberTopView(refreshAction, backAction);
            var topView = new TopViewDiv(bodyView, Language.StringByID(StringId.MemberManagement));
            topView.maginY = 10;
            topView.LoadTopView_MemberTopView(refreshAction, backAction);
            contentView = new VerticalScrolViewLayout()
            {
@@ -79,7 +84,6 @@
                {
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(343),
                    //Height = Application.GetRealWidth(230),
                    Height = Application.GetRealWidth(180),
                    BackgroundColor = CSS_Color.MainBackgroundColor,
                    Radius = (uint)Application.GetRealWidth(12),
@@ -151,7 +155,11 @@
                    Text = HDLCommon.Current.GetUserName(memberInfo.memberName)
                };
                view1.AddChidren(btnMemberName);
                if (memberInfo.isVirtualAccount)
                {
                    btnMemberName.Text = memberInfo.nickName;
                }
                var btnMemberEmail = new Button()
                {
                    X = Application.GetRealWidth(88),
@@ -172,6 +180,13 @@
                    Width = Application.GetRealWidth(311),
                    BackgroundColor = CSS_Color.DividingLineColor,
                });
                if(string.IsNullOrEmpty(memberInfo.Account))
                {
                    LoadView_BindAccount(memberInfo, btnMemberEmail, btnMemberName, memberHeadImageView);
                }
                #endregion
                #region 昵称信息
@@ -219,7 +234,7 @@
                    Width = Application.GetRealWidth(311),
                    BackgroundColor = CSS_Color.DividingLineColor,
                });
                LoadView_EidtNickname(btnNickname, btnNicknameRight, memberInfo);
                LoadView_EidtNickname(btnNickname, btnNicknameRight, memberInfo, memberInfo.isVirtualAccount ? btnMemberName : null);
                #endregion
                #region 使用权限
@@ -250,13 +265,7 @@
                };
                view3.AddChidren(btnPermissionRight);
                sView.AddChidren(new Button()
                {
                    Gravity = Gravity.CenterHorizontal,
                    Height = Application.GetRealWidth(1),
                    Width = Application.GetRealWidth(311),
                    BackgroundColor = CSS_Color.DividingLineColor,
                });
                EventHandler<MouseEventArgs> eHandler = (sender, e) =>
                {
@@ -280,6 +289,14 @@
                #region 人脸管理
                if (Entity.DB_ResidenceData.Instance.SupportFacePass)
                {
                    sView.AddChidren(new Button()
                    {
                        Gravity = Gravity.CenterHorizontal,
                        Height = Application.GetRealWidth(1),
                        Width = Application.GetRealWidth(311),
                        BackgroundColor = CSS_Color.DividingLineColor,
                    });
                    var view4 = new FrameLayout()
                    {
                        Height = Application.GetRealWidth(49),
@@ -307,431 +324,21 @@
                    };
                    view4.AddChidren(btnFaceManagementRight);
                    //sView.AddChidren(new Button()
                    //{
                    //    Gravity = Gravity.CenterHorizontal,
                    //    Height = Application.GetRealWidth(1),
                    //    Width = Application.GetRealWidth(311),
                    //    BackgroundColor = CSS_Color.DividingLineColor,
                    //});
                    EventHandler<MouseEventArgs> eFaceHandler = (sender, e) =>
                    {
                        if (OnAppConfig.Instance.FaceManagementTip)
                        {
                            LoadPictureOptionView();
                            return;
                        }
                        Dialog dialog = new Dialog()
                        {
                            BackgroundColor = CSS_Color.DialogTransparentColor1,
                        };
                        FrameLayout contentView = new FrameLayout()
                        {
                            Gravity = Gravity.Center,
                            Width = Application.GetRealWidth(270),
                            Height = Application.GetRealHeight(192),
                            BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                            BorderColor = 0x00000000,
                            BorderWidth = 0,
                            Radius = (uint)Application.GetMinRealAverage(10),
                        };
                        dialog.AddChidren(contentView);
                        Button btnTitle = new Button()
                        {
                            Y = Application.GetRealHeight(16),
                            Height = Application.GetRealHeight(30),
                            TextColor = CSS_Color.MainColor,
                            TextSize = CSS_FontSize.SubheadingFontSize,
                            TextAlignment = TextAlignment.Center,
                            IsBold = true,
                            TextID = StringId.FaceProtocolPrompt,
                        };
                        contentView.AddChidren(btnTitle);
                        Button btnMsg = new Button()
                        {
                            Gravity = Gravity.CenterHorizontal,
                            Height = Application.GetRealHeight(35),
                            Y = btnTitle.Bottom,
                            Width = Application.GetRealHeight(200),
                            TextAlignment = TextAlignment.CenterLeft,
                            TextColor = CSS_Color.TextualColor,
                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                            Text = "    为保护您的个人隐私权益,特向您通知并申请明确同意授权。请你仔细阅读",
                            IsMoreLines = true,
                        };
                        contentView.AddChidren(btnMsg);
                        Button btnMsg1 = new Button()
                        {
                            Gravity = Gravity.CenterHorizontal,
                            Height = Application.GetRealHeight(15),
                            Y = btnMsg.Bottom,
                            Width = Application.GetRealHeight(200),
                            TextAlignment = TextAlignment.CenterLeft,
                            TextColor = CSS_Color.MainColor,
                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                            Text = "    《On Pro人脸信息采集协议》",
                            IsMoreLines = true,
                        };
                        contentView.AddChidren(btnMsg1);
                        Button btnMsg2 = new Button()
                        {
                            Gravity = Gravity.CenterHorizontal,
                            Height = Application.GetRealHeight(35),
                            Y = btnMsg1.Bottom,
                            Width = Application.GetRealHeight(200),
                            TextAlignment = TextAlignment.CenterLeft,
                            TextColor = CSS_Color.TextualColor,
                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                            Text = "    若同意该协议,请点击【同意】按键,表示您已经理解并同意人脸信息采集协议。",
                            IsMoreLines = true,
                        };
                        contentView.AddChidren(btnMsg2);
                        Button btnLine = new Button()
                        {
                            Y = Application.GetRealHeight(149),
                            Height = Application.GetRealHeight(1),
                            Width = Application.GetRealWidth(270 / 2),
                            BackgroundColor = CSS.CSS_Color.DividingLineColor,
                        };
                        contentView.AddChidren(btnLine);
                        Button btnCancel = new Button()
                        {
                            Y = btnLine.Bottom,
                            Width = Application.GetRealWidth(135),
                            Height = Application.GetRealHeight(43),
                            TextAlignment = TextAlignment.Center,
                            TextColor = CSS_Color.TextualColor,
                            TextSize = CSS_FontSize.SubheadingFontSize,
                            //SelectedTextColor = CSS_Color.MainBackgroundColor,
                            //SelectedBackgroundColor = CSS_Color.MainColor,
                            TextID = StringId.Disagree,
                        };
                        contentView.AddChidren(btnCancel);
                        Button btnConfirm = new Button()
                        {
                            X = btnCancel.Right,
                            Y = btnLine.Y,
                            Width = Application.GetRealWidth(135),
                            Height = Application.GetRealHeight(45),
                            TextAlignment = TextAlignment.Center,
                            //TextColor = CSS_Color.TextualColor,
                            TextSize = CSS_FontSize.SubheadingFontSize,
                            TextColor = CSS_Color.MainBackgroundColor,
                            BackgroundColor = CSS_Color.MainColor,
                            TextID = StringId.Agree,
                        };
                        contentView.AddChidren(btnConfirm);
                        //例:右下圆角 大小为50
                        int mRectCornerID = HDLUtils.RectCornerBottomRight;
                        btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
                        dialog.Show();
                        btnCancel.MouseUpEventHandler += (sender, e) =>
                        {
                            dialog.Close();
                        };
                        btnMsg1.MouseUpEventHandler += (sender, e) =>
                        {
                            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);
                            dialog.Close();
                        };
                        btnConfirm.MouseUpEventHandler = (sender, e) =>
                        {
                            dialog.Close();
                            OnAppConfig.Instance.FaceManagementTip = true;
                            OnAppConfig.Instance.SaveConfig();
                            LoadPictureOptionView();
                        };
                        var page = new MemberFaceManagementPage(memberInfo);
                        MainPage.BasePageView.AddChidren(page);
                        page.LoadPage();
                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                    };
                    view4.MouseUpEventHandler = eHandler;
                    btnFaceManagementTitle.MouseUpEventHandler = eFaceHandler;
                    view4.MouseUpEventHandler = eFaceHandler;
                    btnFaceManagementRight.MouseUpEventHandler = eFaceHandler;
                    btnFaceManagementTitle.MouseUpEventHandler = eFaceHandler;
                }
                #endregion
                //#region 创建场景 2020-12-23 隐藏创建场景按钮
                //var view4 = new FrameLayout()
                //{
                //    Height = Application.GetRealWidth(50),
                //};
                //sView.AddChidren(view4);
                //var btnCreateSceneTitle = new Button()
                //{
                //    X = Application.GetRealWidth(16),
                //    Width = Application.GetRealWidth(200),
                //    TextAlignment = TextAlignment.CenterLeft,
                //    TextColor = CSS_Color.FirstLevelTitleColor,
                //    TextSize = CSS_FontSize.TextFontSize,
                //    TextID = StringId.CreateScene,
                //};
                //view4.AddChidren(btnCreateSceneTitle);
                //var btnCreateSceneRight = new Button()
                //{
                //    X = Application.GetRealWidth(287),
                //    Y = Application.GetRealHeight(4),
                //    Width = Application.GetMinRealAverage(38),
                //    Height = Application.GetMinRealAverage(38),
                //    UnSelectedImagePath = "Public/Switch_2.png",
                //    SelectedImagePath = "Public/SwitchOn_2.png",
                //    IsSelected = memberInfo.isAllowCreateScene
                //};
                //view4.AddChidren(btnCreateSceneRight);
                //LoadView_ChangeCreateSceneState(btnCreateSceneRight, btnCreateSceneTitle, memberInfo);
                //#endregion
            }
        }
        const int imageHeight = 400;
        /// <summary>
        /// 加载图标选择选项
        /// </summary>
        void LoadPictureOptionView()
        {
            var pView = new FrameLayout()
            {
                BackgroundColor = CSS_Color.DialogTransparentColor1,
            };
            bodyView.AddChidren(pView);
            var pictureOptionView = new FrameLayout()
            {
                Y = Application.GetRealHeight(445 + 50),
                Height = Application.GetRealHeight(250),
                AnimateSpeed = 0.3f,
                Animate = Animate.DownToUp,
            };
            pView.AddChidren(pictureOptionView);
            var optionView = new VerticalScrolViewLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(100),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
            };
            pictureOptionView.AddChidren(optionView);
            var btnTakePicture = new Button()
            {
                Height = Application.GetRealHeight(50),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.TakePicture,
            };
            optionView.AddChidren(btnTakePicture);
            optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor });
            var btnAlbum = new Button()
            {
                Height = Application.GetRealHeight(50),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.Album,
            };
            optionView.AddChidren(btnAlbum);
            optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor });
            var btnCancel = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(8) + optionView.Bottom,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                TextID = StringId.Cancel,
                TextColor = CSS_Color.WarningColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
            };
            pictureOptionView.AddChidren(btnCancel);
            pictureOptionView.MouseUpEventHandler = (sender, e) =>
            {
                pictureOptionView.Parent.RemoveFromParent();
            };
            pView.MouseUpEventHandler = (sender, e) =>
            {
                pictureOptionView.Parent.RemoveFromParent();
            };
            btnCancel.MouseUpEventHandler = (sender, e) =>
            {
                pictureOptionView.Parent.RemoveFromParent();
            };
            btnTakePicture.MouseDownEventHandler = (sender, e) =>
            {
                btnTakePicture.IsSelected = true;
            };
            btnTakePicture.MouseUpEventHandler = (sender, e) =>
            {
                btnTakePicture.IsSelected = false;
                var imageName = Guid.NewGuid().ToString();
                CropImage.TakePicture((imagePath) =>
                {
                    CropImageCallBack(imagePath, 1, imageName);
                }, imageName, 4, 6, imageHeight);
                pictureOptionView.Parent.RemoveFromParent();
            };
            btnAlbum.MouseDownEventHandler = (sender, e) =>
            {
                btnAlbum.IsSelected = true;
            };
            btnAlbum.MouseUpEventHandler = (sender, e) =>
            {
                btnAlbum.IsSelected = false;
            //从相册选择图片裁剪
            var imageName = Guid.NewGuid().ToString();
            //var imageName = scene.sid;
            CropImage.SelectPicture((imagePath) =>
                {
                    CropImageCallBack(imagePath, 2, imageName);
                }, imageName, 4, 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)
        {
            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);
            }
        }
    }
}