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
{
///
/// 增加子账号界面
///
public partial class MemberFaceManagementPage : FrameLayout
{
FrameLayout bodyView;
///
/// 人脸照片数据
///
string base64string;
ResidenceMemberInfo memberInfo;
public MemberFaceManagementPage(ResidenceMemberInfo memberInfo)
{
bodyView = this;
this.memberInfo = memberInfo;
}
public void LoadPage()
{
bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
var topView = new TopViewDiv(bodyView, memberInfo.nickName);
topView.maginY = 10;
topView.LoadTopView();
#region 人脸管理
var btnMemberFaceTitle = new Button()
{
Y = Application.GetRealHeight(80+10),
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 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,
TextID = StringId.FaceProTipText1,
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,
TextID = StringId.FaceProTipText2,
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,
TextID = StringId.FaceProTipText3,
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 += (sender2, e2) =>
{
dialog.Close();
};
btnMsg1.MouseUpEventHandler += (sender2, e2) =>
{
string url = "https://developer.hdlcontrol.com/HDLFaceProtocol.html";
if (Language.CurrentLanguage != "Chinese")
{
url = "https://developer.hdlcontrol.com/Face information collection protocol.html";
}
new WebViewDialog().LoadPage(Language.StringByID(StringId.GetFaceProtocol), url);
dialog.Close();
};
btnConfirm.MouseUpEventHandler = (sender2, e2) =>
{
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 = 0xFFFF7272,
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(() =>
{
memberInfo.userFaceUrl = "";
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;
///
/// 加载图标选择选项
///
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();
};
}
///
/// 下载云端人脸图片
///
///
///
byte[] downloadImageBytes(string imageUrl)
{
var imageBytes = ImageUtlis.Current.GetImageDownloadUrl(imageUrl);
return imageBytes;
}
///
/// 裁剪完照片回调,统一处理
///
/// 裁剪后的真实路径
/// 照片来源;1:拍照;2:图库
void CropImageCallBack(string selectImagePath, int imageSource, string imageName)
{
if (string.IsNullOrEmpty(selectImagePath) == true)
{
return;
}
//上传成功到回调
Action 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);
}
///
/// 上传图片方法
///
/// 裁剪后的图片路径
///
///
void UploadImage(string selectImagePath, Action 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)
{
var data = Newtonsoft.Json.JsonConvert.DeserializeObject>(pack.Data.ToString());
if(data!= null)
{
data.TryGetValue("userFace",out memberInfo.userFaceUrl);
}
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);
}
}
}
}