| | |
| | | 591=*Member name |
| | | 592=Member account |
| | | 593=Face photo |
| | | 594=Please enter member name |
| | | 595=Delete |
| | | |
| | | |
| | | 2532=Visitor Invitation Record |
| | |
| | | 591=*成员名称 |
| | | 592=成员账号 |
| | | 593=人脸照片 |
| | | 594=请输入成员名称 |
| | | 595=删除人脸数据 |
| | | |
| | | |
| | | |
| | |
| | | 591=*Member name |
| | | 592=Member account |
| | | 593=Face photo |
| | | 594=Please enter member name |
| | | 595=Delete |
| | | |
| | | |
| | | |
| | |
| | | 591=*Member name |
| | | 592=Member account |
| | | 593=Face photo |
| | | 594=Please enter member name |
| | | 595=Delete |
| | | |
| | | |
| | | |
| | |
| | | 591=*Member name |
| | | 592=Member account |
| | | 593=Face photo |
| | | 594=Please enter member name |
| | | 595=Delete |
| | | |
| | | |
| | | 1000=Влажност в стаята |
| | |
| | | if (imageView != null) |
| | | { |
| | | imageView.ImageBytes = imageBytes; |
| | | //Utlis.WriteLine("imageKey 加载云端下载图片成功"); |
| | | } |
| | | }); |
| | | } |
| | |
| | | { |
| | | public static class StringId |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 删除人脸数据 |
| | | /// </summary> |
| | | public const int DeleteMemberFace = 595; |
| | | /// <summary> |
| | | /// 请输入成员备注 |
| | | /// </summary> |
| | | public const int PlsEntrySubAccountRemark = 594; |
| | | /// <summary> |
| | | /// 人脸照片 |
| | | /// </summary> |
| | |
| | | { |
| | | var requestObj = new ChildDeleteObj() |
| | | { |
| | | childAccountId = subaccount.childAccountId, |
| | | childId = subaccount.id, |
| | | homeId = subaccount.homeId |
| | | }; |
| | | var requestJson = HttpUtil.GetSignRequestJson(requestObj); |
| | |
| | | /// <returns></returns> |
| | | public ResponsePackNew EditSubAccountNickName(string nickName, string childAccountId) |
| | | { |
| | | var requestJson = HttpUtil.GetSignRequestJson(new UpdateChildNickNameObj() |
| | | { |
| | | homeId = DB_ResidenceData.Instance.CurrentRegion.id, |
| | | childAccountId = childAccountId, |
| | | nickName = nickName, |
| | | }); |
| | | var d = new Dictionary<string, string>(); |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("childId", childAccountId); |
| | | d.Add("nickName", nickName); |
| | | var requestJson = HttpUtil.GetSignRequestJson(d); |
| | | return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_Update, requestJson); |
| | | |
| | | } |
| | |
| | | var requestJson = HttpUtil.GetSignRequestJson(new UpdateChildAllowCreateSceneObj() |
| | | { |
| | | homeId = DB_ResidenceData.Instance.CurrentRegion.id, |
| | | childAccountId = childAccountId, |
| | | childId = childAccountId, |
| | | isAllowCreateScene = isAllow, |
| | | }); |
| | | return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_Update, requestJson); |
| | |
| | | public ResponsePackNew BindResidenceMemberAccount(string subAccount, string nickName) |
| | | { |
| | | //添加子账号 |
| | | var requestObj = new ChildAddObj() { homeId = DB_ResidenceData.Instance.CurrentRegion.id, account = subAccount, nickName = nickName }; |
| | | var requestObj = new ChildAddObj() |
| | | { |
| | | homeId = DB_ResidenceData.Instance.CurrentRegion.id, |
| | | account = subAccount, |
| | | nickName = nickName |
| | | }; |
| | | var requestJson = HttpUtil.GetSignRequestJson(requestObj); |
| | | return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_Add, requestJson); |
| | | } |
| | | //v1.7更新接口 |
| | | public ResponsePackNew BindResidenceMemberAccount(string subAccount, string nickName,string faceUrl) |
| | | { |
| | | //添加子账号 |
| | | |
| | | Dictionary<string, object> d = new Dictionary<string, object>(); |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("nickName", nickName); |
| | | if (!string.IsNullOrEmpty(subAccount)) |
| | | { |
| | | d.Add("account", subAccount); |
| | | } |
| | | if (!string.IsNullOrEmpty(faceUrl)) |
| | | { |
| | | d.Add("faceUrl", @"data:image/jpg;base64," + faceUrl); |
| | | } |
| | | var requestJson = HttpUtil.GetSignRequestJson(d); |
| | | return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_Add, requestJson); |
| | | } |
| | | /// <summary> |
| | | /// 删除成员账号人脸数据 |
| | | /// </summary> |
| | | /// <param name="subAccount"></param> |
| | | /// <param name="nickName"></param> |
| | | /// <param name="faceUrl"></param> |
| | | /// <returns></returns> |
| | | public ResponsePackNew DeleteMemberFace( string childId) |
| | | { |
| | | Dictionary<string, object> d = new Dictionary<string, object>(); |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("childId", childId); |
| | | var requestJson = HttpUtil.GetSignRequestJson(d); |
| | | return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_RemoveFace, requestJson); |
| | | } |
| | | /// <summary> |
| | | /// 更新成员账号人脸数据 |
| | | /// </summary> |
| | | public ResponsePackNew UpdataMemberFace(string childId, string faceUrl) |
| | | { |
| | | Dictionary<string, object> d = new Dictionary<string, object>(); |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("childId", childId); |
| | | d.Add("userFace", @"data:image/jpg;base64," + faceUrl); |
| | | var requestJson = HttpUtil.GetSignRequestJson(d); |
| | | return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_UpdateFace, requestJson); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// 固定域名,正式环境 |
| | | /// 公共域名就近解析 |
| | | /// </summary> |
| | | public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com"; |
| | | //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm |
| | | //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com"; |
| | | //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com"; |
| | | //const string APP_KEY = "HDL-HOME-APP-TEST"; |
| | | //const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"; |
| | | public const string GlobalRequestHttpsHost = "http://59.41.255.150:7777";//mmmm |
| | | const string APP_KEY = "CPEVRLRT"; |
| | | const string SECRET_KEY = "CPEVRLSJCPEVRLSZ"; |
| | | /// <summary> |
| | | /// RegionMark |
| | | /// </summary> |
| | |
| | | } |
| | | else |
| | | { |
| | | HDL_ON.Utlis.WriteLine(response.Content); |
| | | HDL_ON.Utlis.WriteLine($"接口异常:{requestFullUrl} \r\n"+response.ErrorMessage); |
| | | return new ResponsePackNew() { Code = StateCode.NETWORK_ERROR }; |
| | | } |
| | | |
| | |
| | | #endregion |
| | | |
| | | #region **********签名校验********** |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | const string APP_KEY = "HDL-HOME-APP-TEST"; |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"; |
| | | |
| | | /// <summary> |
| | | /// 获取当前时间戳值 |
| | |
| | | /// </summary> |
| | | public const string API_POST_Child_Update = "/home-wisdom/app/child/account/update"; |
| | | /// <summary> |
| | | /// 更新成员账号人脸信息 |
| | | /// </summary> |
| | | public const string API_POST_Child_UpdateFace = "/home-wisdom/app/child/account/updateFace"; |
| | | /// <summary> |
| | | /// 删除成员账号人脸信息 |
| | | /// </summary> |
| | | public const string API_POST_Child_RemoveFace = "/home-wisdom/app/child/account/removeFace"; |
| | | /// <summary> |
| | | /// 子账号管理员获取主账号授权Token |
| | | /// </summary> |
| | | public const string API_POST_Child_GetMasterToken = "/home-wisdom/app/child/account/masterToken/get"; |
| | |
| | | /// <summary> |
| | | /// 子账号ID childAccountId |
| | | /// </summary> |
| | | public string childAccountId; |
| | | public string childId; |
| | | /// <summary> |
| | | /// 住宅 |
| | | /// </summary> |
| | |
| | | /// <summary> |
| | | /// 子账户类型 ORDINARY、DEBUG、ADMIN |
| | | /// </summary> |
| | | public string childAccountType; |
| | | //public string childAccountType; |
| | | ///// <summary> |
| | | ///// 是否允许远程控制 0:允许 1:不允许 |
| | | ///// </summary> |
| | |
| | | public ResidenceMemberInfo() |
| | | { |
| | | } |
| | | /// <summary> |
| | | /// 是否虚拟账号 |
| | | /// </summary> |
| | | public bool isVirtualAccount |
| | | { |
| | | get |
| | | { |
| | | return string.IsNullOrEmpty(childAccountId); |
| | | } |
| | | } |
| | | //public string Account = ""; |
| | | |
| | | //public string UserName = ""; |
| | |
| | | /// </summary> |
| | | public string memberHeadIcon; |
| | | /// <summary> |
| | | /// 人脸照片 |
| | | /// </summary> |
| | | public string userFaceUrl; |
| | | /// <summary> |
| | | /// 用户账号 |
| | | /// 优先显示手机号,如果手机号为空则显示邮箱地址 |
| | | /// </summary> |
| | |
| | | <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\OrderFunctionPage.cs" />
|
| | | <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\Face\FaceManagementPage.cs" />
|
| | | <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\RoomListManage\DeliveryQrCodePage.cs" />
|
| | | <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\MemberManagement\MemberFaceManagementPage.cs" />
|
| | | </ItemGroup>
|
| | | <ItemGroup>
|
| | | <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
|
| | |
| | | Button btnAddMember; |
| | | Button btnScan; |
| | | EditText etMemberAccount; |
| | | EditText etMemberName; |
| | | /// <summary> |
| | | /// 人脸照片数据 |
| | | /// </summary> |
| | | string base64string; |
| | | |
| | | Action backAction; |
| | | |
| | |
| | | bodyView.BackgroundColor = CSS_Color.MainBackgroundColor; |
| | | new TopViewDiv(bodyView, Language.StringByID(StringId.AddMember)).LoadTopView(); |
| | | |
| | | |
| | | if (Entity.DB_ResidenceData.Instance.SupportFacePass) |
| | | { |
| | | var btnMemberName = new Button() |
| | |
| | | }; |
| | | bodyView.AddChidren(btnMemberName); |
| | | |
| | | var etMemberName = new EditText() |
| | | etMemberName = new EditText() |
| | | { |
| | | Y = btnMemberName.Bottom, |
| | | X = Application.GetRealWidth(16), |
| | |
| | | }; |
| | | bodyView.AddChidren(btnMemberFaceTitle); |
| | | |
| | | |
| | | |
| | | var btnAddFace = new Button() |
| | | { |
| | | Gravity = Gravity.CenterHorizontal, |
| | |
| | | |
| | | EventHandler<MouseEventArgs> eFaceHandler = (sender, e) => |
| | | { |
| | | Application.HideSoftInput(); |
| | | if (OnAppConfig.Instance.FaceManagementTip) |
| | | { |
| | | OnAppConfig.Instance.FaceManagementTip = true; |
| | | OnAppConfig.Instance.SaveConfig(); |
| | | LoadPictureOptionView(); |
| | | LoadPictureOptionView(btnAddFace); |
| | | return; |
| | | } |
| | | |
| | |
| | | dialog.Close(); |
| | | OnAppConfig.Instance.FaceManagementTip = true; |
| | | OnAppConfig.Instance.SaveConfig(); |
| | | LoadPictureOptionView(); |
| | | LoadPictureOptionView(btnAddFace); |
| | | }; |
| | | |
| | | }; |
| | |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | IsBold = true, |
| | | TextAlignment = TextAlignment.Center, |
| | | TextID = StringId.ConfirmInvitation, |
| | | TextID = StringId.Confirm, |
| | | }; |
| | | bodyView.AddChidren(btnAddMember); |
| | | |
| | |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | IsBold = true, |
| | | TextAlignment = TextAlignment.Center, |
| | | TextID = StringId.ConfirmInvitation, |
| | | TextID = StringId.Confirm, |
| | | }; |
| | | bodyView.AddChidren(btnAddMember); |
| | | |
| | |
| | | /// <summary> |
| | | /// 加载图标选择选项 |
| | | /// </summary> |
| | | void LoadPictureOptionView() |
| | | void LoadPictureOptionView(Button btnAddFace) |
| | | { |
| | | var pView = new FrameLayout() |
| | | { |
| | |
| | | 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(); |
| | | }; |
| | |
| | | //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; |
| | | } |
| | | |
| | | } |
| | |
| | | { |
| | | btnAddMember.MouseUpEventHandler = (sender, e) => { |
| | | var memberAccount = etMemberAccount.Text.Trim(); |
| | | if(string.IsNullOrEmpty(memberAccount)) |
| | | var name = etMemberName.Text.Trim(); |
| | | if(string.IsNullOrEmpty(name)) |
| | | { |
| | | TipDivMsg(Language.StringByID(StringId.PlsEntryAccount)); |
| | | TipDivMsg(Language.StringByID(StringId.PlsEntrySubAccountRemark)); |
| | | return; |
| | | } |
| | | BindMember(memberAccount); |
| | | |
| | | BindMember(memberAccount, name, base64string); |
| | | }; |
| | | } |
| | | |
| | |
| | | /// 绑定账号 |
| | | /// </summary> |
| | | /// <param name="memberAccount"></param> |
| | | void BindMember(string memberAccount) |
| | | void BindMember(string memberAccount,string nickName,string faceUrl) |
| | | { |
| | | var waitPage = new Loading(); |
| | | bodyView.AddChidren(waitPage); |
| | |
| | | { |
| | | try |
| | | { |
| | | var result = new HttpServerRequest().BindResidenceMemberAccount(memberAccount, memberAccount); |
| | | var result = new HttpServerRequest().BindResidenceMemberAccount(memberAccount, nickName,faceUrl); |
| | | if (result.Code == StateCode.SUCCESS) |
| | | { |
| | | Application.RunOnMainThread(() => |
New file |
| | |
| | | using System; |
| | | using System.Threading; |
| | | using HDL_ON.DAL.Server; |
| | | using HDL_ON.Entity; |
| | | using HDL_ON.UI.CSS; |
| | | using Shared; |
| | | |
| | | namespace HDL_ON.UI |
| | | { |
| | | /// <summary> |
| | | /// 增加子账号界面 |
| | | /// </summary> |
| | | public partial class MemberFaceManagementPage : FrameLayout |
| | | { |
| | | FrameLayout bodyView; |
| | | |
| | | /// <summary> |
| | | /// 人脸照片数据 |
| | | /// </summary> |
| | | string base64string; |
| | | ResidenceMemberInfo memberInfo; |
| | | public MemberFaceManagementPage(ResidenceMemberInfo memberInfo) |
| | | { |
| | | bodyView = this; |
| | | this.memberInfo = memberInfo; |
| | | } |
| | | |
| | | |
| | | public void LoadPage() |
| | | { |
| | | bodyView.BackgroundColor = CSS_Color.MainBackgroundColor; |
| | | new TopViewDiv(bodyView, memberInfo.nickName).LoadTopView(); |
| | | |
| | | #region 人脸管理 |
| | | var btnMemberFaceTitle = new Button() |
| | | { |
| | | Y = Application.GetRealHeight(80), |
| | | X = Application.GetRealWidth(16), |
| | | Height = Application.GetRealHeight(32), |
| | | TextColor = CSS_Color.FirstLevelTitleColor, |
| | | TextSize = CSS_FontSize.TextFontSize, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextID = StringId.MemberFace, |
| | | }; |
| | | bodyView.AddChidren(btnMemberFaceTitle); |
| | | |
| | | var btnAddFace = new Button() |
| | | { |
| | | Gravity = Gravity.CenterHorizontal, |
| | | Y = btnMemberFaceTitle.Bottom, |
| | | Width = Application.GetRealWidth(230), |
| | | Height = Application.GetRealWidth(230), |
| | | Radius = (uint)Application.GetRealWidth(22), |
| | | BorderWidth = 0, |
| | | UnSelectedImagePath = "PersonalCenter/FacePassage/FaceIcon.png", |
| | | TextColor = CSS_Color.MainBackgroundColor, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | IsBold = true, |
| | | TextAlignment = TextAlignment.Center, |
| | | }; |
| | | bodyView.AddChidren(btnAddFace); |
| | | |
| | | |
| | | EventHandler<MouseEventArgs> eFaceHandler = (sender, e) => |
| | | { |
| | | if (OnAppConfig.Instance.FaceManagementTip) |
| | | { |
| | | OnAppConfig.Instance.FaceManagementTip = true; |
| | | OnAppConfig.Instance.SaveConfig(); |
| | | LoadPictureOptionView(btnAddFace); |
| | | 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(btnAddFace); |
| | | }; |
| | | |
| | | }; |
| | | btnAddFace.MouseUpEventHandler = eFaceHandler; |
| | | #endregion |
| | | |
| | | var btnDeleteFaceDate = 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.WarningColor, |
| | | TextColor = CSS_Color.MainBackgroundColor, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | IsBold = true, |
| | | TextAlignment = TextAlignment.Center, |
| | | TextID = StringId.DeleteMemberFace, |
| | | }; |
| | | bodyView.AddChidren(btnDeleteFaceDate); |
| | | |
| | | btnDeleteFaceDate.MouseUpEventHandler = (sender, e) => { |
| | | var waitPage = new Loading(); |
| | | waitPage.Start(""); |
| | | new Thread(() => |
| | | { |
| | | try |
| | | { |
| | | var pack = new HttpServerRequest().DeleteMemberFace(memberInfo.id); |
| | | if (pack != null) |
| | | { |
| | | if(pack.Code == StateCode.SUCCESS) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | btnAddFace.ImageBytes = null; |
| | | btnAddFace.UnSelectedImagePath = "PersonalCenter/FacePassage/FaceIcon.png"; |
| | | btnDeleteFaceDate.Enable = btnDeleteFaceDate.Visible = false; |
| | | }); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | TipDivMsg(Language.StringByID(StringId.delFail)); |
| | | }); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | if (waitPage != null) |
| | | { |
| | | waitPage.RemoveFromParent(); |
| | | waitPage = null; |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | |
| | | }; |
| | | |
| | | if (!string.IsNullOrEmpty(memberInfo.userFaceUrl)) |
| | | { |
| | | var waitPage = new Loading(); |
| | | waitPage.Start(""); |
| | | new Thread(() => |
| | | { |
| | | try |
| | | { |
| | | var bytes = downloadImageBytes(memberInfo.userFaceUrl); |
| | | if (bytes != null) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | btnAddFace.ImageBytes = bytes; |
| | | }); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | if (waitPage != null) |
| | | { |
| | | waitPage.RemoveFromParent(); |
| | | waitPage = null; |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | else |
| | | { |
| | | btnDeleteFaceDate.Enable = btnDeleteFaceDate.Visible = false; |
| | | } |
| | | } |
| | | |
| | | void TipDivMsg(string msg) |
| | | { |
| | | var tipBodyView = new FrameLayout(); |
| | | bodyView.AddChidren(tipBodyView); |
| | | |
| | | var msgView = new FrameLayout() |
| | | { |
| | | Gravity = Gravity.CenterHorizontal, |
| | | Y = Application.GetRealHeight(167), |
| | | Width = Application.GetRealWidth(210), |
| | | Height = Application.GetRealHeight(62), |
| | | Radius = (uint)Application.GetRealWidth(8), |
| | | BorderWidth = 0, |
| | | BorderColor = 0x00000000, |
| | | BackgroundColor = 0xFF333333, |
| | | }; |
| | | tipBodyView.AddChidren(msgView); |
| | | |
| | | var btnMsg = new Button() |
| | | { |
| | | Gravity = Gravity.Center, |
| | | Width = Application.GetRealWidth(186), |
| | | Height = Application.GetRealHeight(42), |
| | | TextColor = CSS_Color.MainBackgroundColor, |
| | | TextSize = CSS_FontSize.TextFontSize, |
| | | TextAlignment = TextAlignment.Center, |
| | | Text = msg, |
| | | IsMoreLines = true, |
| | | }; |
| | | msgView.AddChidren(btnMsg); |
| | | |
| | | new System.Threading.Thread(() => { |
| | | System.Threading.Thread.Sleep(1200); |
| | | Application.RunOnMainThread(() => { |
| | | tipBodyView.RemoveAll(); |
| | | tipBodyView.RemoveFromParent(); |
| | | }); |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | |
| | | } |
| | | |
| | | const int imageHeight = 400; |
| | | |
| | | /// <summary> |
| | | /// 加载图标选择选项 |
| | | /// </summary> |
| | | void LoadPictureOptionView(Button btnAddFace) |
| | | { |
| | | 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, 6, 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, 6, 6, imageHeight); |
| | | |
| | | pictureOptionView.Parent.RemoveFromParent(); |
| | | }; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 下载云端人脸图片 |
| | | /// </summary> |
| | | /// <param name="imageUrl"></param> |
| | | /// <returns></returns> |
| | | byte[] downloadImageBytes(string imageUrl) |
| | | { |
| | | var imageBytes = ImageUtlis.Current.GetImageDownloadUrl(imageUrl); |
| | | |
| | | return imageBytes; |
| | | } |
| | | |
| | | |
| | | /// <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, 1, imageName); |
| | | }, imageName, 6, 6, imageHeight); |
| | | } |
| | | else |
| | | { |
| | | CropImage.SelectPicture((imagePath) => |
| | | { |
| | | CropImageCallBack(imagePath, 2, imageName); |
| | | }, imageName, 6, 6, imageHeight); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //if (isSuccess) |
| | | //{ |
| | | //} |
| | | |
| | | 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); |
| | | var pack = new HttpServerRequest().UpdataMemberFace(memberInfo.id, base64string); |
| | | if (pack != null) |
| | | { |
| | | Utlis.WriteLine("上传结果:" + pack.message); |
| | | if(pack.Code == StateCode.SUCCESS) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | this.RemoveFromParent(); |
| | | }); |
| | | } |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | |
| | | public void LoadPage() |
| | | { |
| | | #if DEBUG |
| | | Entity.DB_ResidenceData.Instance.SupportFacePass = true; |
| | | #endif |
| | | bodyView.BackgroundColor = CSS_Color.BackgroundColor; |
| | | //创建读取成员账号线程 |
| | | var thread = LoadThread_GetResidenceMemberAccount(); |
| | |
| | | { |
| | | Gravity = Gravity.CenterHorizontal, |
| | | Width = Application.GetRealWidth(343), |
| | | //Height = Application.GetRealWidth(230), |
| | | Height = Application.GetRealWidth(180), |
| | | BackgroundColor = CSS_Color.MainBackgroundColor, |
| | | Radius = (uint)Application.GetRealWidth(12), |
| | |
| | | Text = HDLCommon.Current.GetUserName(memberInfo.memberName) |
| | | }; |
| | | view1.AddChidren(btnMemberName); |
| | | if (memberInfo.isVirtualAccount) |
| | | { |
| | | btnMemberName.Text = memberInfo.nickName; |
| | | |
| | | } |
| | | var btnMemberEmail = new Button() |
| | | { |
| | | X = Application.GetRealWidth(88), |
| | |
| | | Width = Application.GetRealWidth(311), |
| | | BackgroundColor = CSS_Color.DividingLineColor, |
| | | }); |
| | | LoadView_EidtNickname(btnNickname, btnNicknameRight, memberInfo); |
| | | LoadView_EidtNickname(btnNickname, btnNicknameRight, memberInfo, memberInfo.isVirtualAccount ? btnMemberName : null); |
| | | #endregion |
| | | |
| | | #region 使用权限 |
| | |
| | | }; |
| | | 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) => |
| | | { |
| | |
| | | #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), |
| | |
| | | }; |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | /// <summary> |
| | | /// 修改昵称窗口 |
| | | /// </summary> |
| | | void LoadView_EidtNickname(Button btn1, Button btn2, ResidenceMemberInfo mInfo) |
| | | void LoadView_EidtNickname(Button btn1, Button btn2, ResidenceMemberInfo mInfo,Button btnMemberName) |
| | | { |
| | | EventHandler<MouseEventArgs> eventHandler = (sender, e) => |
| | | { |
| | |
| | | { |
| | | try |
| | | { |
| | | var responsePack = new HttpServerRequest().EditSubAccountNickName(str, mInfo.childAccountId); |
| | | var responsePack = new HttpServerRequest().EditSubAccountNickName(str, mInfo.id); |
| | | if (responsePack.Code.ToUpper() == StateCode.SUCCESS) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | btn1.Text = str; |
| | | if (btnMemberName != null) |
| | | { |
| | | btnMemberName.Text = str; |
| | | } |
| | | }); |
| | | mInfo.nickName = str; |
| | | } |
| | |
| | | }; |
| | | headPortraitView.AddChidren(btnMemberName); |
| | | string username = HDLCommon.Current.GetUserName(memberInfo.memberName); |
| | | btnMemberName.Text = memberInfo.nickName + "(" + username + ")"; |
| | | btnMemberName.Text = memberInfo.nickName; |
| | | |
| | | #region RoomList |
| | | roomListView = new VerticalScrolViewLayout() |
| | | if (!memberInfo.isVirtualAccount) |
| | | { |
| | | Y = Application.GetRealHeight(138), |
| | | Height = Application.GetRealHeight(471), |
| | | //BackgroundColor = CSS_Color.MainBackgroundColor, |
| | | }; |
| | | bodyView.AddChidren(roomListView); |
| | | #endregion |
| | | |
| | | btnMemberName.Text = memberInfo.nickName + "(" + username + ")"; |
| | | #region RoomList |
| | | roomListView = new VerticalScrolViewLayout() |
| | | { |
| | | Y = Application.GetRealHeight(138), |
| | | Height = Application.GetRealHeight(471), |
| | | //BackgroundColor = CSS_Color.MainBackgroundColor, |
| | | }; |
| | | bodyView.AddChidren(roomListView); |
| | | #endregion |
| | | } |
| | | btnDelMember = new Button() |
| | | { |
| | | Y = Application.GetRealHeight(617), |
| | |
| | | bodyView.AddChidren(btnDelMember); |
| | | |
| | | LoadEventList(); |
| | | |
| | | GetShareDataByAccount(); |
| | | if (!memberInfo.isVirtualAccount) |
| | | { |
| | | GetShareDataByAccount(); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// 固定域名,正式环境 |
| | | /// 公共域名就近解析 |
| | | /// </summary> |
| | | public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com"; |
| | | //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm |
| | | //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com"; |
| | | //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com"; |
| | | //const string APP_KEY = "HDL-HOME-APP-TEST"; |
| | | //const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"; |
| | | public const string GlobalRequestHttpsHost = "http://59.41.255.150:7777";//mmmm |
| | | const string APP_KEY = "CPEVRLRT"; |
| | | const string SECRET_KEY = "CPEVRLSJCPEVRLSZ"; |
| | | /// <summary> |
| | | /// RegionMark |
| | | /// </summary> |
| | |
| | | #endregion |
| | | |
| | | #region **********签名校验********** |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | const string APP_KEY = "HDL-HOME-APP-TEST"; |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"; |
| | | |
| | | /// <summary> |
| | | /// 获取当前时间戳值 |