wei
2020-11-27 79fe8dab1bcb8e8d92d9058ca2540cd4e8f9ecf9
20201127 合并嘉乐代码
46个文件已添加
5个文件已删除
52个文件已修改
3 文件已重命名
4956 ■■■■ 已修改文件
.vs/HDL_APP_Project/xs/project-cache/HDL-ON_iOS-Debug|iPhone.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HDL_APP_Project/xs/project-cache/HDL-ON_iOS-Debug|iPhoneSimulator.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Application.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/LoginIcon/Server.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Head.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/ServerInfo.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Close.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Function.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Help.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Menu.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Scene.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Search.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/SendMessage.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Telephone.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/Transfer.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/Public/Dialog/DialogTipTitleIcon_1.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/Public/Dialog/DialogTipTitleIcon_2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/Public/Dialog/DialogTipTitleIcon_3.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/Public/Search.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/AppDelegate.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/LoginIcon/Server.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Head.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/ServerInfo.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Close.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Function.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Help.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Menu.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Scene.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Search.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/SendMessage.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Telephone.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/Transfer.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/Public/Dialog/DialogTipTitleIcon_1.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/Public/Dialog/DialogTipTitleIcon_2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/Public/Dialog/DialogTipTitleIcon_3.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/Public/Search.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/Constant.cs 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/HDLCommon.cs 238 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/Utlis.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpServerRequest.cs 450 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpServerRequest的副本.cs 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpUtil.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/IMessageCommon.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewAPI.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewApiRes.cs 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/OnAppConfig.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/ResponseEntity/ResidenceMemberInfo.cs 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/UserInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/MainPage.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/LineView.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/OperationSuccessPromptPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/TopViewDiv.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/ConfirmButton.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/ConfirmDialog.cs 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/EmptyTipView.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/LineView.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/ListCellView.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/ListIconCellView.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/TextButton.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/UpdateTipDialog.cs 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/WebViewDialog.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/ForgetPasswordPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/ForgetPasswordPageBLL.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/LoginPage.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/LoginPageBLL.cs 192 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/RegisterPage.cs 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/RegisterPageBLL.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/SelectServerDialog.cs 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AboutOn/AboutOnPage.cs 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AboutOn/ComplaintsPage.cs 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AboutOn/FunctionIntroductionPage.cs 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AboutOnPage.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/AccountBindInfoPage.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/ChangeBindAccountPage.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/ChangeBindVerificationCodePage.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/NewBindAccountPage.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/NewBindVerificationCodePage.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/GetSupport/FAQHelpPage.cs 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/GetSupport/GetSupportPage.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/GetSupport/QuestionListPage.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/AddMemberScanPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/ChooseShareMemberTargetListPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberFunctionPermissionPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberManagementPageBLL.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberPermissionPage.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/MyQRCodePage.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/MyServerInfoPage.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/ResetAccountPassword/ResetPasswordPage.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/ResetAccountPassword/ResetPasswordVerificationCodePage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/ResidentialManagePage.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/ResidentialManagePageBLL.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/RoomEditFunctionPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/Transfer/TransferConfirmPage.cs 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/SearchDevice/VoicePanelSceneListPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/SearchDevice/VoicePanelScenePage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HDL_APP_Project/xs/project-cache/HDL-ON_iOS-Debug|iPhone.json
File was deleted
.vs/HDL_APP_Project/xs/project-cache/HDL-ON_iOS-Debug|iPhoneSimulator.json
File was deleted
HDL-ON_Android/Application.cs
@@ -115,6 +115,7 @@
        void init()
        {
            //手机名称 Android.OS.Build.Manufacturer;
            OnAppConfig.Instance.PhoneName = Android.OS.Build.Manufacturer;
        }
        void checkSomeInfo()
        {
HDL-ON_Android/Assets/Language.ini
@@ -13,6 +13,12 @@
14=Register
42=Network anomaly
10001=Failed to request the server, please try again later!
10002=System maintenance, please try again later!
10003=Login failed, please add a home first!
10004=Account already exists
[Chinese]
1=登录
2=手机号登录
@@ -301,8 +307,8 @@
285=绑定手机号
286=绑定手机成功
287=绑定手机失败
288=手机号修改
289=解绑手机号
288=修改绑定手机
289=解除手机绑定
290=读取历史数据失败
291=暂无已收藏的场景
292=关于ON
@@ -371,6 +377,11 @@
355=关于
356=版本号
357=此功能暂未开放!
358=电话:
359=邮箱:
360=面板场景
361=未添加
362=全选
5000=音乐
5001=组合
@@ -421,3 +432,52 @@
5046=调节音量
5047=你手机暂未安装"QQ音乐"{\r\n}请前往手机商场安装
9000=请使用新的手机账号登录APP
9001=请使用新的邮箱账号登录APP
9002=登录手机修改完成
9003=登录手机绑定完成
9004=登录邮箱修改完成
9005=登录邮箱绑定完成
9006=验证码可能会延迟,请再等一会
9007=再等一会
9008=返回
9009=不愿意透露姓名的用户
9010=新密码
9011=再次输入新密码
9012=同意
9013=用户协议
9014=隐私政策
9015=和
9016=请先阅读并同意《用户协议》和《隐私政策》
9017=确认退出登录?
9018=请选择国家/区域
9019=立即更新
9020=以后再说
9021=国家/地区
9022=服务器信息
9023=当前账号服务器所属:
9024=*服务器是您当前云端数据存储的所在区域,无需必要,我们不建议发生迁移
9025=若需要迁移服务器,请拨打
9026=功能介绍
9027=投诉
9028=版本更新
9029=(标题请带投诉字样,我们会优先处理)
9030=复制成功
9031=空空如也
9032=发现新版本
9033=已经是最新版本
9034=我们能为你提供什么帮助?
9035=功能问题
9036=场景问题
9037=APP使用辅助
9038=常见问题
10000=无效登录密钥,请重新登录!
10001=请求服务器失败,请稍后再试!
10002=系统维护中,请稍后再试!
10003=登录失败,请先添加住宅!
10004=账号已存在
10005=验证码发送频繁,请稍后再试!
10006=签名错误
HDL-ON_Android/Assets/Phone/LoginIcon/Server.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Head.png
HDL-ON_Android/Assets/Phone/PersonalCenter/ServerInfo.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Close.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Function.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Help.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Menu.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Scene.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Search.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/SendMessage.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Support/Telephone.png
HDL-ON_Android/Assets/Phone/PersonalCenter/Transfer.png
HDL-ON_Android/Assets/Phone/Public/Dialog/DialogTipTitleIcon_1.png
HDL-ON_Android/Assets/Phone/Public/Dialog/DialogTipTitleIcon_2.png
HDL-ON_Android/Assets/Phone/Public/Dialog/DialogTipTitleIcon_3.png
HDL-ON_Android/Assets/Phone/Public/Search.png
HDL-ON_Android/HDL-ON_Android.csproj
@@ -30,7 +30,7 @@
    <DebugType>portable</DebugType>
    <Optimize>False</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DefineConstants>DEBUG;TRACE;__Android__</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
@@ -44,7 +44,7 @@
    <DebugType>portable</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <DefineConstants>TRACE;__Android__;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidManagedSymbols>true</AndroidManagedSymbols>
@@ -577,6 +577,22 @@
    <AndroidAsset Include="Assets\Phone\OnIcon.png" />
    <AndroidAsset Include="Assets\Phone\TipNot.png" />
    <AndroidAsset Include="Assets\Phone\DeviceIcon\VoicePanelIcon.png" />
    <AndroidAsset Include="Assets\Phone\Public\Dialog\DialogTipTitleIcon_3.png" />
    <AndroidAsset Include="Assets\Phone\Public\Dialog\DialogTipTitleIcon_2.png" />
    <AndroidAsset Include="Assets\Phone\Public\Dialog\DialogTipTitleIcon_1.png" />
    <AndroidAsset Include="Assets\Phone\LoginIcon\Server.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\ServerInfo.png" />
    <AndroidAsset Include="Assets\Phone\Public\Search.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\Function.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\Search.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\Menu.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\Help.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\Telephone.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\SendMessage.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\Scene.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Support\Close.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Head.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\Transfer.png" />
  </ItemGroup>
  <Import Project="..\HDL_ON\HDL_ON.projitems" Label="Shared" Condition="Exists('..\HDL_ON\HDL_ON.projitems')" />
  <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
HDL-ON_iOS/AppDelegate.cs
@@ -100,15 +100,15 @@
                string userPhoneName = UIDevice.CurrentDevice.Name;
                OnAppConfig.Instance.PushDeviceToken = DeviceToken;
                //UserConfig.Instance.phoneName = userPhoneName;
                //UserConfig.Instance.SaveUserConfig();
                OnAppConfig.Instance.PhoneName = userPhoneName;
                OnAppConfig.Instance.SaveUserConfig();
            }
            if (OnAppConfig.Instance.PushDeviceToken != DeviceToken)
            {
                string userPhoneName = UIDevice.CurrentDevice.Name;
                OnAppConfig.Instance.PushDeviceToken = DeviceToken;
                //UserConfig.Instance.phoneName = userPhoneName;
                //UserConfig.Instance.SaveUserConfig();
                OnAppConfig.Instance.PhoneName = userPhoneName;
                OnAppConfig.Instance.SaveUserConfig();
            }
        }
@@ -194,15 +194,15 @@
            //NSString* nsCount = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
            application.StatusBarStyle = UIStatusBarStyle.DarkContent;
            string nsCount = NSLocale.CurrentLocale.CountryCode;
            //string nsCount = NSLocale.CurrentLocale.CountryCode;
            if ( UserInfo.Current != null && nsCount !=  UserInfo.Current.areaCode.ToString())
            {
                //int.TryParse(nsCount,out  UserInfo.Current.areaCode);
                //2020-11-18
                 UserInfo.Current.areaCode = nsCount;
                OnAppConfig.Instance.SaveUserConfig();
            }
            //if ( UserInfo.Current != null && nsCount !=  UserInfo.Current.areaCode.ToString())
            //{
            //    //int.TryParse(nsCount,out  UserInfo.Current.areaCode);
            //    //2020-11-18
            //     UserInfo.Current.areaCode = nsCount;
            //    OnAppConfig.Instance.SaveUserConfig();
            //}
            application.IdleTimerDisabled = true;
            application.RegisterForRemoteNotificationTypes(UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound);
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -557,6 +557,22 @@
      <BundleResource Include="Resources\Phone\OnIcon.png" />
      <BundleResource Include="Resources\Phone\TipNot.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DeviceIcon\VoicePanelIcon.png" />
      <BundleResource Include="Resources\Phone\Public\Dialog\DialogTipTitleIcon_3.png" />
      <BundleResource Include="Resources\Phone\Public\Dialog\DialogTipTitleIcon_2.png" />
      <BundleResource Include="Resources\Phone\Public\Dialog\DialogTipTitleIcon_1.png" />
      <BundleResource Include="Resources\Phone\LoginIcon\Server.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\ServerInfo.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\Function.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\Search.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\Menu.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\Help.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\Telephone.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\SendMessage.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\Scene.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Support\Close.png" />
      <BundleResource Include="Resources\Phone\Public\Search.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Head.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\Transfer.png" />
    </ItemGroup>
    <ItemGroup>
      <ITunesArtwork Include="iTunesArtwork" />
HDL-ON_iOS/Resources/Language.ini
@@ -450,10 +450,28 @@
9015=和
9016=请先阅读并同意《用户协议》和《隐私政策》
9017=确认退出登录?
9018=选择国家或区域
9019=更新
9020=忽略
9021=我的二维码
9018=请选择国家/区域
9019=立即更新
9020=以后再说
9021=国家/地区
9022=服务器信息
9023=当前账号服务器所属:
9024=*服务器是您当前云端数据存储的所在区域,无需必要,我们不建议发生迁移
9025=若需要迁移服务器,请拨打
9026=功能介绍
9027=投诉
9028=版本更新
9029=(标题请带投诉字样,我们会优先处理)
9030=复制成功
9031=空空如也
9032=发现新版本
9033=已经是最新版本
9034=我们能为你提供什么帮助?
9035=功能问题
9036=场景问题
9037=APP使用辅助
9038=常见问题
10000=无效登录密钥,请重新登录!
HDL-ON_iOS/Resources/Phone/LoginIcon/Server.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Head.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/ServerInfo.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Close.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Function.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Help.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Menu.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Scene.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Search.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/SendMessage.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Support/Telephone.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/Transfer.png
HDL-ON_iOS/Resources/Phone/Public/Dialog/DialogTipTitleIcon_1.png
HDL-ON_iOS/Resources/Phone/Public/Dialog/DialogTipTitleIcon_2.png
HDL-ON_iOS/Resources/Phone/Public/Dialog/DialogTipTitleIcon_3.png
HDL-ON_iOS/Resources/Phone/Public/Search.png
HDL_ON/Common/Constant.cs
@@ -10,28 +10,39 @@
        /// <summary>
        /// ç”¨æˆ·åè®®
        /// </summary>
        public const string URL_UserAgreement = "https://developer.hdlcontrol.com/HDLOnPlusUserAgreement.html";
        public const string URL_USERAGREEMENT = "https://developer.hdlcontrol.com/HDLOnPlusUserAgreement.html";
        /// <summary>
        /// éšç§æ”¿ç­–
        /// </summary>
        public const string URL_PrivacyPolicy = "https://developer.hdlcontrol.com/HDLOnPlusPrivacyPolicy.html";
        public const string URL_PRIVACYPOLICY = "https://developer.hdlcontrol.com/HDLOnPlusPrivacyPolicy.html";
        /// <summary>
        /// æŠ€æœ¯æ”¯æŒç”µè¯å·ç 
        /// </summary>
        public const string SUPPORT_TELEPHONENUMBER = "4008558535";
        /// <summary>
        /// æŠ€æœ¯æ”¯æŒé‚®ç®±åœ°å€
        /// </summary>
        public const string SUPPORT_EMAIL = "hdltickets@hdlautomation.com";
        /// <summary>
        /// è‹¹æžœå•†åº—地址
        /// </summary>
        public const string URL_APPSTORE = "https://apps.apple.com/cn/app/on/id1532353432";
    }
    #endregion
    #region â–  å…¨å±€æžšä¸¾ ____________________________
    /// <summary>
    /// å®¢æˆ·ç«¯ç±»åž‹ å¦‚HdlOn、EvoyoHome、调试宝
    /// </summary>
    public enum APIClientType
    {
        HDL_ON,
        EvoyoHome,
        è°ƒè¯•宝,
        HDL_ON_PRO
    }
    ///// <summary>
    ///// å®¢æˆ·ç«¯ç±»åž‹ å¦‚HdlOn、EvoyoHome、调试宝
    ///// </summary>
    //public enum APIClientType
    //{
    //    HDL_ON,
    //    EvoyoHome,
    //    è°ƒè¯•宝,
    //    HDL_ON_PRO
    //}
    /// <summary>
    /// å¤‡ä»½ç±»åž‹
@@ -139,5 +150,44 @@
    }
    /// <summary>
    ///
    /// </summary>
    public enum PhoneDeviceType
    {
        /// <summary>
        /// Android
        /// </summary>
        Android = 0,
        /// <summary>
        /// IOS
        /// </summary>
        IOS = 1,
        /// <summary>
        /// WinPhone
        /// </summary>
        WinPhone,
    }
    /// <summary>
    /// APP ç±»åž‹
    /// </summary>
    public enum SoftwareType
    {
        /// <summary>
        /// Evoyo、ON、ON_Plus
        /// </summary>
        Evoyo = 0,
        /// <summary>
        /// IOS
        /// </summary>
        ON = 1,
        /// <summary>
        /// WinPhone
        /// </summary>
        ON_Plus,
    }
    #endregion
}
HDL_ON/Common/HDLCommon.cs
@@ -3,6 +3,7 @@
using HDL_ON;
using HDL_ON.UI.CSS;
using HDL_ON.DAL.Server;
using HDL_ON.UI;
namespace HDL_ON
{
@@ -73,18 +74,16 @@
        /// </summary>
        public void CheckIfNeedForceUpdate()
        {
            //            //return;
            System.Threading.Tasks.Task.Run(() =>
            {
                try
                {
                    var requestObj = new ForceUpdateObj()
                    {
                        LanguageType = Utlis.GetPostLanguageType()
                    };
#if Android
                    requestObj.DeviceType = 1;
#if __IOS__
                    requestObj.DeviceType = PhoneDeviceType.IOS.ToString();
#endif
                    var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
                    var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_CheckAppVersion, requestJson);
@@ -115,17 +114,6 @@
            });
            //ForceUpdateInfo mForceUpdateInfo = new ForceUpdateInfo () {
            //    IsNeedForceUpdate = true,
            //    AndroidUrl = "https://shouji.baidu.com/software/26667787.html",
            //    AndroidUrl_En = "https://shouji.baidu.com/software/26667787.html",
            //    IosUrl = "https://apps.apple.com/cn/app/hdl-on/id1029839624",
            //    ReasonStr = "1.发现新版本App,当前版本已停用,马上更新!\n2.请下载和安装新版本!",
            //    ReasonStr_En = "1. Discover the new version of the App, the current version is disabled, update now! \n2. Please download and install the new version!"
            //};
            //ShowForceUpdateDialog (mForceUpdateInfo);
        }
        /// <summary>
@@ -134,209 +122,63 @@
        /// </summary>
        public void ShowForceUpdateDialog(ForceUpdateInfo mForceUpdateInfo)
        {
            //if (!mForceUpdateInfo.IsNeedForceUpdate) return;
            // 1.1 æ²¡æœ‰æ›´æ–° è¿”回
            if (mForceUpdateInfo.UpdateType == 0) return;
            // 1.2 æœ‰æ–°ç‰ˆæœ¬ä½†æ˜¯å¿½ç•¥è¿‡ è¿”回
            if (mForceUpdateInfo.UpdateType == 1 && (UserInfo.Current.IgnoreUpdateVersion == mForceUpdateInfo.NewVersion)) return;
            Dialog dialog = new Dialog();
            FrameLayout dialogBodyView = new FrameLayout()
            {
                Gravity = Gravity.Center,
                Width = Application.GetRealWidth(500),
                Height = Application.GetRealHeight(500),
                BackgroundColor = 0xFF000000,
                Radius = (uint)Application.GetRealWidth(10),
                //BorderColor = SkinStyle.Current.Transparent,
                BorderWidth = 0,
            };
            dialog.AddChidren(dialogBodyView);
            Button btnTitle = new Button()
            {
                Height = Application.GetRealHeight(80),
                BackgroundColor = 0x00000000,
                TextAlignment = TextAlignment.Center,
                TextID = StringId.Tip,
                TextColor = 0xFFFFFFFF
            };
            dialogBodyView.AddChidren(btnTitle);
            FrameLayout centerView = new FrameLayout()
            {
                Y = Application.GetRealHeight(80),
                Height = Application.GetRealHeight(340),
                BackgroundColor = 0xFFFFFFFF,
            };
            dialogBodyView.AddChidren(centerView);
            Button btnMessage = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(20),
                Width = Application.GetRealWidth(400),
                //Height = Application.GetRealHeight (300),
                //Text = mForceUpdateInfo.ReasonStr,
                TextAlignment = TextAlignment.TopLeft,
                //TextColor = SkinStyle.Current.TextColor,
                IsMoreLines = true
            };
            centerView.AddChidren(btnMessage);
            FrameLayout bottomView = new FrameLayout()
            {
                Y = Application.GetRealHeight(420),
                Height = Application.GetRealHeight(80),
                BackgroundColor = 0xFFFFFFFF,
            };
            dialogBodyView.AddChidren(bottomView);
            var mAndroidUrl = mForceUpdateInfo.AndroidUrl;
            if (Language.CurrentLanguage == "Chinese")
            {
                btnMessage.Text = mForceUpdateInfo.ReasonStr;
            }
            else
            {
                btnMessage.Text = mForceUpdateInfo.ReasonStr_En;
                mAndroidUrl = mForceUpdateInfo.AndroidUrl_En;
            }
            // 2.1 æœ‰æ–°ç‰ˆæœ¬æ²¡æœ‰å¿½ç•¥è¿‡ æç¤ºæ›´æ–°
            if (mForceUpdateInfo.UpdateType == 1)
            {
                #region æç¤ºæ›´æ–°
                Button btnNext = new Button()
                Action okAction = () =>
                {
                    Width = Application.GetRealWidth(249),
                    TextID = StringId.Ignore,
                    TextAlignment = TextAlignment.Center,
                    TextColor = 0xFFFFFFFF,
                    BackgroundColor = 0xFF000000,
                    //Text = "忽略"
                };
                bottomView.AddChidren(btnNext);
                btnNext.MouseUpEventHandler += (sender2, e2) =>
                {
                    //UserConfig.Instance.IfIgnoreUpdate = true;
                    UserInfo.Current.IgnoreUpdateVersion = mForceUpdateInfo.NewVersion;
                    UserInfo.Current.SaveUserInfo();
                    dialog.Close();
                    if (string.IsNullOrEmpty(mForceUpdateInfo.NewVersionUrl)) return;
                    HDLUtils.OpenUrl(mForceUpdateInfo.NewVersionUrl);
                };
                Button btnSave = new Button()
                Action cancelAction = () =>
                {
                    X = btnNext.Right + 1,
                    Width = Application.GetRealWidth(250),
                    TextID = StringId.Update,
                    TextAlignment = TextAlignment.Center,
                    TextColor = 0xFFFFFFFF,
                    BackgroundColor = 0xFF000000,
                    //Text = "更新"
                };
                bottomView.AddChidren(btnSave);
                btnSave.MouseUpEventHandler += (sender2, e2) =>
                {
                    dialog.Close();
                    try
                    {
#if __IOS__
                        HDLUtils.OpenUrl(mForceUpdateInfo.IosUrl);
                        //UIApplication.SharedApplication.OpenUrl (new Foundation.NSUrl ("https://apps.apple.com/cn/app/hdl-on/id1029839624"));
#elif Android
                        HDLUtils.OpenUrl(mAndroidUrl);
                        SharedMethod.SharedMethod.OpenUrl (mAndroidUrl);
                    //SharedMethod.SharedMethod.OpenUrl ("https://shouji.baidu.com/software/26667787.html");
#endif
                    }
                    catch
                    {
                        //跳转下载地址失败
                        Utlis.WriteLine("open url error");
                    }
                    //UserInfo.Current.IgnoreUpdateVersion = mForceUpdateInfo.NewVersion;
                    //UserInfo.Current.SaveUserInfo();
                };
                #endregion
                //1提示更新
                var dialog =  new UpdateTipDialog();
                var tipStr = Language.StringByID(StringId.VersionNumber) + mForceUpdateInfo.NewVersion;
                dialog.ShowUpdateDialog(Language.StringByID(StringId.DiscoverNewVersion), tipStr, mForceUpdateInfo.ReasonStr, okAction, cancelAction);
            }
            else if (mForceUpdateInfo.UpdateType == 2)
            else if (mForceUpdateInfo.UpdateType == 2) //2.2 éœ€è¦å¼ºåˆ¶æ›´æ–°
            {
                #region å¼ºåˆ¶æ›´æ–°
                Button btnSave = new Button()
                //2强制更新
                //"1.发现新版本App,当前版本已停用,马上更新!\n2.请下载和安装新版本!....."
                Action okAction = () =>
                {
                    Width = Application.GetRealWidth(500),
                    TextID = StringId.Confirm,
                    TextAlignment = TextAlignment.Center,
                    TextColor = 0xFFFFFFFF,
                    BackgroundColor = 0xFF000000,
                    if (string.IsNullOrEmpty(mForceUpdateInfo.NewVersionUrl)) {
                        Utlis.ShowTip(Language.StringByID(StringId.DataExceptionPleaseTryAgain));
                        return;
                };
                bottomView.AddChidren(btnSave);
                //var mAndroidUrl = mForceUpdateInfo.AndroidUrl;
                //if (Language.CurrentLanguage == "Chinese") {
                //    btnMessage.Text = mForceUpdateInfo.ReasonStr;
                //} else {
                //    btnMessage.Text = mForceUpdateInfo.ReasonStr_En;
                //    mAndroidUrl = mForceUpdateInfo.AndroidUrl_En;
                //}
                btnSave.MouseUpEventHandler += (sender2, e2) =>
                {
                    try
                    {
#if __IOS__
                        HDLUtils.OpenUrl(mForceUpdateInfo.IosUrl);
                        //UIApplication.SharedApplication.OpenUrl (new Foundation.NSUrl ("https://apps.apple.com/cn/app/hdl-on/id1029839624"));
#elif Android
                    HDLUtils.OpenUrl(mAndroidUrl);
                    //SharedMethod.SharedMethod.OpenUrl ("https://shouji.baidu.com/software/26667787.html");
#endif
                    }
                    catch
                    {
                        //跳转下载地址失败
                        Utlis.WriteLine("open url error");
                    }
                    HDLUtils.OpenUrl(mForceUpdateInfo.NewVersionUrl);
                };
                #endregion
            }
            else
            {
                #region æç¤ºé€šçŸ¥
                Button btnSave = new Button()
                {
                    Width = Application.GetRealWidth(500),
                    TextID = StringId.Close,
                    TextAlignment = TextAlignment.Center,
                    TextColor = 0xFFFFFFFF,
                    BackgroundColor = 0xFF000000,
                };
                bottomView.AddChidren(btnSave);
                btnSave.MouseUpEventHandler += (sender2, e2) =>
                //1提示更新
                var dialog = new UpdateTipDialog();
                var tipStr = Language.StringByID(StringId.VersionNumber) + mForceUpdateInfo.NewVersion;
                dialog.ShowForcedUpdateDialog(Language.StringByID(StringId.DiscoverNewVersion), tipStr, mForceUpdateInfo.ReasonStr, okAction);
            }
            else //3. åªéœ€æç¤º
                {
                    dialog.Close();
                };
                #endregion
            }
            dialog.Show();
                //3提示通知
                Action okAction = () =>
                {
                };
                var dialog = new UpdateTipDialog();
                dialog.ShowTipDialog(Language.StringByID(StringId.Tip), mForceUpdateInfo.ReasonStr, okAction);
        }
        }
        #endregion
    }
}
HDL_ON/Common/R.cs
@@ -501,21 +501,89 @@
        /// </summary>
        public const int IfConfirmLogout = 9017;
        /// <summary>
        /// é€‰æ‹©å›½å®¶æˆ–区域
        /// è¯·é€‰æ‹©å›½å®¶/区域
        /// </summary>
        public const int SelectCountryOrRegion = 9018;
        public const int PleaseSelectCountryOrRegion = 9018;
        /// <summary>
        /// æ›´æ–°
        /// ç«‹å³æ›´æ–°
        /// </summary>
        public const int Update = 9019;
        /// <summary>
        /// å¿½ç•¥
        /// ä»¥åŽå†è¯´
        /// </summary>
        public const int Ignore = 9020;
        /// <summary>
        /// æˆ‘的二维码
        /// å›½å®¶/地区
        /// </summary>
        public const int MyQRCode = 9021;
        public const int CountryOrRegion = 9021;
        /// <summary>
        /// æœåŠ¡å™¨ä¿¡æ¯
        /// </summary>
        public const int ServerInformation = 9022;
        /// <summary>
        /// å½“前账号服务器所属:
        /// </summary>
        public const int CurrentAccountServerOwnership = 9023;
        /// <summary>
        /// *服务器是您当前云端数据存储的所在区域,无需必要,我们不建议发生迁移
        /// </summary>
        public const int CurrentAccountServerOwnershipTip = 9024;
        /// <summary>
        /// è‹¥éœ€è¦è¿ç§»æœåŠ¡å™¨ï¼Œè¯·æ‹¨æ‰“
        /// </summary>
        public const int ToMigrateTheServerPleaseCall = 9025;
        /// <summary>
        /// åŠŸèƒ½ä»‹ç»
        /// </summary>
        public const int FunctionIntroduced = 9026;
        /// <summary>
        /// æŠ•诉
        /// </summary>
        public const int Complaints = 9027;
        /// <summary>
        /// ç‰ˆæœ¬æ›´æ–°
        /// </summary>
        public const int VersionUpdate = 9028;
        /// <summary>
        /// (标题请带投诉字样,我们会优先处理)
        /// </summary>
        public const int WillGivePriorityToTheTreatmen = 9029;
        /// <summary>
        /// å¤åˆ¶æˆåŠŸ
        /// </summary>
        public const int CopySuccess = 9030;
        /// <summary>
        /// ç©ºç©ºå¦‚也
        /// </summary>
        public const int ContentIsEmpty = 9031;
        /// <summary>
        /// å‘现新版本
        /// </summary>
        public const int DiscoverNewVersion = 9032;
        /// <summary>
        /// å·²ç»æ˜¯æœ€æ–°ç‰ˆæœ¬
        /// </summary>
        public const int IsLatestVersion = 9033;
        /// <summary>
        /// æˆ‘们能为你提供什么帮助?
        /// </summary>
        public const int WhatCanWeDoForYou = 9034;
        /// <summary>
        /// åŠŸèƒ½é—®é¢˜
        /// </summary>
        public const int FunctionalQuestion = 9035;
        /// <summary>
        /// åœºæ™¯é—®é¢˜
        /// </summary>
        public const int SceneQuestion = 9036;
        /// <summary>
        /// APP使用辅助
        /// </summary>
        public const int AppUsageAssistance = 9037;
        /// <summary>
        /// å¸¸è§é—®é¢˜
        /// </summary>
        public const int CommonQuestion = 9038;
       
        #region ç½‘络请求响应错误提示信息
HDL_ON/Common/Utlis.cs
@@ -1,6 +1,7 @@
using System;
using Shared;
using System.Text.RegularExpressions;
using System.Text;
namespace HDL_ON
{
@@ -171,6 +172,105 @@
#endif
        }
        /// <summary>
        /// ç”Ÿæˆéšæœºå­—符串
        /// </summary>
        /// <param name="length">字符串的长度</param>
        /// <returns></returns>
        public static string CreateRandomString(int length)
        {
            // åˆ›å»ºä¸€ä¸ªStringBuilder对象存储密码
            StringBuilder sb = new StringBuilder();
            //使用for循环把单个字符填充进StringBuilder对象里面变成14位密码字符串
            for (int i = 0; i < length; i++)
            {
                Random random = new Random(Guid.NewGuid().GetHashCode());
                //随机选择里面其中的一种字符生成
                switch (random.Next(3))
                {
                    case 0:
                        //调用生成生成随机数字的方法
                        sb.Append(createNum());
                        break;
                    case 1:
                        //调用生成生成随机小写字母的方法
                        sb.Append(createSmallAbc());
                        break;
                    case 2:
                        //调用生成生成随机大写字母的方法
                        sb.Append(createBigAbc());
                        break;
                }
            }
            return sb.ToString();
        }
        /// <summary>
        /// ç”Ÿæˆå•个随机数字
        /// </summary>
        static int createNum()
        {
            Random random = new Random(Guid.NewGuid().GetHashCode());
            int num = random.Next(10);
            return num;
        }
        /// <summary>
        /// ç”Ÿæˆå•个大写随机字母
        /// </summary>
        static string createBigAbc()
        {
            //A-Z的 ASCII值为65-90
            Random random = new Random(Guid.NewGuid().GetHashCode());
            int num = random.Next(65, 91);
            string abc = Convert.ToChar(num).ToString();
            return abc;
        }
        /// <summary>
        /// ç”Ÿæˆå•个小写随机字母
        /// </summary>
        static string createSmallAbc()
        {
            //a-z的 ASCII值为97-122
            Random random = new Random(Guid.NewGuid().GetHashCode());
            int num = random.Next(97, 123);
            string abc = Convert.ToChar(num).ToString();
            return abc;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="unixTimeStamp"></param>
        /// <returns></returns>
        public static DateTime UnixToDateTime(long unixTimeStamp)
        {
            DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // å½“地时区
            return startTime.AddSeconds(unixTimeStamp);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="unixTimeStamp"></param>
        /// <returns></returns>
        public static long DateTimeToUnix(DateTime dateTime)
        {
            DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // å½“地时区
            return (long)(dateTime - startTime).TotalSeconds; // ç›¸å·®ç§’æ•°
        }
        /// <summary>
        /// èŽ·å–è¯·æ±‚æäº¤çš„è¯­è¨€å‚æ•°
        /// </summary>
        public static string GetPostLanguageType()
        {
            return Language.CurrentLanguage == "Chinese" ? LanguageTypeEnum.CHINESE.ToString() : LanguageTypeEnum.ENGLISH.ToString();
        }
    }
}
HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -1,9 +1,10 @@
using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using HDL_ON.DAL.Mqtt;
using HDL_ON.DAL.Net;
using HDL_ON.Entity;
using Newtonsoft.Json.Linq;
using Shared;
@@ -68,29 +69,29 @@
        }
        public string GetRequestResultMsg(string resultCode)
        {
            string result = "";
            switch (resultCode.ToUpper())
            {
                case "USERNAMEORPWDERROR":
                    result = Language.StringByID(StringId.LoginFailed_AccountOrPasswordError);
                    break;
                case "ACCOUNTNOEXISTS":
                    result = Language.StringByID(StringId.ACCOUNTNOEXISTS);
                    break;
                case "SENDFAIL":
                    result = Language.StringByID(StringId.FailedToSendVerificationCode);
                    break;
                case "EXIST":
                    result = Language.StringByID(StringId.AccountAlreadyUse);
                    break;
                case "Self:Net_Error":
                    result = Language.StringByID(StringId.NetworkAnomaly);
                    break;
            }
            return result;
        }
        //public string GetRequestResultMsg(string resultCode)
        //{
        //    string result = "";
        //    switch (resultCode.ToUpper())
        //    {
        //        case "USERNAMEORPWDERROR":
        //            result = Language.StringByID(StringId.LoginFailed_AccountOrPasswordError);
        //            break;
        //        case "ACCOUNTNOEXISTS":
        //            result = Language.StringByID(StringId.ACCOUNTNOEXISTS);
        //            break;
        //        case "SENDFAIL":
        //            result = Language.StringByID(StringId.FailedToSendVerificationCode);
        //            break;
        //        case "EXIST":
        //            result = Language.StringByID(StringId.AccountAlreadyUse);
        //            break;
        //        case "Self:Net_Error":
        //            result = Language.StringByID(StringId.NetworkAnomaly);
        //            break;
        //    }
        //    return result;
        //}
        #region â–  é€šç”¨è¯·æ±‚接口_______________________
        /// <summary>
@@ -118,9 +119,13 @@
            if (revertObj.Code.ToUpper() == StateCode.SUCCESS)
            {
                var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginRes>(revertObj.Data.ToString());
                 UserInfo.Current.LoginTokenString = revertData.headerPrefix + revertData.accessToken;
                 UserInfo.Current.LastTime = DateTime.Now;
                 UserInfo.Current.SaveUserInfo();
                UserInfo.Current.refreshToken = revertData.refreshToken;
                return true;
            }
            return false;
@@ -130,13 +135,7 @@
        #region æ³¨å†Œã€ç™»å½•部分
        /// <summary>
        /// èŽ·å–è¯·æ±‚æäº¤çš„è¯­è¨€å‚æ•°
        /// </summary>
        public string GetPostLanguageType()
        {
            return Language.CurrentLanguage == "Chinese" ? LanguageTypeEnum.CHINESE.ToString() : LanguageTypeEnum.ENGLISH.ToString();
        }
        /// <summary>
        /// é€šç”¨ å‘送验证码方法
@@ -151,7 +150,7 @@
            var requestObj = new VerifyCodeSendObj()
            {
                verifyType = (int)verifyType,
                languageType = GetPostLanguageType()
                languageType = Utlis.GetPostLanguageType()
            };
            // æ˜¯å¦æ˜¯æ‰‹æœº 
            if (isPhone)
@@ -292,12 +291,15 @@
                 UserInfo.Current.userEmailInfo = info.memberEmail;
                 UserInfo.Current.userMobileInfo = info.memberPhone;
                 UserInfo.Current.userName = info.memberName;
                if (!string.IsNullOrEmpty(info.memberPhonePrefix))
                {
                 UserInfo.Current.areaCode = info.memberPhonePrefix;
                }
                //是否需要获取头像
                if (bGetHeadImage)
                {
                    var headImageBytes = DownHeadImage();
                    if (headImageBytes != null)
                    if (headImageBytes != null && headImageBytes.Length > 0)
                    {
                         UserInfo.Current.headImagePageBytes = headImageBytes;
                        FileStream fs = null;
@@ -396,7 +398,8 @@
        /// <returns></returns>
        public ResponsePackNew EditUserName(string userName)
        {
           var requestJson = HttpUtil.GetSignRequestJson(new UpdateMemberNameRes() {
            var requestJson = HttpUtil.GetSignRequestJson(new UpdateMemberNameRes()
            {
               memberName = userName
           });
           return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Member_UpdateMemberInfo, requestJson);
@@ -466,7 +469,8 @@
            if(resultObj.Code == StateCode.SUCCESS)
            {
                var homeList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RegionInfoResNew>>(resultObj.Data.ToString());
                if (homeList == null || homeList.Count == 0) {
                if (homeList == null || homeList.Count == 0)
                {
                }
@@ -498,10 +502,11 @@
                            continue;
                        }
                         UserInfo.Current.regionList.Add(home);
                    }
                        if (string.IsNullOrEmpty(DB_ResidenceData.residenceData.CurReginID))
                        {
                            DB_ResidenceData.residenceData.CurReginID =  UserInfo.Current.regionList[0].RegionID;
                        }
                    }
                    DB_ResidenceData.residenceData.SaveResidenceData();
                     UserInfo.Current.SaveUserInfo();
@@ -656,7 +661,7 @@
        /// <returns></returns>
        public ResponsePackNew GetResidenceMemberAccount()
        {
            var requestJson = HttpUtil.GetSignRequestJson(new HomeIdObj() { homeId = DB_ResidenceData.residenceData.residecenInfo.RegionID });
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new HomeIdObj() { homeId = DB_ResidenceData.residenceData.residecenInfo.RegionID });
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_FindAll, requestJson);
        }
@@ -671,7 +676,7 @@
                childAccountId = subaccount.childAccountId,
                homeId = subaccount.homeId
            };
            var requestJson = HttpUtil.GetSignRequestJson(requestObj);
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_Delete, requestJson);
        }
@@ -683,7 +688,7 @@
        /// <returns></returns>
        public ResponsePackNew EditSubAccountNickName(string nickName, string childAccountId)
        {
            var requestJson = HttpUtil.GetSignRequestJson(new UpdateChildNickNameObj()
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new UpdateChildNickNameObj()
            {
                homeId = DB_ResidenceData.residenceData.residecenInfo.RegionID,
                childAccountId = childAccountId,
@@ -700,7 +705,7 @@
        /// <returns></returns>
        public ResponsePackNew ChangeCreateSceneState(bool isAllow, string childAccountId)
        {
            var requestJson = HttpUtil.GetSignRequestJson(new UpdateChildAllowCreateSceneObj()
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new UpdateChildAllowCreateSceneObj()
            {
                homeId = DB_ResidenceData.residenceData.residecenInfo.RegionID,
                childAccountId = childAccountId,
@@ -721,7 +726,7 @@
            //string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d);
            //return RequestHttps($"{severAddress}/ZigbeeDataShare/GetShareDataBySubAccount", jsonString, true);
            var requestJson = HttpUtil.GetSignRequestJson(new HomeShareFindAll()
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new HomeShareFindAll()
            {
                homeId = DB_ResidenceData.residenceData.residecenInfo.RegionID,
                childAccountId = childAccountId
@@ -841,7 +846,7 @@
        {
            //添加子账号
            var requestObj = new ChildAddObj() { homeId = DB_ResidenceData.residenceData.residecenInfo.RegionID, account = subAccount, nickName = nickName };
            var requestJson = HttpUtil.GetSignRequestJson(requestObj);
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Child_Add, requestJson);
        }
@@ -856,6 +861,316 @@
            d.Add("Account", account);
            string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d);
            return RequestHttps($"{severAddress}/ZigbeeUsers/GetSubAccountInfo", jsonString, true);
        }
        /// <summary>
        ///  ä¸‹è½½å­è´¦å·ç”¨æˆ·å¤´åƒ
        /// </summary>
        /// <param name="subaccoun"></param>
        /// <returns></returns>
        public byte[] DownChildHeadImage(ResidenceMemberInfo subaccount)
        {
            var requestObj = new ChildBaseObj()
            {
                childAccountId = subaccount.childAccountId,
                homeId = subaccount.homeId
            };
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
            var replaceToken = "";
            if (DB_ResidenceData.residenceData.residecenInfo.IsOthreShare)
            {
                replaceToken = DB_ResidenceData.residenceData.MasterToken;
            }
            return HttpUtil.RequestHttpsDownload(NewAPI.API_POST_Child_DownloadHeadImage, requestJson,null);
        }
        #endregion
        /// <summary>
        /// èŽ·å–MQTT远程连接信息接口
        /// </summary>
        public MqttInfo GetMqttRemoteInfo(string attachClientId)
        {
            try
            {
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new GetMqttRemoteInfoObj()
                {
                    attachClientId = attachClientId,
                    homeType = HomeTypeEnum.BUSPRO.ToString()
                });
                var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_GetMqttRemoteInfo, requestJson, DB_ResidenceData.residenceData.residecenInfo.regionUrl);
                if (revertObj.Code == StateCode.SUCCESS)
                {
                    return Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo>(revertObj.Data.ToString());
                }
                else
                {
                    Utlis.WriteLine("GetMqttRemoteInfo error");
                    return null;
                }
            }
            catch
            {
                return null;
            }
        }
        #region æŽ¨é€
        /// <summary>
        /// æäº¤æŽ¨é€éœ€è¦çš„关键标识信息
        /// </summary>
        public bool PushSerivceAddPushInfo()
        {
            try
            {
                string deviceType = PhoneDeviceType.Android.ToString();
#if __IOS__
                deviceType = PhoneDeviceType.IOS.ToString();
#endif
                //是否生成模式
                bool isProduce = true;
#if DEBUG
                isProduce = false;
#endif
                if (string.IsNullOrEmpty(OnAppConfig.Instance.PushDeviceToken)) return false;
                var mAddpushinfoObj = new AddpushinfoObj()
                {
                    pushToken = OnAppConfig.Instance.PushDeviceToken,
                    deviceName = OnAppConfig.Instance.PhoneName,
                    deviceType = deviceType,
                    produce = isProduce,
                };
                var mAddpushinfoJson = Newtonsoft.Json.JsonConvert.SerializeObject(mAddpushinfoObj);
                var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_AddToken, mAddpushinfoJson);
                if (revertObj.Code == StateCode.SUCCESS)
                {
                    if (revertObj.Data != null)
                    {
                        var pushId = revertObj.Data.ToString();
                        if (!string.IsNullOrEmpty(pushId))
                        {
                            OnAppConfig.Instance.PushId = pushId;
                            OnAppConfig.Instance.SaveUserConfig();
                            return true;
                        }
                    }
                    Utlis.WriteLine("AddToken æˆåŠŸ");
                }
                else
                {
                    Utlis.WriteLine("AddToken å¤±è´¥");
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// æŸ¥è¯¢æŽ¨é€ä¿¡æ¯åˆ—表
        /// </summary>
        /// <returns></returns>
        public ResponsePackNew PushSerivceGetpushmessagelist()
        {
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new GetMessageListObj()
            {
                pushId = OnAppConfig.Instance.PushId
            });
            return HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_Getpushmessagelist, requestJson);
        }
        /// <summary>
        /// æ¸…空消息记录
        /// </summary>
        /// <returns></returns>
        public bool PushSerivceClearmessagelist()
        {
            if (string.IsNullOrEmpty(OnAppConfig.Instance.PushId)) return false;
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new PushIdObj()
            {
                pushId = OnAppConfig.Instance.PushId
            });
            var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_Clearmessagelist, requestJson);
            if (revertObj.Code == StateCode.SUCCESS)
            {
                return true;
            }
            else
            {
            }
            return false;
        }
        /// <summary>
        /// é€€å‡ºç™»å½•,清空推送标识
        /// </summary>
        /// <returns></returns>
        public bool PushSerivceSignOut()
        {
            if (string.IsNullOrEmpty(OnAppConfig.Instance.PushId)) return false;
            try
            {
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new PushIdObj() {
                    pushId = OnAppConfig.Instance.PushId
                });
                var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_DeleteToken, requestJson);
                if (revertObj.Code == StateCode.SUCCESS)
                {
                    return true;
                }
                else
                {
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// æ ‡è®°æ¶ˆæ¯å…¨éƒ¨å·²è¯»
        /// </summary>
        /// <param name="msgId"></param>
        /// <returns></returns>
        public bool PushSerivceMarkAllMessageRead()
        {
            if (string.IsNullOrEmpty(OnAppConfig.Instance.PushId)) return false;
            try
            {
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new PushIdObj()
                {
                    pushId = OnAppConfig.Instance.PushId
                });
                var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_ALLMarkread, requestJson);
                if (revertObj.Code == StateCode.SUCCESS)
                {
                    return true;
                }
                else
                {
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// æ ‡è®°æŒ‡å®šæ¶ˆæ¯å·²è¯»
        /// </summary>
        /// <param name="msgId"></param>
        /// <returns></returns>
        public bool PushSerivceMarkMessageRead(string msgId)
        {
            if (string.IsNullOrEmpty(OnAppConfig.Instance.PushId)) return false;
            try
            {
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new PushMsgIdObj()
                {
                    msgId = msgId
                });
                var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_Markread, requestJson);
                if (revertObj.Code == StateCode.SUCCESS)
                {
                    return true;
                }
                else
                {
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// é€šè¿‡ä¸»é”®id删除一条推送记录
        /// </summary>
        /// <param name="msgId"></param>
        /// <returns></returns>
        public bool PushSerivceDeleteMessage(string msgId)
        {
            if (string.IsNullOrEmpty(OnAppConfig.Instance.PushId)) return false;
            try
            {
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new PushMsgIdObj()
                {
                    msgId = msgId
                });
                var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_Deletepushinfo, requestJson);
                if (revertObj.Code == StateCode.SUCCESS)
                {
                    return true;
                }
                else
                {
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        #endregion
        #region æ£€æµ‹æ›´æ–°
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ResponsePackNew CheckAppVersion()
        {
            var requestObj = new ForceUpdateObj()
            {
                LanguageType = Utlis.GetPostLanguageType()
            };
#if __IOS__
            requestObj.DeviceType = PhoneDeviceType.IOS.ToString();
#endif
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
            return HttpUtil.RequestHttpsPost(NewAPI.API_POST_CheckAppVersion, requestJson);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ResponsePackNew GetAppVersion()
        {
            var requestObj = new ForceUpdateObj()
            {
            };
#if __IOS__
            requestObj.DeviceType = PhoneDeviceType.IOS.ToString();
#endif
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
            return HttpUtil.RequestHttpsPost(NewAPI.API_POST_GetAppVersion, requestJson);
        }
        #endregion
@@ -975,32 +1290,33 @@
        #endregion
        #region å¤‡ä»½éƒ¨åˆ†
        /// <summary>
        /// èŽ·å–ä½å®…å¤‡ä»½åˆ—è¡¨
        /// </summary>
        public Dictionary<int, string> GetRegionLastBackupId()
        {
            //Dialog dialog = new Dialog();
            //dialog.Show();
        ///// <summary>
        ///// èŽ·å–ä½å®…å¤‡ä»½åˆ—è¡¨
        ///// </summary>
        //public Dictionary<int, string> GetRegionLastBackupId()
        //{
        //    //Dialog dialog = new Dialog();
        //    //dialog.Show();
            Dictionary<int, string> backupList = new Dictionary<int, string>();
            Dictionary<string, object> d = new Dictionary<string, object>();
            d.Add("LevelID", DB_ResidenceData.residenceData.residecenInfo.RegionID);// 199200);
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d);
            var revertObj = RequestHttps("https://developer.hdlcontrol.com/api/GetUserFolder", requestJson, true);
            if (revertObj == null || revertObj.ResponseData == null)
            {
                return new Dictionary<int, string>();
            }
            var jt = Newtonsoft.Json.JsonConvert.DeserializeObject<List<JObject>>(revertObj.ResponseData.ToString());
            foreach (var j in jt)
            {
                var folderId = (int)j.GetValue("FolderID");
                var folderName = j.GetValue("FolderName").ToString();
                backupList.Add(folderId, folderName);
            }
            return backupList;
        }
        //    Dictionary<int, string> backupList = new Dictionary<int, string>();
        //    Dictionary<string, object> d = new Dictionary<string, object>();
        //    d.Add("LevelID", DB_ResidenceData.residenceData.residecenInfo.RegionID);// 199200);
        //    var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d);
        //    var revertObj = RequestHttps("https://developer.hdlcontrol.com/api/GetUserFolder", requestJson, true);
        //    if (revertObj == null || revertObj.ResponseData == null)
        //    {
        //        return new Dictionary<int, string>();
        //    }
        //    var jt = Newtonsoft.Json.JsonConvert.DeserializeObject<List<JObject>>(revertObj.ResponseData.ToString());
        //    foreach (var j in jt)
        //    {
        //        var folderId = (int)j.GetValue("FolderID");
        //        var folderName = j.GetValue("FolderName").ToString();
        //        backupList.Add(folderId, folderName);
        //    }
        //    return backupList;
        //}
        /* 2020-09-01 å¼ƒç”¨ æ¢å¤æ—§æ•°æ®åŠŸèƒ½åœ¨bus软件上实现
        /// <summary>
        /// èŽ·å–å¤‡ä»½æ–‡ä»¶åˆ—è¡¨
HDL_ON/DAL/Server/HttpServerRequestµÄ¸±±¾.cs
File was deleted
HDL_ON/DAL/Server/HttpUtil.cs
@@ -555,131 +555,3 @@
}
namespace Shared.Securitys
{
    /// <summary>
    ///
    /// </summary>
    public partial class EncryptionService
    {
        #region åР坆
        /// <summary>
        /// åŠ å¯†ä¸»é¢˜ä¸ºBase64
        /// </summary>
        /// <param name="pToEncrypt"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string AesEncryptTopic(string pToEncrypt, string key)
        {
            if (string.IsNullOrEmpty(pToEncrypt)) return null;
            if (string.IsNullOrEmpty(key)) return pToEncrypt;
            //需要加密内容的明文流
            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(pToEncrypt);
            //配置AES加密Key(密钥、向量、模式、填充)
            RijndaelManaged rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                IV = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            };
            //创建AES加密器对象
            ICryptoTransform cTransform = rm.CreateEncryptor();
            //使用AES将明文流转成密文字节数组
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            //将AES生成的密文字节数组转成Base64字符串
            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
        /// <summary>
        /// åŠ å¯†è´Ÿè½½ä¸ºäºŒè¿›åˆ¶æµ
        /// </summary>
        /// <param name="toEncryptArray"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static byte[] AesEncryptPayload(byte[] toEncryptArray, string key)
        {
            if (string.IsNullOrEmpty(key)) return toEncryptArray;
            //配置AES加密Key(密钥、向量、模式、填充)
            var rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                IV = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            };
            //创建AES加密器对象
            var cTransform = rm.CreateEncryptor();
            //使用AES将明文流转成密文字节数组
            return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        }
        #endregion
        #region è§£å¯†
        /// <summary>
        /// è§£å¯†ä¸»é¢˜æ•°æ®
        /// </summary>
        /// <param name="pToDecrypt"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string AesDecryptTopic(string pToDecrypt, string key)
        {
            //AES密文Base64转成字符串
            Byte[] toEncryptArray = Convert.FromBase64String(pToDecrypt);
            //配置AES加密Key(密钥、向量、模式、填充)
            RijndaelManaged rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                IV = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            };
            //创建AES解密器对象
            ICryptoTransform cTransform = rm.CreateDecryptor();
            //使用AES将密文流转成明文的字节数组
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            //转成字符串
            return Encoding.UTF8.GetString(resultArray);
        }
        /// <summary>
        /// é‡‡ç”¨Aes解密负载数据
        /// </summary>
        /// <param name="toEncryptArray"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static byte[] AesDecryptPayload(byte[] toEncryptArray, string key)
        {
            //配置AES加密Key(密钥、向量、模式、填充)
            var rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                IV = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            };
            //创建AES解密器对象
            var cTransform = rm.CreateDecryptor();
            //使用AES将密文流转成明文的字节数组
            return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        }
        #endregion
    }
}
HDL_ON/DAL/Server/IMessageCommon.cs
@@ -30,6 +30,12 @@
                return m_Current;
            }
        }
        /// <summary>
        /// æ˜¯å¦åœ¨èŽ·å–token
        /// </summary>
        public bool isGetingToken;
        /// <summary>
        /// æ— è§†é”™è¯¯(访问云端时,此操作将不会弹出错误)
        /// </summary>
@@ -69,7 +75,7 @@
            //验证码发送频繁,请稍后再试!
            stateCodeDic["15"] = HDL_ON.StringId.VerificationCodeSentFrequently;
            //会话超时,请更新token
            stateCodeDic["10001"] = HDL_ON.StringId.NotLogin;
            stateCodeDic[StateCode.TOKEN_EXPIRED] = HDL_ON.StringId.NotLogin;
            ////登录失败,账号或者密码错误
            stateCodeDic["10008"] = HDL_ON.StringId.LoginFailed_AccountOrPasswordError;
            //账号不存在
@@ -231,6 +237,13 @@
        {
            try
            {
                //如果是token过期则刷新token
                if (statuCode == StateCode.TOKEN_EXPIRED)
                {
                    StartRefreshToken();
                }
                else
                {
                string mes = GetMsgByRequestName(statuCode);
                if (mes == null) return;
                if (!string.IsNullOrEmpty(tipStr))
@@ -239,7 +252,8 @@
                }
                if (isTipStyle)
                {
                    Application.RunOnMainThread(() => {
                        Application.RunOnMainThread(() =>
                        {
                        var tip = new Tip()
                        {
                            Text = mes,
@@ -251,12 +265,44 @@
                }
                else
                {
                    Application.RunOnMainThread(() => {
                        Application.RunOnMainThread(() =>
                        {
                        new Alert("", mes, Language.StringByID(HDL_ON.StringId.Close)).Show();
                    });
                }
            }
            }
            catch { }
        }
        /// <summary>
        /// StartRefreshToken
        /// </summary>
        public void StartRefreshToken()
        {
            if (isGetingToken) return;
            new System.Threading.Thread(() =>
            {
                isGetingToken = true;
                try
                {
                    var success = new HttpServerRequest().RefreshToken();
                    if (success) {
                        Utlis.WriteLine("RefreshToken success");
                    }
                }
                catch
                {
                }
                finally
                {
                    isGetingToken = false;
                }
            })
            { IsBackground = true }.Start();
        }
    }
@@ -270,9 +316,14 @@
        /// </summary>
        public const string SUCCESS = "0";
        /// <summary>
        /// ä¼šè¯è¶…时,请更新token
        /// </summary>
        public const string TOKEN_EXPIRED = "10001";
        /// <summary>
        /// è´¦å·ä¸å­˜åœ¨çš„错误码
        /// </summary>
        public const string ACCOUNT_NOT_EXIST = "10010";
    }
}
HDL_ON/DAL/Server/NewAPI.cs
@@ -118,7 +118,10 @@
        /// å­è´¦å·ç®¡ç†å‘˜èŽ·å–ä¸»è´¦å·æŽˆæƒToken
        /// </summary>
        public const string API_POST_Child_GetMasterToken = "/home-wisdom/child/account/masterToken/get";
        /// <summary>
        /// ä¸‹è½½å­è´¦å·å¤´åƒ
        /// </summary>
        public const string API_POST_Child_DownloadHeadImage = "/home-wisdom/child/account/getHeadPortrait";
        #region æ•°æ®åˆ†äº«
        /// <summary>
        /// åˆ†äº«æŒ‡å®šæ–‡ä»¶ç»™æŒ‡å®šæˆå‘˜
@@ -243,39 +246,46 @@
        #endregion
        #region â–  pushserivce -- æŽ¨é€æœåŠ¡æŽ¥å£___________________________
        #region â–  PushSerivce -- æŽ¨é€æœåŠ¡æŽ¥å£___________________________
        /// <summary>
        /// æ·»åŠ æŽ¨é€æ¶ˆæ¯
        /// æ·»åŠ æŽ¨é€Token
        /// </summary>
        public const string API_POST_Pushserivce_Addpushinfo = "/pushserivce/V1/addpushinfo";
        public const string API_POST_PushSerivce_AddToken = "/smart-footstone/app/push-information/add";
        /// <summary>
        /// æ¸…空推送的消息记录
        /// åˆ é™¤æŽ¨é€Token
        /// </summary>
        public const string API_DELETE_Pushserivce_Clearmessagelist = "/pushserivce/V1/clearmessagelist/{pushId}";
        /// <summary>
        /// åˆ é™¤æŽ¨é€æ¶ˆæ¯
        /// </summary>
        public const string API_DELETE_Pushserivce_Deletepushinfo = "/pushserivce/V1/deletepushinfo/{pushId}";
        public const string API_POST_PushSerivce_DeleteToken = "/smart-footstone/app/push-information/delete";
        /// <summary>
        /// èŽ·å–æŽ¨é€æ¶ˆæ¯è®°å½•
        /// </summary>
        public const string API_GET_Pushserivce_Getpushmessagelist = "/pushserivce/V1/getpushmessagelist/{pushId}";
        public const string API_POST_PushSerivce_Getpushmessagelist = "/smart-footstone/app/message/list";
        /// <summary>
        /// æ¸…空推送的消息记录
        /// </summary>
        public const string API_POST_PushSerivce_Clearmessagelist = "/smart-footstone/app/message/clear";
        /// <summary>
        /// æ ‡è®°æ¶ˆæ¯å·²è¯»
        /// </summary>
        public const string API_PUT_Pushserivce_Markread = "/pushserivce/V1/markread/{pushId}";
        public const string API_POST_PushSerivce_Markread = "/smart-footstone/app/message/read";
        /// <summary>
        /// æ ‡è®°æ¶ˆæ¯å…¨éƒ¨å·²è¯»
        /// </summary>
        public const string API_POST_PushSerivce_ALLMarkread = "/smart-footstone/app/message/read_all";
        /// <summary>
        /// é€šè¿‡ä¸»é”®id删除一条推送记录
        /// </summary>
        public const string API_POST_PushSerivce_Deletepushinfo = "/smart-footstone/app/message/delete_by_id";
        #endregion
        #region â–   -- æ£€æµ‹æ›´æ–°æŽ¥å£___________________________
        /// <summary>
        /// æ£€æµ‹æ›´æ–°
        /// æ£€æµ‹æ›´æ–°,是否需要强制更新
        /// </summary>
        public const string API_POST_CheckAppVersion= "/speakerservices/BatchEdit_V2";
        public const string API_POST_CheckAppVersion= "/smart-footstone/app/checkAppVersion";
        /// <summary>
        /// æŸ¥è¯¢APP最新版本
        /// </summary>
        public const string API_POST_GetAppVersion = "/smart-footstone/app/getAppVersion";
        #endregion
HDL_ON/DAL/Server/NewApiRes.cs
@@ -944,16 +944,8 @@
    /// æŸ¥è¯¢æŸä½å®…某子账号的分享文件信息
    /// </summary>
    [System.Serializable]
    public class HomeShareFindAll
    public class HomeShareFindAll : ChildBaseObj
    {
        /// <summary>
        /// ä½å®…ID
        /// </summary>
        public string homeId;
        /// <summary>
        /// å­è´¦å·id
        /// </summary>
        public string childAccountId;
    }
@@ -1032,7 +1024,7 @@
        /// </summary>
        public string deviceName;
        /// <summary>
        ///
        /// Android、IOS、WinPhone
        /// </summary>
        public string deviceType;
        /// <summary>
@@ -1042,23 +1034,50 @@
        /// <summary>
        /// æŽ¨é€ID
        /// </summary>
        public string pushid;
        public string pushToken;
        /// <summary>
        /// 1是HDL_ON、2HDL_Zigbee
        /// è½¯ä»¶æ¥æºï¼ŒEvoyo、ON、ON_Plus
        /// </summary>
        //public string software = MainPage.RequestSource;
        public string software = "HDL_ON";
        public string software = SoftwareType.ON_Plus.ToString();
    }
    /// <summary>
    ///
    /// </summary>
    [System.Serializable]
    public class PushserivceIdObj
    public class PushIdObj
    {
        /// <summary>
        /// 
        /// </summary>
        public string id;
        public string pushId;
    }
    /// <summary>
    ///
    /// </summary>
    [System.Serializable]
    public class GetMessageListObj: PushIdObj
    {
        /// <summary>
        /// ä½å®…主键id
        /// 1、传空查询全部(需要根据用户域名查询) 2、传指定住宅ID查询指定记录 ï¼ˆéœ€è¦æ ¹æ®ä½å®…域名查询)
        /// </summary>
        public string homeId;
    }
    /// <summary>
    /// æ¶ˆæ¯è®°å½•Id
    /// </summary>
    [System.Serializable]
    public class PushMsgIdObj
    {
        /// <summary>
        /// æ¶ˆæ¯è®°å½•Id
        /// </summary>
        public string msgId;
    }
    ///// <summary>
    ///// æŽ¨é€æ¶ˆæ¯åˆ—表
@@ -1123,24 +1142,21 @@
    {
        /// <summary>
        /// æ‰‹æœºç±»åž‹
        ///
        /// 0是iOS
        /// 1是Android
        /// 2是Android æ–°çš„包名版本
        /// Android、IOS、WinPhone
        /// </summary>
        public int DeviceType = 0;
        public string DeviceType = PhoneDeviceType.Android.ToString();
        /// <summary>
        /// 
        /// </summary>
        public string RequestVersion = MainPage.VersionString;
        /// <summary>
        ///
        /// è½¯ä»¶æ¥æºï¼ŒEvoyo、ON、ON_Plus
        /// </summary>
        public string RequestSource = MainPage.ClientType;
        public string Software = SoftwareType.ON_Plus.ToString();
        /// <summary>
        /// è¯­è¨€
        /// </summary>
        public string languageType;
        public string LanguageType;
    }
    /// <summary>
@@ -1149,35 +1165,16 @@
    public class ForceUpdateInfo
    {
        ///// <summary>
        ///// éœ€è¦å¼ºåˆ¶æ›´æ–°
        ///// </summary>
        //public bool IsNeedForceUpdate;
        /// <summary>
        /// éœ€è¦å¼ºåˆ¶æ›´æ–°
        /// </summary>
        public bool IsNeedForceUpdate;
        /// <summary>
        /// å¼ºåˆ¶æ›´æ–°åŽŸå› 
        /// 1.提示更新的内容
        /// 2.强制更新原因
        /// 3.提示的通知内容
        /// </summary>
        public string ReasonStr;
        /// <summary>
        /// å¼ºåˆ¶æ›´æ–°åŽŸå› 
        /// </summary>
        public string ReasonStr_En;
        /// <summary>
        /// æ–°ç‰ˆæœ¬iOS App Store下载地址
        /// </summary>
        public string IosUrl;
        /// <summary>
        /// æ–°ç‰ˆæœ¬Android应用市场下载地址
        /// </summary>
        public string AndroidUrl;
        /// <summary>
        /// æ–°ç‰ˆæœ¬Android è‹±æ–‡åº”用市场下载地址 Google Play
        /// </summary>
        public string AndroidUrl_En;
        /// <summary>
        /// O ä¸éœ€è¦æ›´æ–°
        /// 1 æç¤ºæ›´æ–°
@@ -1185,14 +1182,36 @@
        /// 3 æç¤ºé€šçŸ¥å†…容
        /// </summary>
        public int UpdateType;
        /// <summary>
        /// å½“前新版本号
        /// </summary>
        public string NewVersion;
        /// <summary>
        /// å½“前新版本号
        /// </summary>
        public string NewVersionUrl;
    }
    /// <summary>
    /// æ£€æµ‹APP版本 å“åº”参数
    /// å¦‚果是iOS返回iOS的最新版本和Url下载地址
    /// å¦‚果是Android返回iOS的最新版本和Url下载地址
    /// </summary>
    public class APPVersion
    {
        /// <summary>
        /// å½“前最新的版本号
        /// </summary>
        public string NewVersion;
        /// <summary>
        /// å½“前最新版本下载地址
        /// </summary>
        public string NewVersionUrl;
    }
    #endregion
    #endregion
HDL_ON/Entity/OnAppConfig.cs
@@ -55,6 +55,14 @@
        /// ä¿¡æ¯æŽ¨é€æ ‡è®°
        /// </summary>
        public string PushDeviceToken;
        /// <summary>
        /// phoneName
        /// </summary>
        public string PhoneName;
        /// <summary>
        /// æ·»åŠ æŽ¨é€Token成功时返回的Id
        /// </summary>
        public string PushId;
        public string SetLanguage = "";
HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs
@@ -191,10 +191,10 @@
        /// ä½å®…区域名字
        /// </summary>
        public string homeRegionName;
        ///// <summary>
        ///// æ˜¯å¦ç»‘定网关
        ///// </summary>
        //public bool isBindGateway;
        /// <summary>
        /// æ˜¯å¦ç»‘定网关
        /// </summary>
        public bool isBindGateway;
        /// <summary>
        /// ä½å®…地址
        /// </summary>
HDL_ON/Entity/ResponseEntity/ResidenceMemberInfo.cs
@@ -80,15 +80,44 @@
        /// </summary>
        public string createTime;
        /// <summary>
        /// ç”¨æˆ·è´¦å·
        /// </summary>
        public string Account = "";
        /// <summary>
        /// ç”¨æˆ·åå­—
        /// </summary>
        public string UserName = "";
        /// <summary>
        ///
        /// </summary>
        public string childAccountEmail;
        /// <summary>
        ///
        /// </summary>
        public string childAccountPhone;
        /// <summary>
        /// ç”¨æˆ·è´¦å·
        /// ä¼˜å…ˆæ˜¾ç¤ºæ‰‹æœºå·ï¼Œå¦‚果手机号为空则显示邮箱地址
        /// </summary>
        public string Account
        {
            get
            {
                if (!string.IsNullOrEmpty(childAccountPhone))
                {
                    return childAccountPhone;
                }
                else
                {
                    if (!string.IsNullOrEmpty(childAccountEmail))
                    {
                        return childAccountEmail;
                    }
                    else
                    {
                        return "";
                    }
    }
            }
        }
    }
    public class ShareData
    {
HDL_ON/Entity/UserInfo.cs
@@ -152,7 +152,7 @@
        /// <summary>
        /// UserType B端账号 C端账号 
        /// </summary>
        public string userType = "C";
        public string userType = "USER_C";
       
        /// <summary>
HDL_ON/HDL_ON.projitems
@@ -169,6 +169,8 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Scene\SetSceneLocationPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\AutomationMenuPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\GetSupportPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)DriverLayer\Control_TcpClient.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)DriverLayer\Control_TcpServer.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Panel\PanelPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\SearchDevice\SearchDevicePage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\SearchDevice\VoicePanelScenePage.cs" />
@@ -184,9 +186,6 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AccountBindInfo\NewBindAccountPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AccountBindInfo\NewBindVerificationCodePage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\HDLCommon.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\LineView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\ConfirmDialog.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\WebViewDialog.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\Constant.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\TextButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI1-Login\SelectServerDialog.cs" />
@@ -200,6 +199,23 @@
    <Compile Include="$(MSBuildThisFileDirectory)DAL\DriverLayer\UdpSocket.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)DAL\DriverLayer\A_Protocol_Common.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)DAL\Mqtt\MqttClient.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\MyQRCodePage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\ListCellView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\UpdateTipDialog.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\MyServerInfoPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AboutOn\AboutOnPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AboutOn\FunctionIntroductionPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AboutOn\ComplaintsPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\EmptyTipView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\LineView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\ConfirmDialog.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\WebViewDialog.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\GetSupport\FAQHelpPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\ListIconCellView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\GetSupport\QuestionListPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\GetSupport\GetSupportPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\RoomListManage\Transfer\TransferConfirmPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\ConfirmButton.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)UI\" />
@@ -227,5 +243,8 @@
    <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI0-Public\Widget\" />
    <Folder Include="$(MSBuildThisFileDirectory)DAL\DriverLayer\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AboutOn\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\GetSupport\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\RoomListManage\Transfer\" />
  </ItemGroup>
</Project>
HDL_ON/UI/MainPage.cs
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using HDL_ON.DAL;
using HDL_ON.UI;
@@ -27,10 +27,11 @@
        /// ç‰ˆæœ¬å·
        /// </summary>
        public static string VersionString = "1.0.0924";
        /// <summary>
        /// å®¢æˆ·ç«¯ç±»åž‹
        /// </summary>
        public static string ClientType = APIClientType.HDL_ON_PRO.ToString();
        ///// <summary>
        ///// å®¢æˆ·ç«¯ç±»åž‹
        ///// </summary>
        //public static string ClientType = APIClientType.HDL_ON_PRO.ToString();
        /// <summary>
        /// 
        /// </summary>
@@ -93,18 +94,21 @@
                }
                else
                {
                    new System.Threading.Thread(() =>
                    {
                        var pm = new DAL.Server.HttpServerRequest();
                        pm.RefreshToken();//刷新Token
                        pm.GetHomePager();//刷新住宅信息
                    })
                    { IsBackground = true }.Start();
                    new System.Threading.Thread(() =>
                    {
                        var pm =new DAL.Server.HttpServerRequest();
                        pm.GetUserInfo();//刷新个人信息
                    })
                    { IsBackground = true }.Start();
                    new System.Threading.Thread(() =>
                    {
                        var pm = new DAL.Server.HttpServerRequest();
                        pm.GetHomePager();//刷新住宅信息
                    })
                    { IsBackground = true }.Start();
                    GoUserPage();
                    //启动密码验证
                    new AppUnlockPage().LoadPage();
HDL_ON/UI/UI0-Public/LineView.cs
File was deleted
HDL_ON/UI/UI0-Public/OperationSuccessPromptPage.cs
@@ -68,8 +68,8 @@
                Y = Application.GetRealHeight(401),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                BackgroundColor = CSS_Color.MainColor,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainBackgroundColor,
HDL_ON/UI/UI0-Public/TopViewDiv.cs
@@ -101,7 +101,7 @@
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(30),
                Width = Application.GetRealWidth(150),
                Width = Application.GetRealWidth(270),
                Height = Application.GetRealHeight(25),
                TextAlignment = TextAlignment.Center,
                TextSize = CSS_FontSize.HeadlineFontSize,
HDL_ON/UI/UI0-Public/Widget/ConfirmButton.cs
New file
@@ -0,0 +1,28 @@
using System;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    /// <summary>
    /// é€šç”¨ç¡®è®¤æŒ‰é’®
    /// </summary>
    public class ConfirmButton : Button
    {
        public ConfirmButton()
        {
            Gravity = Gravity.CenterHorizontal;
            Width = Application.GetRealWidth(220);
            Height = Application.GetRealWidth(44);
            BackgroundColor = CSS_Color.MainColor;
            TextAlignment = TextAlignment.Center;
            TextColor = CSS_Color.MainBackgroundColor;
            TextSize = CSS_FontSize.SubheadingFontSize;
            IsBold = true;
            Radius = (uint)Application.GetRealWidth(22);
            BorderColor = 0x00000000;
            BorderWidth = 0;
        }
    }
}
HDL_ON/UI/UI0-Public/Widget/ConfirmDialog.cs
File was renamed from HDL_ON/UI/UI0-Public/ConfirmDialog.cs
@@ -6,7 +6,7 @@
{
    /// <summary>
    /// é€šç”¨äºŒæ¬¡ç¡®è®¤ç•Œé¢
    /// å¯ä»¥è‡ªå®šä¹‰æŒ‰é’®æ–‡å­—
    /// å¯ä»¥è‡ªå®šä¹‰æŒ‰é’®æ–‡å­—、提示内容支持多行显示
    /// </summary>
    public class ConfirmDialog : Dialog
    {
@@ -21,15 +21,14 @@
        /// <summary>
        /// åˆå§‹åŒ–Dialog
        /// </summary>
        /// <param name="titleId"></param>
        /// <param name="msgId"></param>
        /// <param name="titleStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        void ShowDialogBase(int titleId, int msgId, Action okAction, Action cancelAction, int cancelID = StringId.Cancel, int confirmID = StringId.Confirm)
        void ShowDialogBase(string titleStr, string msgStr, Action okAction, Action cancelAction, int cancelID = StringId.Cancel, int confirmID = StringId.Confirm)
        {
            this.BackgroundColor = CSS_Color.DialogTransparentColor1;
            FrameLayout contentView = new FrameLayout()
@@ -46,26 +45,28 @@
            Button btnTitle = new Button()
            {
                Y = Application.GetRealHeight(16),
                Height = Application.GetRealHeight(30),
                Y = Application.GetRealHeight(20),
                Height = Application.GetRealHeight(22),
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.Center,
                IsBold = true,
                TextID = titleId,
                Text = titleStr,
            };
            contentView.AddChidren(btnTitle);
            //提示内容按钮
            Button btnMsg = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Height = Application.GetRealHeight(25),
                Y = btnTitle.Bottom,
                Width = Application.GetRealHeight(200),
                Y = btnTitle.Bottom + Application.GetRealHeight(4),
                X = Application.GetRealWidth(6),
                Height = Application.GetRealHeight(46),
                Width = Application.GetRealWidth(258),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                TextID = msgId,
                Text = msgStr,
                IsMoreLines = true,
            };
            contentView.AddChidren(btnMsg);
@@ -131,7 +132,7 @@
        /// <param name="callBackAction"></param>
        public void ShowDialog(int titleId, int msgId, Action okAction, Action cancelAction = null)
        {
            this.ShowDialogBase(titleId, msgId, okAction, cancelAction);
            this.ShowDialogBase(Language.StringByID(titleId), Language.StringByID(msgId), okAction, cancelAction);
        }
        /// <summary>
@@ -146,7 +147,33 @@
        /// <param name="confirmID"></param>
        public void ShowDialog(int titleId, int msgId, Action okAction, Action cancelAction, int cancelID, int confirmID)
        {
            this.ShowDialogBase(titleId, msgId, okAction, cancelAction, cancelID, confirmID);
            this.ShowDialogBase(Language.StringByID(titleId), Language.StringByID(msgId), okAction, cancelAction, cancelID, confirmID);
        }
        /// <summary>
        /// åŠ è½½æç¤ºDialog
        /// </summary>
        /// <param name="titleId"></param>
        /// <param name="msgId"></param>
        /// <param name="callBackAction"></param>
        public void ShowDialog(string titleStr, string msgStr, Action okAction, Action cancelAction = null)
        {
            this.ShowDialogBase(titleStr, msgStr, okAction, cancelAction);
        }
        /// <summary>
        /// åŠ è½½æç¤ºDialog
        /// å¯ä»¥è‡ªå®šä¹‰æŒ‰é’®æ–‡å­—
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        public void ShowDialog(string titleStr, string msgStr, Action okAction, Action cancelAction, int cancelID, int confirmID)
        {
            this.ShowDialogBase(titleStr, msgStr, okAction, cancelAction, cancelID, confirmID);
        }
    }
HDL_ON/UI/UI0-Public/Widget/EmptyTipView.cs
New file
@@ -0,0 +1,55 @@
using System;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    /// <summary>
    /// é€šç”¨æç¤ºView--内容为空
    /// ç©ºç©ºå¦‚也
    /// </summary>
    public class EmptyTipView : FrameLayout
    {
        /// <summary>
        /// æç¤ºæ–‡å­—
        /// </summary>
        public Button BtnTipNotText;
        /// <summary>
        /// æç¤ºå›¾ç‰‡
        /// </summary>
        public Button BtnTipNot;
        /// <summary>
        ///
        /// </summary>
        public EmptyTipView()
        {
            int tipHeight = Application.GetRealWidth(180);
            this.Height = tipHeight + Application.GetRealHeight(17);
            BtnTipNot = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = tipHeight,
                Height = tipHeight,
                UnSelectedImagePath = "TipNot.png",
            };
            this.AddChidren(BtnTipNot);
            //空空如也
            Button btnTipNotText = new Button()
            {
                Y = tipHeight,
                Height = Application.GetRealHeight(17),
                TextID = StringId.ContentIsEmpty,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
            };
            this.AddChidren(btnTipNotText);
        }
    }
}
HDL_ON/UI/UI0-Public/Widget/LineView.cs
New file
@@ -0,0 +1,34 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
namespace HDL_ON.UI
{
    /// <summary>
    /// é€šç”¨LineView
    /// åˆ†å‰²çº¿View
    /// </summary>
    public class LineView : FrameLayout
    {
        //public LineView()
        //{
        //    X = Application.GetRealWidth(16);
        //    Height = Application.GetRealHeight(1);
        //    Width = Application.GetRealWidth(343);
        //    BackgroundColor = CSS_Color.DividingLineColor;
        //}
        /// <summary>
        ///
        /// </summary>
        /// <param name="parentHeight"></param>
        public LineView(int parentHeight)
        {
            X = Application.GetRealWidth(16);
            Height = Application.GetRealHeight(1);
            Width = Application.GetRealWidth(343);
            BackgroundColor = CSS_Color.DividingLineColor;
            Y = parentHeight - Height;
        }
    }
}
HDL_ON/UI/UI0-Public/Widget/ListCellView.cs
New file
@@ -0,0 +1,126 @@
using System;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    /// <summary>
    /// é€šç”¨ListCellView
    /// æ”¯æŒå®šä¹‰ ä¸»æ ‡é¢˜ã€å‰¯æ ‡é¢˜ã€go图标、下划线、点击事件
    /// </summary>
    public class ListCellView : FrameLayout
    {
        /// <summary>
        /// æ ‡é¢˜
        /// </summary>
        public Button BtnTilte;
        /// <summary>
        /// å‰¯æ ‡é¢˜
        /// </summary>
        public Button BtnSubtitle;
        /// <summary>
        /// ç®­å¤´å›¾æ ‡
        /// </summary>
        public Button BtnGo;
        /// <summary>
        /// åˆ†å‰²çº¿
        /// </summary>
        public LineView LineView;
        /// <summary>
        /// ç‚¹å‡»è§¦å‘对事件
        /// </summary>
        public Action GoAction;
        /// <summary>
        /// ListCellView é»˜è®¤
        /// </summary>
        public ListCellView()
        {
            ShowView();
        }
        /// <summary>
        /// ListCellView æŒ‡å®šå‚æ•°
        /// </summary>
        /// <param name="tilteText"></param>
        /// <param name="subtitleText"></param>
        /// <param name="action"></param>
        /// <param name="isShowImageBtn"></param>
        public ListCellView(string tilteText, string subtitleText, Action action, bool isShowImageBtn = true)
        {
            ShowView(tilteText, subtitleText, action, isShowImageBtn);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="tilteText"></param>
        /// <param name="subtitleText"></param>
        /// <param name="action"></param>
        /// <param name="isShowImageBtn"></param>
        void ShowView(string tilteText = "", string subtitleText = "", Action action = null, bool isShowImageBtn = true)
        {
            this.BackgroundColor = CSS_Color.MainBackgroundColor;
            this.Height = Application.GetRealHeight(50);
            this.GoAction = action;
            /// <summary>
            /// æ ‡é¢˜
            /// </summary>
            BtnTilte = new Button()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(120),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                Text = tilteText,
            };
            this.AddChidren(BtnTilte);
            /// <summary>
            /// å‰¯æ ‡é¢˜
            /// </summary>
            BtnSubtitle = new Button()
            {
                X = Application.GetRealWidth(100),
                Width = Application.GetRealWidth(230),
                TextAlignment = TextAlignment.CenterRight,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.TextFontSize,
                Text = subtitleText,
            };
            this.AddChidren(BtnSubtitle);
            /// <summary>
            /// å‰è¿›å›¾æ ‡
            /// </summary>
            BtnGo = new Button()
            {
                X = Application.GetRealWidth(339),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/Right.png",
            };
            if (isShowImageBtn)
            {
                this.AddChidren(BtnGo);
            }
            LineView = new LineView(this.Height);
            this.AddChidren(LineView);
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                GoAction?.Invoke();
            };
            BtnTilte.MouseUpEventHandler = eventHandler;
            BtnSubtitle.MouseUpEventHandler = eventHandler;
            BtnGo.MouseUpEventHandler = eventHandler;
        }
    }
}
HDL_ON/UI/UI0-Public/Widget/ListIconCellView.cs
New file
@@ -0,0 +1,100 @@
using System;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    /// <summary>
    /// é€šç”¨ListIconCellView
    /// æ”¯æŒå®šä¹‰ å›¾æ ‡ã€ä¸»æ ‡é¢˜ã€go图标、下划线、点击事件
    /// </summary>
    public class ListIconCellView : FrameLayout
    {
        /// <summary>
        /// å›¾æ ‡æŒ‰é’®
        /// </summary>
        public Button BtnIcon;
        /// <summary>
        /// æ ‡é¢˜
        /// </summary>
        public Button BtnTilte;
        /// <summary>
        /// ç®­å¤´å›¾æ ‡æŒ‰é’®
        /// </summary>
        public Button BtnGo;
        /// <summary>
        /// åˆ†å‰²çº¿
        /// </summary>
        public LineView LineView;
        /// <summary>
        /// ç‚¹å‡»è§¦å‘对事件
        /// </summary>
        public Action GoAction;
        /// <summary>
        ///
        /// </summary>
        public ListIconCellView()
        {
            ShowView();
        }
        /// <summary>
        ///
        /// </summary>
        void ShowView()
        {
            this.Height = Application.GetRealHeight(50);
            this.BackgroundColor = CSS_Color.MainBackgroundColor;
            BtnIcon = new Button()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(24),
                Height = Application.GetRealWidth(24),
                Gravity = Gravity.CenterVertical,
            };
            this.AddChidren(BtnIcon);
            /// <summary>
            /// æ ‡é¢˜
            /// </summary>
            BtnTilte = new Button()
            {
                X = Application.GetRealWidth(52),
                Width = Application.GetRealWidth(278),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
            };
            this.AddChidren(BtnTilte);
            /// <summary>
            /// å‰è¿›å›¾æ ‡
            /// </summary>
            BtnGo = new Button()
            {
                X = Application.GetRealWidth(339),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/Right.png",
            };
            this.AddChidren(BtnGo);
            LineView = new LineView(this.Height);
            this.AddChidren(LineView);
            //LineView.Y = this.Height - LineView.Height;
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                GoAction?.Invoke();
            };
            BtnTilte.MouseUpEventHandler = eventHandler;
            BtnGo.MouseUpEventHandler = eventHandler;
        }
    }
}
HDL_ON/UI/UI0-Public/Widget/TextButton.cs
@@ -1,7 +1,9 @@
using System;
using Shared;
#if __IOS__
using UIKit;
using Foundation;
#endif
namespace HDL_ON.UI
@@ -9,6 +11,7 @@
    /// <summary>
    /// TextButton
    /// è§£å†³iOS æ–‡æœ¬åˆ°è¾¹æ¡†æœ‰è¾¹è·é—®é¢˜
    ///
    /// </summary>
    public class TextButton : Button
    {
@@ -20,5 +23,93 @@
#endif
        }
        int _lineSpacing;
        /// <summary>
        /// è®¾ç½®è¡Œé—´è·
        /// </summary>
        public int LineSpacing
        {
            set
            {
                _lineSpacing = value;
                SetButtonLineSpacing(_lineSpacing);
    }
}
#if __IOS__
        /// <summary>
        /// æŒ‰é’®è®¾ç½®è¡Œè·æ–¹æ³•
        /// </summary>
        /// <param name="spacing"></param>
        void SetButtonLineSpacing(int spacing)
        {
            UIStringAttributes stringAttributes = new UIStringAttributes
            {
                Font = (this.uiView as MyButton).TitleLabel.Font,
                ForegroundColor = UIColor.Black,
                ParagraphStyle = new NSMutableParagraphStyle() { LineSpacing = spacing }
            };
            var AttributedText = new NSMutableAttributedString(Text);
            AttributedText.AddAttributes(stringAttributes, new NSRange(0, Text.Length));
            (this.uiView as MyButton).TitleLabel.AttributedText = AttributedText;
        }
        /// <summary>
        /// æ˜¾ç¤ºå½“前文字需要几行
        /// </summary>
        /// <returns></returns>
        int GetNeedLinesWithWidth()
        {
            return 0;
        }
        /**
// @param width ç»™å®šä¸€ä¸ªå®½åº¦
// @return è¿”回行数
// */
//- (NSInteger) needLinesWithWidth:(CGFloat) width
//        {
//            //创建一个labe
//            UILabel * label = [[UILabel alloc]
//            init];
//            //font和当前label保持一致
//            label.font = self.font;
//            NSString* text = self.text;
//            NSInteger sum = 0;
//            //总行数受换行符影响,所以这里计算总行数,需要用换行符分隔这段文字,然后计算每段文字的行数,相加即是总行数。
//            NSArray* splitText = [text componentsSeparatedByString: @"\n"];
//    for (NSString* sText in splitText)
//            {
//                label.text = sText;
//                //获取这段文字一行需要的size
//                CGSize textSize = [label systemLayoutSizeFittingSize: CGSizeZero];
//                //size.width/所需要的width å‘上取整就是这段文字占的行数
//                NSInteger lines = ceilf(textSize.width / width);
//                //当是0的时候,说明这是换行,需要按一行算。
//                lines = lines == 0 ? 1 : lines;
//                sum += lines;
//            }
//            return sum;
//            }
            //#elif __Android__
#else
        /// <summary>
        /// æŒ‰é’®è®¾ç½®è¡Œè·æ–¹æ³•
        /// </summary>
        /// <param name="spacing"></param>
        void SetButtonLineSpacing(int spacing)
        {
           (this.AndroidView as Android.Widget.Button).SetLineSpacing(spacing, 1);
        }
#endif
        }
}
HDL_ON/UI/UI0-Public/Widget/UpdateTipDialog.cs
New file
@@ -0,0 +1,345 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
namespace HDL_ON.UI
{
    /// <summary>
    /// UpdateTipDialog
    /// </summary>
    public class UpdateTipDialog : Dialog
    {
        public UpdateTipDialog()
        {
        }
        /// <summary>
        /// åˆå§‹åŒ–Dialog
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="tipStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        void ShowDialogBase(string titleStr, string tipStr, string msgStr, Action okAction, Action cancelAction, bool isForceUpdate, int cancelID = StringId.Ignore, int confirmID = StringId.Update)
        {
            this.BackgroundColor = CSS_Color.DialogTransparentColor1;
            FrameLayout contentView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetMinRealAverage(223),
                Width = Application.GetRealWidth(288),
                Height = Application.GetRealHeight(302),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                BorderWidth = 0,
                BorderColor = 0x00000000,
            };
            this.AddChidren(contentView);
            Button btnTitle = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetMinRealAverage(95),
                Height = Application.GetMinRealAverage(30),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
                Text = titleStr
            };
            contentView.AddChidren(btnTitle);
            Button btnTip = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = btnTitle.Bottom,
                Height = Application.GetMinRealAverage(17),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = tipStr
            };
            contentView.AddChidren(btnTip);
            int btnMesY = btnTip.Bottom + Application.GetMinRealAverage(5);
            int lineY = Application.GetRealHeight(258);
            VerticalScrolViewLayout mesView = new VerticalScrolViewLayout()
            {
                X = Application.GetRealWidth(16),
                Y = btnMesY,
                Width = contentView.Width - Application.GetRealWidth(32),
                Height = lineY - btnMesY - Application.GetMinRealAverage(5),
            };
            contentView.AddChidren(mesView);
            Button btnMes = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = mesView.Width,
                Height = mesView.Height,
                TextAlignment = TextAlignment.TopLeft,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.TextFontSize,
                IsMoreLines = true,
                Text = msgStr,
                //BackgroundColor = CSS_Color.AuxiliaryColor2
            };
            mesView.AddChidren(btnMes);
            Button btnLine = new Button()
            {
                Y = lineY,
                Height = Application.GetRealHeight(1),
                Width = contentView.Width,
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            contentView.AddChidren(btnLine);
            if (!isForceUpdate)
            {
                int Width144 = Application.GetRealWidth(144);
                Button btnCancel = new Button()
                {
                    Y = btnLine.Bottom,
                    Width = Width144,
                    Height = Application.GetRealHeight(44),
                    TextAlignment = TextAlignment.Center,
                    TextColor = CSS_Color.TextualColor,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextID = cancelID,
                };
                contentView.AddChidren(btnCancel);
                Button btnConfirm = new Button()
                {
                    X = contentView.Width - Width144,
                    Y = btnLine.Y,
                    Width = Width144,
                    Height = Application.GetRealHeight(44),
                    TextAlignment = TextAlignment.Center,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextColor = CSS_Color.MainBackgroundColor,
                    BackgroundColor = CSS_Color.MainColor,
                    TextID = confirmID,
                };
                contentView.AddChidren(btnConfirm);
                //例:右下圆角 å¤§å°ä¸º50
                int mRectCornerID = HDLUtils.RectCornerBottomRight;
                btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
                btnCancel.MouseUpEventHandler += (sender, e) =>
                {
                    this.Close();
                    cancelAction?.Invoke();
                };
                btnConfirm.MouseUpEventHandler += (sender, e) =>
                {
                    this.Close();
                    okAction?.Invoke();
                };
            }
            else
            {
                Button btnConfirm = new Button()
                {
                    Y = btnLine.Y,
                    Width = contentView.Width,
                    Height = Application.GetRealHeight(44),
                    TextAlignment = TextAlignment.Center,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextColor = CSS_Color.MainBackgroundColor,
                    BackgroundColor = CSS_Color.MainColor,
                    TextID = confirmID,
                };
                contentView.AddChidren(btnConfirm);
                //例:右下圆角 å¤§å°ä¸º50
                int mRectCornerID = HDLUtils.RectCornerBottomRight | HDLUtils.RectCornerBottomLeft;
                btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
                btnConfirm.MouseUpEventHandler += (sender, e) =>
                {
                    //dialog禁止关闭
                    okAction?.Invoke();
                };
            }
            Button btnHeadImage = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetMinRealAverage(152),
                Width = Application.GetMinRealAverage(160),
                Height = Application.GetMinRealAverage(160),
                BorderColor = 0x00000000,
                BorderWidth = 0,
                UnSelectedImagePath = "Public/Dialog/DialogTipTitleIcon_3.png",
            };
            this.AddChidren(btnHeadImage);
            this.Show();
        }
        /// <summary>
        /// åŠ è½½æç¤ºæ›´æ–°Dialog
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="tipStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        public void ShowUpdateDialog(string titleStr, string tipStr, string msgStr, Action okAction, Action cancelAction = null)
        {
            this.ShowDialogBase(titleStr, tipStr, msgStr, okAction, cancelAction, false);
        }
        /// <summary>
        /// åŠ è½½å¼ºåˆ¶æ›´æ–°Dialog
        /// Dialog不关闭
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="tipStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        public void ShowForcedUpdateDialog(string titleStr, string tipStr, string msgStr, Action okAction)
        {
            this.ShowDialogBase(titleStr, tipStr, msgStr, okAction, null, true);
        }
        /// <summary>
        /// åˆå§‹åŒ–Dialog
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="tipStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        void ShowTipDialogBase(string titleStr, string msgStr, Action okAction, int confirmID = StringId.Close)
        {
            this.BackgroundColor = CSS_Color.DialogTransparentColor1;
            FrameLayout contentView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetMinRealAverage(223),
                Width = Application.GetRealWidth(288),
                Height = Application.GetRealHeight(302),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                BorderWidth = 0,
                BorderColor = 0x00000000,
            };
            this.AddChidren(contentView);
            Button btnTitle = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetMinRealAverage(95),
                Height = Application.GetMinRealAverage(30),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
                Text = titleStr
            };
            contentView.AddChidren(btnTitle);
            int btnMesY = btnTitle.Bottom + Application.GetMinRealAverage(5);
            int lineY = Application.GetRealHeight(258);
            VerticalScrolViewLayout mesView = new VerticalScrolViewLayout()
            {
                X = Application.GetRealWidth(16),
                Y = btnMesY,
                Width = contentView.Width - Application.GetRealWidth(32),
                Height = lineY - btnMesY - Application.GetMinRealAverage(5),
            };
            contentView.AddChidren(mesView);
            Button btnMes = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = mesView.Width,
                Height = mesView.Height,
                TextAlignment = TextAlignment.TopLeft,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.TextFontSize,
                IsMoreLines = true,
                Text = msgStr,
                BackgroundColor = CSS_Color.AuxiliaryColor2
            };
            mesView.AddChidren(btnMes);
            Button btnLine = new Button()
            {
                Y = lineY,
                Height = Application.GetRealHeight(1),
                Width = contentView.Width,
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            contentView.AddChidren(btnLine);
            Button btnConfirm = new Button()
            {
                Y = btnLine.Y,
                Width = contentView.Width,
                Height = Application.GetRealHeight(44),
                TextAlignment = TextAlignment.Center,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.MainBackgroundColor,
                BackgroundColor = CSS_Color.MainColor,
                TextID = confirmID,
            };
            contentView.AddChidren(btnConfirm);
            //例:右下圆角 å¤§å°ä¸º50
            int mRectCornerID = HDLUtils.RectCornerBottomRight | HDLUtils.RectCornerBottomLeft;
            btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
            btnConfirm.MouseUpEventHandler += (sender, e) =>
            {
                this.Close();
                okAction?.Invoke();
            };
            Button btnHeadImage = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetMinRealAverage(152),
                Width = Application.GetMinRealAverage(160),
                Height = Application.GetMinRealAverage(160),
                BorderColor = 0x00000000,
                BorderWidth = 0,
                UnSelectedImagePath = "Public/Dialog/DialogTipTitleIcon_3.png",
            };
            this.AddChidren(btnHeadImage);
            this.Show();
        }
        /// <summary>
        /// åŠ è½½æç¤ºé€šçŸ¥Dialog
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="tipStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        public void ShowTipDialog(string titleStr, string msgStr, Action okAction)
        {
            this.ShowTipDialogBase(titleStr, msgStr, okAction);
        }
    }
}
HDL_ON/UI/UI0-Public/Widget/WebViewDialog.cs
File was renamed from HDL_ON/UI/UI0-Public/WebViewDialog.cs
@@ -10,21 +10,27 @@
    /// </summary>
    public class WebViewDialog : Dialog
    {
        /// <summary>
        /// bodyView
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// WebViewDialog
        /// </summary>
        public WebViewDialog()
        {
            bodyView = new FrameLayout();
        }
        /// <summary>
        ///
        /// åŠ è½½é¡µé¢
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="url"></param>
        public void LoadPage(string titleStr, string url)
        {
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
            this.AddChidren(bodyView);
            new TopViewDiv(this, bodyView, titleStr).LoadTopView();
@@ -32,8 +38,11 @@
            var webView = new WebView() {
                Y = Application.GetRealHeight(64),
                Height = bodyView.Height - Application.GetRealHeight(64),
                X = Application.GetRealWidth(16),
                Width = bodyView.Width - Application.GetRealWidth(32)
            };
            bodyView.AddChidren(webView);
            //加载网址
            webView.LoadRequest(url);
            this.Show();
HDL_ON/UI/UI1-Login/ForgetPasswordPage.cs
@@ -499,8 +499,8 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(421),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextID = StringId.ConfirmReset,
HDL_ON/UI/UI1-Login/ForgetPasswordPageBLL.cs
@@ -477,7 +477,7 @@
                Width = Application.GetRealWidth(288),
                Height = Application.GetRealHeight(206),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                Radius = (uint)Application.GetRealHeight(12),
                BorderWidth = 0,
                BorderColor = 0x00000000,
            };
@@ -526,7 +526,7 @@
                Y = Application.GetRealHeight(150),
                Width = Application.GetRealWidth(84),
                Height = Application.GetRealWidth(84),
                Radius = (uint)Application.GetRealWidth(42),
                Radius = (uint)Application.GetRealHeight(42),
                BorderColor = 0x00000000,
                BorderWidth = 0,
                UnSelectedImagePath = "LoginIcon/2.png",
HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -448,8 +448,8 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(403),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextID = StringId.Login,
@@ -611,8 +611,8 @@
        /// <param name="isOpenPrivacyPolicy">是否隐私政策</param>
        private void OpenWebViewPage(bool isOpenPrivacyPolicy)
        {
            string url = isAgreePrivacyPolicy ? Constant.URL_PrivacyPolicy : Constant.URL_UserAgreement;
            string titleStr = isAgreePrivacyPolicy ? Language.StringByID(StringId.PrivacyPolicy) : Language.StringByID(StringId.UserAgreement);
            string url = isOpenPrivacyPolicy ? Constant.URL_PRIVACYPOLICY : Constant.URL_USERAGREEMENT;
            string titleStr = isOpenPrivacyPolicy ? Language.StringByID(StringId.PrivacyPolicy) : Language.StringByID(StringId.UserAgreement);
            new WebViewDialog().LoadPage(titleStr, url);
        }
HDL_ON/UI/UI1-Login/LoginPageBLL.cs
@@ -1,4 +1,4 @@
using System;
using System;
using System.Text.RegularExpressions;
using System.Threading;
using System.Collections.Generic;
@@ -93,18 +93,35 @@
                        if (result.Code != StateCode.SUCCESS)
                        {
                            IMessageCommon.Current.ShowErrorInfoAlter(result.Code);
                            ShowBtnAccountViewBottomLineError();
                            return;
                        }
                        else
                        {
                            //检测当前配置域名是否一致,不一致则替换
                            CheckAndSetUserRequestHost(result);
                            //
                            //2.1请求获取验证码
                            var resultObj = pm.VerificationCodeSend(VerifyType.VERIFY_LOGIN, account, true, phoneZoneCode);
                            if (resultObj.Code != StateCode.SUCCESS)
                            {
                                //2.2请求获取验证码失败
                                Application.RunOnMainThread(() =>
                                {
                                    btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                                    btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                                });
                                // æç¤ºé”™è¯¯
                                IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
                            }
                            else
                            {
                            Application.RunOnMainThread(() =>
                            {
                                btnGetVerificationCode.IsSelected = false;
                                btnGetVerificationCode.TextColor = CSS_Color.PromptingColor1;
                            });
                            new Thread(() =>
                            {
                                while (time > 0)
@@ -123,101 +140,12 @@
                                });
                            })
                            { IsBackground = true }.Start();
                            //2.1请求获取验证码
                            var resultObj = pm.VerificationCodeSend(VerifyType.VERIFY_LOGIN, account, true, phoneZoneCode);
                            if (resultObj.Code != StateCode.SUCCESS)
                            {
                                //2.2请求获取验证码失败
                                Application.RunOnMainThread(() =>
                                {
                                    btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                                    btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                                });
                                // æç¤ºé”™è¯¯
                                IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
                            }
                        }
                    })
                    { IsBackground = true }.Start();
                    //    btnGetVerificationCode.IsSelected = false ;
                    //    btnGetVerificationCode.TextColor = CSS_Color.PromptingColor1;
                    //    int time = 60;
                    //    new Thread(() =>
                    //    {
                    //        while (time > 0)
                    //        {
                    //            time--;
                    //            Application.RunOnMainThread(() =>
                    //            {
                    //                btnGetVerificationCode.Text = time.ToString() + "s";
                    //            });
                    //            Thread.Sleep(1000);
                    //        }
                    //        Application.RunOnMainThread(() =>
                    //        {
                    //            btnGetVerificationCode.IsSelected = true;
                    //            btnGetVerificationCode.TextID = StringId.GetVerificationCode;
                    //        });
                    //    })
                    //    { IsBackground = true }.Start();
                    //    new Thread(() =>
                    //    {
                    //        //获取验证码
                    //        var result = pm.GetLoginVerCode(phoneNumber);
                    //        if (result.StateCode.ToUpper() == StateCode.SUCCESS_CODE)
                    //        {
                    //        }
                    //        //登录失败
                    //        else
                    //        {
                    //            string tipStr = "Sever erorr";
                    //            switch (result.StateCode.ToUpper())
                    //            {
                    //                case "USERNAMEORPWDERROR":
                    //                    tipStr = Language.StringByID(StringId.LoginFailed_AccountOrPasswordError);
                    //                    Application.RunOnMainThread(() =>
                    //                    {
                    //                        btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                    //                        btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                    //                    });
                    //                    break;
                    //                case "ACCOUNTNOEXISTS":
                    //                    tipStr = Language.StringByID(StringId.ACCOUNTNOEXISTS);
                    //                    Application.RunOnMainThread(() =>
                    //                    {
                    //                        btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                    //                        btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                    //                    });
                    //                    break;
                    //                case "SENDFAIL":
                    //                    tipStr = Language.StringByID(StringId.FailedToSendVerificationCode);
                    //                    Application.RunOnMainThread(() =>
                    //                    {
                    //                        btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                    //                        btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                    //                    });
                    //                    break;
                    //                case "Self:Net_Error":
                    //                    tipStr = Language.StringByID(StringId.NetworkAnomaly);
                    //                    break;
                    //            }
                    //            Application.RunOnMainThread(() =>
                    //            {
                    //                //提示原因
                    //                var tip = new Tip()
                    //                {
                    //                    Text = tipStr,
                    //                    CloseTime = 1,
                    //                    Direction = AMPopTipDirection.None
                    //                };
                    //                tip.Show(bodyView);
                    //            });
                    //        }
                    //    })
                    //    { IsBackground = true }.Start();
                }
            };
        }
@@ -610,6 +538,7 @@
                        if (result.Code != StateCode.SUCCESS)
                        {
                            IMessageCommon.Current.ShowErrorInfoAlter(result.Code);
                            ShowBtnAccountViewBottomLineError();
                            return;
                        }
                        else
@@ -1011,54 +940,30 @@
            //登录失败
            else
            {
                //2020-11-13 å¾…修改
                string tipStr = "Sever erorr";
                switch (loginResult.Code)
                {
                    case "ValidCodeAndPhoneNoEqual":
                        tipStr = Language.StringByID(StringId.VerificationCodeError);
                        Application.RunOnMainThread(() =>
                        {
                            btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                        });
                        break;
                    case "USERNAMEORPWDERROR":
                        tipStr = Language.StringByID(StringId.LoginFailed_AccountOrPasswordError);
                        Application.RunOnMainThread(() =>
                        {
                            btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                        });
                        break;
                    case "ACCOUNTNOEXISTS":
                        tipStr = Language.StringByID(StringId.ACCOUNTNOEXISTS);
                        Application.RunOnMainThread(() =>
                        {
                            btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                        });
                        break;
                    case "NoRecord":
                        tipStr = Language.StringByID(StringId.PlsGetTheVerificationCode);
                        break;
                    case "Self:Net_Error":
                        tipStr = Language.StringByID(StringId.NetworkAnomaly);
                        break;
                }
                //账号或者密码错误
                Application.RunOnMainThread(() =>
                {
                    waitPage.Hide();
                    //提示原因
                    var tip = new Tip()
                    if (loginResult.Code == "10008")
                    {
                        Text = tipStr,
                        CloseTime = 1,
                        Direction = AMPopTipDirection.None
                    };
                    tip.Show(bodyView);
                        //用户名或密码错误
                        btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                        btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                    }
                    else if (loginResult.Code == "10010")
                    {
                        //用户不存在
                        btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                        btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                    }
                    else if (loginResult.Code == "14")
                    {
                        btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                        btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                    }
                    waitPage.Hide();
                });
                IMessageCommon.Current.ShowErrorInfoAlter(loginResult.Code);
            }
            return result;
        }
@@ -1073,7 +978,8 @@
            if (responsePack == StateCode.SUCCESS)
            {
                //2020-11-13 å¾…确认,没有住宅,不算登录成功
                if ( UserInfo.Current.regionList != null &&  UserInfo.Current.regionList.Count > 0){
                if (UserInfo.Current.regionList != null && UserInfo.Current.regionList.Count > 0)
                {
                    result = true;
                }
                //result = true;
@@ -1108,6 +1014,9 @@
                //    });
                //};
                //判断是否同意了隐私政策
                if (CheckPrivacyPolicy() == false) return;
                var registerPage = new RegisterPage();
                registerPage.Show();
                registerPage.ShowDialog();
@@ -1141,5 +1050,18 @@
            };
        }
        /// <summary>
        /// ç”¨æˆ·ä¸å­˜åœ¨
        /// </summary>
        void ShowBtnAccountViewBottomLineError()
        {
            Application.RunOnMainThread(() =>
            {
                //用户不存在
                btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
            });
        }
    }
}
HDL_ON/UI/UI1-Login/RegisterPage.cs
@@ -27,6 +27,36 @@
        /// é€‰æ‹©é‚®ç®±ç™»å½•按钮
        /// </summary>
        Button btnEmailLogin;
        #region æœåŠ¡å™¨é€‰æ‹©
        /// <summary>
        /// æœåŠ¡å™¨åŒºåŸŸ
        /// </summary>
        FrameLayout serverView;
        /// <summary>
        /// æœåС噍Icon按钮
        /// </summary>
        Button btnServerIcon;
        /// <summary>
        /// æœåŠ¡å™¨æ–‡æœ¬æ¡†
        /// </summary>
        Button btnServerText;
        ///// <summary>
        ///// æœåŠ¡å™¨æ–‡æœ¬æ¡†
        ///// </summary>
        //EditText etServer;
        ///// <summary>
        ///// æœåŠ¡å™¨å­åŒºåŸŸé‡Œé¢çš„åˆ†å‰²çº¿1
        ///// </summary>
        //Button btnLineVertical_server;
        /// <summary>
        ///服务器go按钮
        /// </summary>
        Button btnServerGo;
        /// <summary>
        /// æœåŠ¡å™¨å­åŒºåŸŸåº•éƒ¨æ¨ªçº¿
        /// </summary>
        Button btnServerBottomLine;
        #endregion
        /// <summary>
        /// è´¦å·å­åŒºåŸŸ
        /// </summary>
@@ -168,6 +198,10 @@
        /// æ‰‹æœºåŒºå·
        /// </summary>
        string phoneZoneCode = "86";
        /// <summary>
        /// æ˜¯å¦é€‰æ‹©è¿‡æœåС噍
        /// </summary>
        bool isSelectServer;
        string registerPhone;
        string registerEmail;
@@ -227,11 +261,66 @@
            bodyView.AddChidren(btnEmailLogin);
            #endregion
            #region æœåŠ¡å™¨é€‰æ‹©
            serverView = new FrameLayout()
            {
                X = Application.GetRealWidth(28),
                Y = Application.GetRealHeight(167),
                Width = Application.GetRealWidth(319),
                Height = Application.GetRealHeight(44),
            };
            bodyView.AddChidren(serverView);
            btnServerIcon = new Button()
            {
                X = Application.GetRealWidth(9),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(20),
                Height = Application.GetMinRealAverage(20),
                UnSelectedImagePath = "LoginIcon/Server.png",
            };
            serverView.AddChidren(btnServerIcon);
            btnServerText = new Button()
            {
                X = Application.GetRealWidth(49),
                Width = Application.GetRealWidth(319 - 78),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.TextFontSize,
                TextID = StringId.PleaseSelectCountryOrRegion,
            };
            serverView.AddChidren(btnServerText);
            #region å¯†ç ç™»å½•-控件加载
            btnServerGo = new Button()
            {
                X = Application.GetRealWidth(303),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/Right.png",
            };
            serverView.AddChidren(btnServerGo);
            #endregion
            btnServerBottomLine = new Button()
            {
                Y = Application.GetRealHeight(42),
                BackgroundColor = CSS_Color.DividingLineColor,
                SelectedBackgroundColor = CSS_Color.MainColor,
                Height = Application.GetRealHeight(1),
            };
            serverView.AddChidren(btnServerBottomLine);
            #endregion
            int topPadding = Application.GetRealHeight(12);
            #region è´¦å·å¡«å†™
            accountView = new FrameLayout()
            {
                X = Application.GetRealWidth(28),
                Y = Application.GetRealHeight(167),
                Y = serverView.Bottom + topPadding,
                Width = Application.GetRealWidth(319),
                Height = Application.GetRealHeight(44),
            };
@@ -313,7 +402,7 @@
            passwordView = new FrameLayout()
            {
                X = Application.GetRealWidth(28),
                Y = Application.GetRealHeight(223),
                Y = accountView.Bottom + topPadding,
                Width = Application.GetRealWidth(319),
                Height = Application.GetRealHeight(44),
            };
@@ -379,7 +468,7 @@
            repeatPasswordView = new FrameLayout()
            {
                X = Application.GetRealWidth(28),
                Y = Application.GetRealHeight(279),
                Y = passwordView.Bottom + topPadding,
                Width = Application.GetRealWidth(319),
                Height = Application.GetRealHeight(44),
            };
@@ -447,7 +536,8 @@
            verificationCodeView = new FrameLayout()
            {
                X = Application.GetRealWidth(28),
                Y = Application.GetRealHeight(335),
                Y = repeatPasswordView.Bottom + topPadding,
                //Y = Application.GetRealHeight(335),
                Width = Application.GetRealWidth(319),
                Height = Application.GetRealHeight(44),
            };
@@ -524,10 +614,11 @@
            btnRegister = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(421),
                Y = verificationCodeView.Bottom + Application.GetRealHeight(42),
                //Y = Application.GetRealHeight(421),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextID = StringId.Register,
@@ -727,28 +818,15 @@
            var responsePack = pm.GetHomePager();
            if (responsePack == StateCode.SUCCESS)
            {
                //2020-11-13 å¾…确认,没有住宅,不算登录成功
                if (UserInfo.Current.regionList != null && UserInfo.Current.regionList.Count > 0)
                {
                    result = true;
                }
            }
            else
            {
                var tipStr = "Server erorr";
                switch (responsePack)
                {
                    case "NoLogin":
                        tipStr = Language.StringByID(StringId.InvalidLoginCertificate);
                        break;
                }
                Application.RunOnMainThread(() =>
                {
                    //提示原因
                    var tip = new Tip()
                    {
                        Text = tipStr,
                        CloseTime = 1,
                        Direction = AMPopTipDirection.None
                    };
                    tip.Show(bodyView);
                });
                IMessageCommon.Current.ShowErrorInfoAlter(responsePack);
            }
            return result;
        }
HDL_ON/UI/UI1-Login/RegisterPageBLL.cs
@@ -21,6 +21,7 @@
            LoadEvent_Register();
            LoadEvent_LimtPasswordLength();
            LoadEvent_TextChange();
            LoadEvent_Server();
            //var areaCodeList = pm.GetAreaCode();
        }
        /// <summary>
@@ -367,6 +368,9 @@
            {
                if ((sender as Button).IsSelected)
                {
                    //判断是否选择了服务器,选择了才能发送验证码
                    if (CheckIfSelectServer() == false) return;
                    string account = etAccount.Text.Trim();
                    int time = 60;
                    new Thread(() =>
@@ -421,11 +425,13 @@
                                IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
                            }
                        }else if (result.Code.ToUpper() == StateCode.SUCCESS)
                        }
                        else if (result.Code.ToUpper() == StateCode.SUCCESS)
                        {
                            //3.提示账号已存在,无法重复注册
                            Utlis.ShowAlertOnMainThread(Language.StringByID(StringId.AccountAlreadyUse));
                        } else
                        }
                        else
                        {
                            //4.提示其它异常错误
                            IMessageCommon.Current.ShowErrorInfoAlter(result.Code);
@@ -502,6 +508,9 @@
                }
                if (btnRegister.IsSelected)
                {
                    //判断是否选择了服务器,选择了才能发送验证码
                    if (CheckIfSelectServer() == false) return;
                    waitPage = new Loading();
                    new PublicAssmebly().LoadPage_WaitPage(LoadMethod_RegisterThread(), bodyView, waitPage);
                }
@@ -589,5 +598,78 @@
                }
            });
        }
        /// <summary>
        /// åŠ è½½æœåŠ¡å™¨é€‰æ‹©æŒ‰é’®äº‹ä»¶
        /// </summary>
        void LoadEvent_Server()
        {
            //判断之前是否选择过
            if (UserInfo.Current.GlobalRegion != null && !string.IsNullOrEmpty(UserInfo.Current.GlobalRegion.regionUrl))
            {
                SetServerText();
            }
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                Action selectAction = () =>
                {
                    //服务器选择过标记为true
                    SetServerText();
                };
                new SelectServerDialog(selectAction).LoadPage();
            };
            btnServerGo.MouseUpEventHandler = eventHandler;
            btnServerText.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// æ£€æµ‹æ˜¯å¦é€‰æ‹©äº†æœåС噍
        /// </summary>
        /// <returns></returns>
        private bool CheckIfSelectServer()
        {
            if (isSelectServer == false)
            {
                //请先选择国家/区域
                Utlis.ShowTip(Language.StringByID(StringId.PleaseSelectCountryOrRegion));
                ShowServerBottomLineState(true);
                return false;
            }
            return true;
        }
        /// <summary>
        /// æœåŠ¡å™¨ä¸‹åˆ’çº¿æ ·å¼
        /// </summary>
        /// <param name="isError"></param>
        void ShowServerBottomLineState(bool isError)
        {
            if (isError)
            {
                btnServerBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                btnServerBottomLine.Height = Application.GetRealHeight(2);
            }
            else
            {
                btnServerBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
                btnServerBottomLine.Height = Application.GetRealHeight(1);
            }
        }
        /// <summary>
        ///
        /// </summary>
        void SetServerText()
        {
            //服务器选择过标记为true
            isSelectServer = true;
            ShowServerBottomLineState(false);
            btnServerText.TextColor = CSS_Color.FirstLevelTitleColor;
            btnServerText.Text = UserInfo.Current.GlobalRegion.regionName;
        }
    }
}
HDL_ON/UI/UI1-Login/SelectServerDialog.cs
@@ -25,9 +25,10 @@
        /// <summary>
        /// 
        /// </summary>
        public SelectServerDialog()
        public SelectServerDialog(Action selectAction)
        {
            bodyView = new FrameLayout();
            this.selectAction = selectAction;
        }
@@ -36,12 +37,14 @@
      /// </summary>
        public void LoadPage()
        {
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
            this.AddChidren(bodyView);
            new TopViewDiv(this, bodyView, Language.StringByID(StringId.SelectCountryOrRegion)).LoadTopView();
            //加载顶部菜单栏
            new TopViewDiv(this, bodyView, Language.StringByID(StringId.PleaseSelectCountryOrRegion)).LoadTopView();
            //加载服务器区域选择
            AddRegionalSelectionView();
            //Show
            this.Show();
        }
@@ -58,24 +61,11 @@
            };
            bodyView.AddChidren(VerticalScrolViewMiddle);
            //var TipView = new Button()
            //{
            //    Y = bodyView.Height - Application.GetRealHeight(60),
            //    Width = LayoutParams.MatchParent,
            //    Height = Application.GetRealHeight(60),
            //    BackgroundColor = 0xFFFFFFE0,
            //    TextSize = 11,
            //    //Text = "请选择注册的区域",
            //    //TextID = R.MyInternationalizationString.SelectRegisteredArea,
            //    TextColor = 0xFF1F1F1F,
            //    IsMoreLines = true
            //};
            //bodyView.AddChidren(TipView);
            var waitPage = new Loading();
            waitPage.Start("Please wait...");
            System.Threading.Tasks.Task.Run(() => {
            System.Threading.Tasks.Task.Run(() =>
            {
                try
                {
                    var dataList = new List<GlobalRegionListRes>();
@@ -83,7 +73,8 @@
                    var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_GlobalRegionList, requestJson, HttpUtil.GlobalRequestHttpsHost);
                    if (revertObj.Code == StateCode.SUCCESS)
                    {
                        Application.RunOnMainThread(() => {
                        Application.RunOnMainThread(() =>
                        {
                            var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GlobalRegionListRes>>(revertObj.Data.ToString());
                            if (responseDataObj != null)
                            {
@@ -110,7 +101,8 @@
                }
                finally
                {
                    Application.RunOnMainThread(() => {
                    Application.RunOnMainThread(() =>
                    {
                        waitPage.Hide();
                    });
                }
@@ -125,26 +117,29 @@
        /// <param name="VerticalScrolViewMiddle"></param>
        void AddRowView(GlobalRegionListRes mGlobalRegion, VerticalScrolViewLayout VerticalScrolViewMiddle)
        {
            var rowView = new RowLayout()
            var rowView = new FrameLayout()
            {
                Height = Application.GetRealHeight(44),
            };
            VerticalScrolViewMiddle.AddChidren(rowView);
            var urlBtn = new Button() {
            var urlBtn = new Button()
            {
                X = Application.GetRealWidth(16),
                Height = rowView.Height,
                Width = Application.GetRealWidth(200),
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Gravity = Gravity.CenterLeft
                TextAlignment = TextAlignment.CenterLeft
            };
            rowView.AddChidren(urlBtn);
            var lineView = new LineView();
            rowView.AddChidren(lineView);
            lineView.Y = rowView.Height - lineView.Height;
            //var lineView = new LineView();
            //rowView.AddChidren(lineView);
            //lineView.Y = rowView.Height - lineView.Height;
            EventHandler<MouseEventArgs> eHandler = (sender, e) => {
            EventHandler<MouseEventArgs> eHandler = (sender, e) =>
            {
                UserInfo.Current.RequestHttpsHost = mGlobalRegion.regionUrl;
                UserInfo.Current.GlobalRegion = mGlobalRegion;
                UserInfo.Current.SaveUserInfo();
@@ -155,6 +150,7 @@
            rowView.MouseUpEventHandler += eHandler;
            urlBtn.MouseUpEventHandler += eHandler;
            urlBtn.Text = mGlobalRegion.regionName;
            if (mGlobalRegion.regionUrl == UserInfo.Current.RequestHttpsHost)
            {
HDL_ON/UI/UI2/4-PersonalCenter/AboutOn/AboutOnPage.cs
New file
@@ -0,0 +1,332 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
using System.Net;
using System.Text;
using HDL_ON.DAL.Server;
using System.Threading.Tasks;
namespace HDL_ON.UI
{
    /// <summary>
    /// å…³äºŽé¡µé¢
    /// </summary>
    public class AboutOnPage : FrameLayout
    {
        /// <summary>
        ///
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// ç‰ˆæœ¬æ›´æ–°ListCellView
        /// </summary>
        ListCellView versionUpdateView;
        /// <summary>
        /// æ–°ç‰ˆæœ¬çš„版本号,查询到新版本才赋值
        /// </summary>
        string newAppVersion;
        /// <summary>
        /// æ–°ç‰ˆæœ¬çš„下载地址
        /// iOS é»˜è®¤ä¸ºè‹¹æžœå•†åº—地址
        /// Android äº‘端返回地址
        /// </summary>
        string newAppVersionUrl = "";
        /// <summary>
        ///
        /// </summary>
        public AboutOnPage()
        {
            bodyView = this;
        }
        /// <summary>
        ///
        /// </summary>
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.About)).LoadTopView();
            Button btnOnIcon = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealWidth(106),
                Width = Application.GetRealWidth(58),
                Height = Application.GetRealWidth(58),
                UnSelectedImagePath = "OnIcon.png",
            };
            bodyView.AddChidren(btnOnIcon);
            Button btnOnTitle = new Button()
            {
                //Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealWidth(184),
                Height = Application.GetRealWidth(28),
                TextAlignment = TextAlignment.Center,
                Text = "ON+",
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
                IsBold = true,
            };
            bodyView.AddChidren(btnOnTitle);
            Button btnOnVersion = new Button()
            {
                Y = btnOnTitle.Bottom,
                Height = Application.GetRealWidth(25),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = Language.StringByID(StringId.VersionNumber) + " " + MainPage.VersionString,
            };
            bodyView.AddChidren(btnOnVersion);
            var lineView = new FrameLayout()
            {
                Y = Application.GetRealHeight(281),
                Height = Application.GetRealHeight(1),
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            bodyView.AddChidren(lineView);
            #region åŠŸèƒ½ä»‹ç»
            var functionView = new ListCellView()
            {
                Y = lineView.Bottom,
            };
            bodyView.AddChidren(functionView);
            functionView.BtnTilte.TextID = StringId.FunctionIntroduced;
            Action functionAction = () =>
            {
                var mPage = new FunctionIntroductionPage();
                MainPage.BasePageView.AddChidren(mPage);
                mPage.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            functionView.GoAction = functionAction;
            #endregion
            #region æŠ•诉
            var complaintsView = new ListCellView()
            {
                Y = functionView.Bottom,
            };
            bodyView.AddChidren(complaintsView);
            complaintsView.BtnTilte.TextID = StringId.Complaints;
            Action complaintsAction = () =>
            {
                var mPage = new ComplaintsPage();
                MainPage.BasePageView.AddChidren(mPage);
                mPage.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            complaintsView.GoAction = complaintsAction;
            #endregion
            #region ç‰ˆæœ¬æ›´æ–°
            versionUpdateView = new ListCellView()
            {
                Y = complaintsView.Bottom,
            };
            bodyView.AddChidren(versionUpdateView);
            versionUpdateView.BtnTilte.TextID = StringId.VersionUpdate;
            Action versionUpdateAction = () =>
            {
                //OpenUrl();
                TestDDDDD();
            };
            versionUpdateView.GoAction = versionUpdateAction;
            #endregion
            CheckIfNeedUpdateAsync();
        }
        /// <summary>
        /// åˆ¤æ–­æ˜¯å¦éœ€è¦è°ƒæ•´æ–°ç‰ˆæœ¬ä¸‹è½½åœ°å€
        /// </summary>
        void OpenUrl()
        {
            if (!string.IsNullOrEmpty(newAppVersion))
            {
                HDLUtils.OpenUrl(newAppVersionUrl);
            }
            else
            {
                Utlis.ShowTip(Language.StringByID(StringId.IsLatestVersion));
            }
        }
        /// <summary>
        /// æ£€æµ‹æ˜¯å¦éœ€è¦æ›´æ–°
        /// Android等接口实现
        /// </summary>
        /// <returns></returns>
        void CheckIfNeedUpdateAsync(bool isTip = false)
        {
            new System.Threading.Thread(() =>
            {
                newAppVersion = CanUpdateAsync();
                Application.RunOnMainThread(() =>
                {
                    if (!string.IsNullOrEmpty(newAppVersion))
                    {
                        //发现新版本
                        versionUpdateView.BtnSubtitle.TextColor = CSS_Color.MainColor;
                        versionUpdateView.BtnSubtitle.Text = Language.StringByID(StringId.DiscoverNewVersion) + "(" + newAppVersion + ")";
                    }
                    else
                    {
                        //已经是最新版本
                        versionUpdateView.BtnSubtitle.TextColor = CSS_Color.PromptingColor1;
                        versionUpdateView.BtnSubtitle.Text = Language.StringByID(StringId.IsLatestVersion);
                    }
                });
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// æ£€æŸ¥ç‰ˆæœ¬
        /// </summary>
        /// <returns></returns>
        string CanUpdateAsync()
        {
#if __IOS__
            try
            {
                var versionResult = RequestHttpsiOSAppVersionAsync();
                if (versionResult == null || versionResult.Results == null)
                {
                    return "";
                }
                var results = Newtonsoft.Json.Linq.JArray.Parse(versionResult.Results.ToString());
                if (results[0] == null)
                {
                    return "";
                }
                var newVersion = results[0]["version"]?.ToString();
                //var updateContent = results[0]["releaseNotes"]?.ToString();
                if (newVersion.CompareTo(MainPage.VersionString) > 0)
                {
                    newAppVersionUrl = Constant.URL_APPSTORE;
                    return newVersion;
                }
                return "";
            }
            catch
            {
                return "";
            }
#else
            try
            {
                var versionResult = GetAndroidAppVersion();
                if (versionResult == null)
                {
                    return "";
                }
                var newVersion = versionResult.NewVersion;
                if (newVersion.CompareTo(MainPage.VersionString) > 0)
                {
                    newAppVersionUrl = versionResult.NewVersionUrl;
                    return newVersion;
                }
                return "";
            }
            catch (Exception ex)
            {
                return "";
            }
#endif
        }
#if __IOS__
        /// <summary>
        /// èŽ·å–iOS-APP版本信息
        /// </summary>
        /// <returns>The https app version async.</returns>
        ResultPack RequestHttpsiOSAppVersionAsync()
        {
            try
            {
                var webClient = new WebClient { };
                var result = webClient.DownloadData("https://itunes.apple.com/cn/lookup?id=1532353432");
                if (result == null)
                {
                    return null;
                }
                return Newtonsoft.Json.JsonConvert.DeserializeObject<ResultPack>(Encoding.UTF8.GetString(result));
            }
            catch
            {
                return null;
            }
        }
#else
        /// <summary>
        /// èŽ·å– Android-APP ç‰ˆæœ¬ä¿¡æ¯
        /// </summary>
        /// <returns>The https app version async.</returns>
        private APPVersion GetAndroidAppVersion()
        {
            try
            {
                var result = new HttpServerRequest().GetAppVersion();
                if (result.Code == StateCode.SUCCESS)
                {
                    if (result.Data == null)
                    {
                        return null;
                    }
                    var responeData = Newtonsoft.Json.JsonConvert.DeserializeObject<APPVersion>(result.Data.ToString());
                    return responeData;
                }
                return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
#endif
        int updateType = 0;
        void TestDDDDD()
        {
            updateType = 1;
            ForceUpdateInfo forceUpdateInfo = new ForceUpdateInfo()
            {
                UpdateType = updateType,
                NewVersionUrl = Constant.URL_APPSTORE,
                NewVersion = "1.0.0925",
                ReasonStr = "1、首页全新改版设计,UI更清晰 \n2、修复BUG \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能 \n3、新增音箱功能"
            };
            HDLCommon.Current.ShowForceUpdateDialog(forceUpdateInfo);
        }
    }
    /// <summary>
    /// è‹¹æžœå•†åº—查询响应包格式
    /// </summary>
    [System.Serializable]
    public class ResultPack
    {
        public int ResultCount { get; set; }
        public object Results { get; set; }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/AboutOn/ComplaintsPage.cs
New file
@@ -0,0 +1,174 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
using Xamarin.Essentials;
namespace HDL_ON.UI
{
    /// <summary>
    /// æŠ•诉页面
    /// </summary>
    public class ComplaintsPage : FrameLayout
    {
        FrameLayout bodyView;
        /// <summary>
        /// å½“前
        /// </summary>
        VerticalScrolViewLayout bodyScrolView;
        public ComplaintsPage()
        {
            bodyView = this;
        }
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.Complaints)).LoadTopView();
            int bodyY = Application.GetRealHeight(64);
            bodyScrolView = new VerticalScrolViewLayout()
            {
                Y = bodyY,
                Height = bodyView.Height - bodyY,
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            #region æŠ•诉联系
            FrameLayout phoneRow = new FrameLayout()
            {
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(50),
            };
            bodyView.AddChidren(phoneRow);
            Button btnPhoneTitle = new Button()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(48),
                TextID = StringId.Telephone,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
            };
            phoneRow.AddChidren(btnPhoneTitle);
            Button btnPhoneText = new Button()
            {
                X = btnPhoneTitle.Right,
                Width = Application.GetRealWidth(200),
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.TextFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Text = "400 855 8535",
            };
            phoneRow.AddChidren(btnPhoneText);
            /// <summary>
            /// å‰è¿›å›¾æ ‡
            /// </summary>
            var btnImage = new Button()
            {
                X = Application.GetRealWidth(339),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/Right.png",
            };
            phoneRow.AddChidren(btnImage);
            phoneRow.AddChidren(new Button() { X = Application.GetRealWidth(16), Y = Application.GetRealWidth(49), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                PhoneDialer.Open(Constant.SUPPORT_TELEPHONENUMBER);
            };
            phoneRow.MouseUpEventHandler = eventHandler;
            btnPhoneText.MouseUpEventHandler = eventHandler;
            btnImage.MouseUpEventHandler = eventHandler;
            #endregion
            #region è”系邮箱
            FrameLayout emailRow = new FrameLayout()
            {
                Y = phoneRow.Bottom,
                Height = Application.GetRealHeight(54),
            };
            bodyView.AddChidren(emailRow);
            Button btnEmailTitle = new Button()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(48),
                TextID = StringId.Email_,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
            };
            emailRow.AddChidren(btnEmailTitle);
            Button btnEmailText = new Button()
            {
                X = btnEmailTitle.Right,
                Y = Application.GetRealHeight(8),
                Height = Application.GetRealHeight(20),
                Width = Application.GetRealWidth(200),
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.TextFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Text = Constant.SUPPORT_EMAIL,
            };
            emailRow.AddChidren(btnEmailText);
            Button btnEmailTipText = new Button()
            {
                X = btnEmailTitle.Right,
                Y = btnEmailText.Bottom + Application.GetRealHeight(4),
                Height = Application.GetRealHeight(20),
                Width = Application.GetRealWidth(200),
                TextAlignment = TextAlignment.TopLeft,
                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                TextColor = CSS_Color.PromptingColor1,
                TextID = StringId.WillGivePriorityToTheTreatmen,
            };
            emailRow.AddChidren(btnEmailTipText);
            /// <summary>
            /// å‰è¿›å›¾æ ‡
            /// </summary>
            var btnImage2 = new Button()
            {
                X = Application.GetRealWidth(339),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/Right.png",
            };
            emailRow.AddChidren(btnImage2);
            emailRow.AddChidren(new Button() { X = Application.GetRealWidth(16), Y = emailRow.Height - Application.GetRealHeight(1), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
            EventHandler<MouseEventArgs> eventHandler2 = (sender, e) =>
            {
                CopyToClipboard(Constant.SUPPORT_EMAIL);
            };
            emailRow.MouseUpEventHandler = eventHandler2;
            btnEmailText.MouseUpEventHandler = eventHandler2;
            btnImage2.MouseUpEventHandler = eventHandler2;
            #endregion
        }
        /// <summary>
        /// å¤åˆ¶åˆ°å‰ªåˆ‡æ¿
        /// </summary>
        /// <param name="text"></param>
        void CopyToClipboard(string text)
        {
            Clipboard.SetTextAsync(text);
            Utlis.ShowTip(text + "\n" + Language.StringByID(StringId.CopySuccess));
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/AboutOn/FunctionIntroductionPage.cs
New file
@@ -0,0 +1,183 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
namespace HDL_ON.UI
{
    /// <summary>
    /// åŠŸèƒ½ä»‹ç»
    /// </summary>
    public class FunctionIntroductionPage : FrameLayout
    {
        FrameLayout bodyView;
        /// <summary>
        ///
        /// </summary>
        FrameLayout emptyTipFrameLayout;
        /// <summary>
        /// å½“前
        /// </summary>
        VerticalScrolViewLayout bodyScrolView;
        /// <summary>
        /// å†…容为空提示View
        /// </summary>
        EmptyTipView emptyTipView;
        public FunctionIntroductionPage()
        {
            bodyView = this;
        }
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.FunctionIntroduced)).LoadTopView();
            int bodyY = Application.GetRealHeight(64);
            bodyScrolView = new VerticalScrolViewLayout()
            {
                Y = bodyY,
                Height = bodyView.Height - bodyY,
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(bodyScrolView);
            AddEmptyTipView();
            //TestLoad();
        }
        /// <summary>
        /// æ·»åŠ å†…å®¹ä¸ºç©ºæç¤ºé¡µé¢
        /// </summary>
        void AddEmptyTipView()
        {
            emptyTipView = new EmptyTipView()
            {
                Gravity = Gravity.Center
            };
            bodyView.AddChidren(emptyTipView);
        }
        /// <summary>
        /// åŠ è½½åŒºåŸŸé€‰æ‹©RowView
        /// </summary>
        /// <param name="VerticalScrolViewMiddle"></param>
        void AddRowView(VerticalScrolViewLayout VerticalScrolViewMiddle, HelpURLInfo functionInfo)
        {
            var rowView = new FrameLayout()
            {
                Height = Application.GetRealHeight(54),
            };
            VerticalScrolViewMiddle.AddChidren(rowView);
            //标题
            var btnTilte = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(8),
                Width = Application.GetRealWidth(320),
                Height = Application.GetRealHeight(20),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                Text = functionInfo.Title
            };
            rowView.AddChidren(btnTilte);
            //副标题
            var btnSubtitle = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = btnTilte.Bottom + Application.GetRealHeight(4),
                Width = Application.GetRealWidth(320),
                Height = Application.GetRealHeight(14),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                Text = functionInfo.CreateTime
            };
            rowView.AddChidren(btnSubtitle);
            var btnGo = new Button()
            {
                X = Application.GetRealWidth(343),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/Right.png",
            };
            rowView.AddChidren(btnGo);
            var lineView = new LineView(rowView.Height);
            rowView.AddChidren(lineView);
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                new WebViewDialog().LoadPage(functionInfo.Title, functionInfo.Url);
            };
            btnTilte.MouseUpEventHandler = eventHandler;
            btnSubtitle.MouseUpEventHandler = eventHandler;
            btnGo.MouseUpEventHandler = eventHandler;
        }
        #region æµ‹è¯•
        List<HelpURLInfo> list = new List<HelpURLInfo>();
        /// <summary>
        ///
        /// </summary>
        void TestLoad()
        {
            list.Add(new HelpURLInfo()
            {
                Title = "HDL ON PRO 1.0.10 ä¸»è¦æ›´æ–°",
                CreateTime = "11月26",
                Url = Constant.URL_PRIVACYPOLICY,
            });
            list.Add(new HelpURLInfo()
            {
                Title = "HDL ON PRO 1.0.09 ä¸»è¦æ›´æ–°",
                CreateTime = "10月26",
                Url = Constant.URL_PRIVACYPOLICY,
            });
            list.Add(new HelpURLInfo()
            {
                Title = "HDL ON PRO 1.0.08 ä¸»è¦æ›´æ–°",
                CreateTime = "09月26",
                Url = Constant.URL_PRIVACYPOLICY,
            });
            foreach (var info in list)
            {
                AddRowView(bodyScrolView, info);
            }
        }
        #endregion
    }
    /// <summary>
    /// å¸®åŠ©ç½‘é¡µåœ°å€
    /// </summary>
    [System.Serializable]
    public class HelpURLInfo
    {
        /// <summary>
        ///
        /// </summary>
        public string Title;
        /// <summary>
        ///
        /// </summary>
        public string CreateTime;
        /// <summary>
        ///
        /// </summary>
        public string Url;
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/AboutOnPage.cs
File was deleted
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/AccountBindInfoPage.cs
@@ -9,8 +9,15 @@
    /// </summary>
    public partial class AccountBindInfoPage : FrameLayout
    {
        /// <summary>
        ///
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        ///
        /// </summary>
        Action<string> action;
        /// <summary>
        /// ä¿®å¤ä¿¡æ¯çš„类型
        /// 1:邮箱,2:手机
@@ -20,6 +27,10 @@
        /// ç•Œé¢æ ‡é¢˜
        /// </summary>
        int titleId;
        /// <summary>
        ///
        /// </summary>
        public AccountBindInfoPage()
        {
            bodyView = this;
@@ -72,7 +83,7 @@
                Y = Application.GetRealHeight(213),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                BackgroundColor = CSS_Color.MainColor,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainBackgroundColor,
@@ -118,7 +129,7 @@
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                var cbe = new ChangeBindAccountPage();
                cbe.isUnbind = false;
                cbe.IsUnbind = false;
                MainPage.BasePageView.AddChidren(cbe);
                if (optionType == 1)
                {
@@ -141,7 +152,7 @@
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                var cbe = new ChangeBindAccountPage();
                cbe.isUnbind = true;//是否为解绑标记
                cbe.IsUnbind = true;//是否为解绑标记
                MainPage.BasePageView.AddChidren(cbe);
                if (optionType == 1)
                {
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/ChangeBindAccountPage.cs
@@ -18,7 +18,17 @@
        /// <summary>
        /// 
        /// </summary>
        Button btnTitle;
        /// <summary>
        ///
        /// </summary>
        Button btnContent;
        /// <summary>
        ///
        /// </summary>
        Action<string> action;
        /// <summary>
        /// æ“ä½œç›®æ ‡ç±»åž‹ 1:邮箱,2:手机
        /// </summary>
@@ -26,16 +36,8 @@
        /// <summary>
        /// æ˜¯å¦ä¸ºè§£ç»‘验证
        /// </summary>
        public bool isUnbind;
        public bool IsUnbind;
        /// <summary>
        ///
        /// </summary>
        Button btnTitle;
        /// <summary>
        ///
        /// </summary>
        Button btnContent;
        /// <summary>
        /// ChangeBindAccountPage
@@ -101,7 +103,7 @@
                Y = Application.GetRealHeight(213),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                BackgroundColor = CSS_Color.MainColor,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainBackgroundColor,
@@ -148,12 +150,12 @@
        {
            if (optionType == 2)
            {
                btnTitle.TextID = isUnbind ? StringId.CurPhone : StringId.PhoneNumberVerification;
                btnTitle.TextID = IsUnbind ? StringId.CurPhone : StringId.PhoneNumberVerification;
                btnContent.Text =  UserInfo.Current.userMobileInfo;
            }
            else
            {
                btnTitle.TextID = isUnbind ? StringId.CurrentEmail : StringId.EmailVerification;
                btnTitle.TextID = IsUnbind ? StringId.CurrentEmail : StringId.EmailVerification;
                btnContent.Text =  UserInfo.Current.userEmailInfo;
            }
        }
@@ -232,7 +234,7 @@
                            {
                                button.BackgroundColor = CSS_Color.PromptingColor1;
                                var vcp = new ChangeBindVerificationCodePage();
                                vcp.isUnbind = isUnbind;
                                vcp.IsUnbind = IsUnbind;
                                MainPage.BasePageView.AddChidren(vcp);
                                vcp.LoadPage(action, titleId, optionType, time);
                                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/ChangeBindVerificationCodePage.cs
@@ -32,13 +32,18 @@
        Button btnNum6Line;
        EditText et;
        /// <summary>
        ///
        /// </summary>
        Button btnResend;
        /// <summary>
        ///
        /// </summary>
        Button btnTip;
        /// <summary>
        ///
        /// </summary>
        Action<string> action;
        /// <summary>
        /// 
        /// </summary>
@@ -52,11 +57,10 @@
        /// å€’计时时间
        /// </summary>
        int time = 0;
        /// <summary>
        /// æ˜¯å¦ä¸ºè§£ç»‘验证
        /// </summary>
        public bool isUnbind;
        public bool IsUnbind;
        /// <summary>
        /// 
@@ -258,7 +262,7 @@
                Y = Application.GetRealHeight(276),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextAlignment = TextAlignment.Center,
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/NewBindAccountPage.cs
@@ -16,6 +16,10 @@
        FrameLayout bodyView;
        Button btnBind;
        EditText etContent;
        /// <summary>
        ///
        /// </summary>
        Action<string> action;
        /// <summary>
@@ -30,7 +34,6 @@
        /// æ˜¯å¦æ¢ç»‘
        /// </summary>
        bool isModifyBind;
        /// <summary>
        /// æ‰‹æœºåŒºå·
        /// </summary>
@@ -57,7 +60,7 @@
            if (isModifyBind)
            {
                //修改绑定
                titleId = isPhone ? StringId.ModifyBindingPhone : StringId.ModifyBindingEmail;
                titleId = isPhone ? StringId.EntryNewPhone : StringId.EntryNewEmail;
            }
            else
            {
@@ -66,19 +69,58 @@
            }
         
            
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(titleId)).LoadTopView();
            if (isPhone)
            {
                AddPhoneFrameLayout();
            }
            else
            {
                AddEmailFrameLayout();
            }
            //点击获取验证码
            LoadEvent_GetVerification(btnBind);
        }
        /// <summary>
        ///
        /// </summary>
        void AddPhoneFrameLayout() {
            #region å¦‚果是手机
            //手机国家区号选择按钮
            ListCellView codeView = new ListCellView() {
                Y = Application.GetRealHeight(64),
            };
            bodyView.AddChidren(codeView);
            //跳转国家区号选择界面
            Action selectAction = () =>
            {
                JLCountrycode.CountryCodeView.Current.Show((countryName, code) => {
                    if (!string.IsNullOrEmpty(code))
                    {
                        phoneZoneCode = code;
                        codeView.BtnSubtitle.Text = "+" + phoneZoneCode;
                    }
                });
            };
            codeView.GoAction = selectAction;
            codeView.BtnTilte.Text = Language.StringByID(StringId.CountryOrRegion);
            codeView.BtnSubtitle.Text = "+" + phoneZoneCode;
            //手机号输入框
            FrameLayout rowView = new FrameLayout()
            {
                Y = Application.GetRealHeight(72),
                Y = codeView.Bottom,
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(rowView);
            //绑定邮箱或者绑定手机号
            //绑定手机号
            Button btnTitle = new Button()
            {
                X = Application.GetRealWidth(16),
@@ -105,7 +147,7 @@
                Y = Application.GetRealHeight(213),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                BackgroundColor = CSS_Color.MainColor,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainBackgroundColor,
@@ -117,11 +159,65 @@
                BorderWidth = 0,
            };
            bodyView.AddChidren(btnBind);
            //点击获取验证码
            LoadEvent_GetVerification(btnBind);
            #endregion
        }
        /// <summary>
        ///
        /// </summary>
        void AddEmailFrameLayout()
        {
            #region å¦‚果是邮箱
            FrameLayout rowView = new FrameLayout()
            {
                Y = Application.GetRealHeight(72),
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(rowView);
            //绑定邮箱
            Button btnTitle = new Button()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(180),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = titleId,
            };
            rowView.AddChidren(btnTitle);
            etContent = new EditText()
            {
                Width = Application.GetRealWidth(359),
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.TextFontSize,
                TextAlignment = TextAlignment.CenterRight,
                Foucs = true
            };
            rowView.AddChidren(etContent);
            btnBind = new Button()
            {
                Y = Application.GetRealHeight(213),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealWidth(44),
                BackgroundColor = CSS_Color.MainColor,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainBackgroundColor,
                TextID = StringId.GetVerificationCode,
                TextSize = CSS_FontSize.SubheadingFontSize,
                IsBold = true,
                Radius = (uint)Application.GetRealWidth(22),
                BorderColor = 0x00000000,
                BorderWidth = 0,
            };
            bodyView.AddChidren(btnBind);
            #endregion
        }
    }
@@ -139,6 +235,32 @@
                {
                    Application.HideSoftInput();
                    var account = etContent.Text.Trim();
                    //如果是换绑检测是否相同帐号
                    if (isModifyBind)
                    {
                        if (isPhone)
                        {
                            if(account == UserInfo.Current.userMobileInfo)
                            {
                                //提示换绑帐号相同
                                Utlis.ShowTip(Language.StringByID(StringId.EntryNewPhone));
                                return;
                            }
                        }
                        else
                        {
                            if (account == UserInfo.Current.userEmailInfo)
                            {
                                //提示换绑帐号相同
                                Utlis.ShowTip(Language.StringByID(StringId.EntryNewEmail));
                                return;
                            }
                        }
                    }
                    #region æ­£åˆ™è¡¨è¾¾å¼
                    //1.检测账号是否合法
                    if (!isPhone)
@@ -208,7 +330,7 @@
                            {
                                button.BackgroundColor = CSS_Color.PromptingColor1;
                                var vcp = new NewBindVerificationCodePage();
                                vcp.phoneZoneCode = phoneZoneCode;
                                vcp.PhoneZoneCode = phoneZoneCode;
                                MainPage.BasePageView.AddChidren(vcp);
                                vcp.LoadPage(action, titleId, account, isPhone, time, isModifyBind);
                                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
HDL_ON/UI/UI2/4-PersonalCenter/AccountBindInfo/NewBindVerificationCodePage.cs
@@ -52,20 +52,20 @@
        /// <summary>
        /// æ˜¯å¦æ‰‹æœº
        /// </summary>
        public bool isPhone;
        bool isPhone;
        /// <summary>
        /// æ˜¯å¦æ¢ç»‘
        /// </summary>
        public bool isModifyBind;
        bool isModifyBind;
        /// <summary>
        /// æ–°ç»‘定的账号
        /// </summary>
        public string verAccount;
        string verAccount;
        /// <summary>
        /// æ‰‹æœºåŒºå·
        /// </summary>
        public string phoneZoneCode = "86";
        public string PhoneZoneCode = "86";
        public NewBindVerificationCodePage()
@@ -268,7 +268,7 @@
                Y = Application.GetRealHeight(276),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextAlignment = TextAlignment.Center,
@@ -642,7 +642,7 @@
                    }
                    else
                    {
                        resultObj = new HttpServerRequest().VerificationCodeSend(VerifyType.REGISTER_USER_SYSTEM, verAccount, true, phoneZoneCode);
                        resultObj = new HttpServerRequest().VerificationCodeSend(VerifyType.REGISTER_USER_SYSTEM, verAccount, true, PhoneZoneCode);
                    }
HDL_ON/UI/UI2/4-PersonalCenter/GetSupport/FAQHelpPage.cs
New file
@@ -0,0 +1,287 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
namespace HDL_ON.UI
{
    /// <summary>
    /// èŽ·å–æ”¯æŒ-常见问题页面
    /// </summary>
    public class FAQHelpPage : FrameLayout
    {
        /// <summary>
        ///
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// æœç´¢é¡µé¢
        /// </summary>
        FrameLayout searchView;
        /// <summary>
        /// èœå•按钮
        /// </summary>
        Button btnMenu;
        /// <summary>
        /// ç”µè¯æŒ‰é’®
        /// </summary>
        Button btnTelephone;
        /// <summary>
        /// å‘送信息按钮
        /// </summary>
        Button btnSendMes;
        /// <summary>
        /// èœå•按钮是否展开
        /// </summary>
        bool isbtnMenuOpen;
        public FAQHelpPage()
        {
            bodyView = this;
        }
        public void LoadPage()
        {
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(StringId.GetSupport)).LoadTopView();
            //搜索按钮
            searchView = new FrameLayout()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(76),
                Height = Application.GetRealHeight(28),
                Width = Application.GetRealWidth(343),
                Radius = (uint)Application.GetRealHeight(6),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(searchView);
            ImageView searchImage = new ImageView()
            {
                Width = Application.GetRealWidth(20),
                Height = Application.GetRealWidth(20),
                Gravity = Gravity.Center,
                ImagePath = "PersonalCenter/Support/Search.png"
            };
            searchView.AddChidren(searchImage);
            #region Help
            var helpView = new FrameLayout()
            {
                Y = Application.GetRealHeight(112),
                Height = Application.GetRealHeight(208),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(helpView);
            var helpTip = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(10),
                Height = Application.GetRealHeight(28),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                Width = Application.GetRealWidth(200),
                TextID = StringId.WhatCanWeDoForYou
            };
            helpView.AddChidren(helpTip);
            #region åŠŸèƒ½é—®é¢˜
            var functionView = new ListIconCellView()
            {
                Y = Application.GetRealHeight(58),
            };
            helpView.AddChidren(functionView);
            functionView.BtnTilte.TextID = StringId.FunctionalQuestion;
            functionView.BtnIcon.UnSelectedImagePath = "PersonalCenter/Support/Function.png";
            Action functionAction = () =>
            {
                OpenQuestionListPage(1);
            };
            functionView.GoAction = functionAction;
            #endregion
            #region åœºæ™¯é—®é¢˜
            var sceneView = new ListIconCellView()
            {
                Y = functionView.Bottom,
            };
            helpView.AddChidren(sceneView);
            sceneView.BtnTilte.TextID = StringId.SceneQuestion;
            sceneView.BtnIcon.UnSelectedImagePath = "PersonalCenter/Support/Scene.png";
            Action sceneAction = () =>
            {
                OpenQuestionListPage(2);
            };
            sceneView.GoAction = functionAction;
            #endregion
            #region APP使用问题
            var appUseView = new ListIconCellView()
            {
                Y = sceneView.Bottom,
            };
            helpView.AddChidren(appUseView);
            appUseView.BtnTilte.TextID = StringId.AppUsageAssistance;
            appUseView.BtnIcon.UnSelectedImagePath = "PersonalCenter/Support/Help.png";
            appUseView.LineView.RemoveFromParent();
            Action appUseAction = () =>
            {
                OpenQuestionListPage(3);
            };
            appUseView.GoAction = appUseAction;
            #endregion
            #endregion
            #region question View
            int qY = Application.GetRealHeight(328);
            var questionView = new FrameLayout()
            {
                Y = qY,
                Height = bodyView.Height - qY,
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(questionView);
            var questionTitle = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(10),
                Height = Application.GetRealHeight(28),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                Width = Application.GetRealWidth(200),
                Text = Language.StringByID(StringId.CommonQuestion) + ":"
            };
            questionView.AddChidren(questionTitle);
            #endregion
            #region åŠŸèƒ½æŒ‰é’®
            btnMenu = new Button()
            {
                Y = Application.GetRealHeight(542),
                X = Application.GetRealWidth(302),
                Width = Application.GetRealWidth(58),
                Height = Application.GetRealWidth(58),
                UnSelectedImagePath = "PersonalCenter/Support/Menu.png",
                SelectedImagePath = "PersonalCenter/Support/Close.png",
            };
            bodyView.AddChidren(btnMenu);
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                isbtnMenuOpen = !isbtnMenuOpen;
                SetMenuButtonState(isbtnMenuOpen);
            };
            btnMenu.MouseUpEventHandler = eventHandler;
            btnTelephone = new Button()
            {
                Y = Application.GetRealHeight(494),
                X = Application.GetRealWidth(274),
                Width = Application.GetRealWidth(58),
                Height = Application.GetRealWidth(58),
                UnSelectedImagePath = "PersonalCenter/Support/Telephone.png",
                Visible = false,
            };
            bodyView.AddChidren(btnTelephone);
            btnTelephone.MouseUpEventHandler = (sender, e) =>
            {
                OpenGetSupportPage();
            };
            btnSendMes = new Button()
            {
                Y = Application.GetRealHeight(590),
                X = Application.GetRealWidth(274),
                Width = Application.GetRealWidth(58),
                Height = Application.GetRealWidth(58),
                UnSelectedImagePath = "PersonalCenter/Support/SendMessage.png",
                Visible = false,
            };
            bodyView.AddChidren(btnSendMes);
            btnSendMes.MouseUpEventHandler = (sender, e) =>
            {
                OpenGetSupportPage();
            };
            #endregion
        }
        /// <summary>
        /// æ˜¯å¦å±•å¼€
        /// </summary>
        /// <param name="isOpen"></param>
        void SetMenuButtonState(bool isOpen)
        {
            btnMenu.IsSelected = isOpen;
            btnTelephone.Visible = isOpen;
            btnSendMes.Visible = isOpen;
            if (isOpen)
            {
                //展开
            }
            else
            {
                //关闭隐藏
            }
        }
        /// <summary>
        /// æ‰“开问题列表页面
        /// </summary>
        /// <param name="questionType">1:功能问题 2:场景问题 3:APP使用辅助</param>
        void OpenQuestionListPage(int questionType)
        {
            int titleId = 0;
            if (questionType == 1)
            {
                titleId = StringId.FunctionalQuestion;
            }
            else if (questionType == 2)
            {
                titleId = StringId.SceneQuestion;
            }
            else if (questionType == 3)
            {
                titleId = StringId.AppUsageAssistance;
            }
            var mPage = new QuestionListPage();
            MainPage.BasePageView.AddChidren(mPage);
            mPage.LoadPage(titleId);
            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
        }
        /// <summary>
        /// æ‰“开获取支持电话页面
        /// </summary>
        void OpenGetSupportPage()
        {
            var mPage = new GetSupportPage();
            MainPage.BasePageView.AddChidren(mPage);
            mPage.LoadPage();
            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/GetSupport/GetSupportPage.cs
File was renamed from HDL_ON/UI/UI2/4-PersonalCenter/GetSupportPage.cs
@@ -4,10 +4,19 @@
namespace HDL_ON.UI
{
    /// <summary>
    /// èŽ·å–æ”¯æŒç”µè¯é¡µé¢
    /// </summary>
    public class GetSupportPage : FrameLayout
    {
        /// <summary>
        ///
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        ///
        /// </summary>
        public GetSupportPage()
        {
            bodyView = this;
@@ -73,7 +82,7 @@
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.TextFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Text = "hdltickets@hdlautomation.com",
                Text = Constant.SUPPORT_EMAIL,
            };
            emailRow.AddChidren(btnEmailText);
            emailRow.AddChidren(new Button() { X = Application.GetRealWidth(16), Y = Application.GetRealWidth(49), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
HDL_ON/UI/UI2/4-PersonalCenter/GetSupport/QuestionListPage.cs
New file
@@ -0,0 +1,66 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
namespace HDL_ON.UI
{
    /// <summary>
    /// é—®é¢˜åˆ—表页面
    /// åŠŸèƒ½é—®é¢˜ã€åœºæ™¯é—®é¢˜ã€APP使用辅助
    /// </summary>
    public class QuestionListPage : FrameLayout
    {
        /// <summary>
        /// bodyView
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// å½“前
        /// </summary>
        VerticalScrolViewLayout bodyScrolView;
        /// <summary>
        /// emptyTipView
        /// </summary>
        EmptyTipView emptyTipView;
        /// <summary>
        ///
        /// </summary>
        public QuestionListPage()
        {
            bodyView = this;
        }
        /// <summary>
        /// åŠ è½½æ˜¾ç¤ºç½‘é¡µ
        /// </summary>
        /// <param name="titleId"></param>
        public void LoadPage(int titleId)
        {
            new TopViewDiv(bodyView, Language.StringByID(titleId)).LoadTopView();
            int bodyY = Application.GetRealHeight(64);
            bodyScrolView = new VerticalScrolViewLayout()
            {
                Y = bodyY,
                Height = bodyView.Height - bodyY,
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(bodyScrolView);
            AddEmptyTipView();
        }
        /// <summary>
        /// æ·»åŠ å†…å®¹ä¸ºç©ºæç¤ºé¡µé¢
        /// </summary>
        void AddEmptyTipView()
        {
            emptyTipView = new EmptyTipView()
            {
                Gravity = Gravity.Center
            };
            bodyView.AddChidren(emptyTipView);
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/AddMemberScanPage.cs
@@ -70,7 +70,7 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(244),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                BorderWidth = 0,
                BorderColor = 0x00000000,
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/ChooseShareMemberTargetListPage.cs
@@ -77,7 +77,7 @@
                Y = Application.GetRealHeight(519 + 64),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                BackgroundColor = CSS_Color.MainColor,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainBackgroundColor,
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberFunctionPermissionPage.cs
@@ -119,7 +119,7 @@
                Y = Application.GetRealHeight(519 + 64),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                BackgroundColor = CSS_Color.MainColor,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainBackgroundColor,
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberManagementPageBLL.cs
@@ -69,22 +69,22 @@
                var responeObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ResidenceMemberInfo>>(responePack.Data.ToString());
                foreach (var mInfo in responeObj)
                {
                    ResponsePack memberInfoResponePack = new HttpServerRequest().GetResidenceMemberAccountInfo(mInfo.childAccountId);
                    var dataStr = JObject.FromObject(memberInfoResponePack.ResponseData);
                    FileStream fs = null;
                    //ResponsePack memberInfoResponePack = new HttpServerRequest().GetResidenceMemberAccountInfo(mInfo.childAccountId);
                    //var dataStr = JObject.FromObject(memberInfoResponePack.ResponseData);
                    //FileStream fs = null;
                    try
                    {
                        var headImageString = dataStr.GetValue("HeadImage").ToString();
                        if (!string.IsNullOrEmpty(headImageString))
                        {
                            var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(headImageString);
                            var headImageBytes = Newtonsoft.Json.JsonConvert.DeserializeObject<byte[]>(jsonString);
                            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/", mInfo.childAccountId + ".png");
                            fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
                            fs.Write(headImageBytes, 0, headImageBytes.Length);
                            fs.Flush();
                            mInfo.headImagePagePath = filePath;
                        }
                        //var headImageString = dataStr.GetValue("HeadImage").ToString();
                        //if (!string.IsNullOrEmpty(headImageString))
                        //{
                        //    var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(headImageString);
                        //    var headImageBytes = Newtonsoft.Json.JsonConvert.DeserializeObject<byte[]>(jsonString);
                        //    var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/", mInfo.childAccountId + ".png");
                        //    fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
                        //    fs.Write(headImageBytes, 0, headImageBytes.Length);
                        //    fs.Flush();
                        //    mInfo.headImagePagePath = filePath;
                        //}
                        if(string.IsNullOrEmpty(mInfo.nickName))
                        {
                            mInfo.nickName = mInfo.UserName;
@@ -96,11 +96,11 @@
                    }
                    finally
                    {
                        if (fs != null)
                        {
                            fs.Close();
                        }
                        //-----------获取住宅下子账号的共享数据列表
                        //if (fs != null)
                        //{
                        //    fs.Close();
                        //}
                        ////-----------获取住宅下子账号的共享数据列表
                        LoadMethod_GetMemberSharedDataList(mInfo);
                    }
                    residenceMemberInfos.Add(mInfo);
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberPermissionPage.cs
@@ -54,7 +54,7 @@
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                Text = memberInfo.nickName + "(" + memberInfo.UserName + ")",
                Text = memberInfo.nickName + "(" + memberInfo.Account + ")",
            };
            headPortraitView.AddChidren(btnMemberName);
@@ -226,7 +226,8 @@
            btnDelMember = new Button()
            {
                Y = Application.GetRealHeight(617),
                Height = MainPage.Increase ? Application.GetRealHeight(70) : Application.GetRealHeight(50),
                //Height = MainPage.Increase ? Application.GetRealHeight(70) : Application.GetRealHeight(50),
                Height = Application.GetRealHeight(50),
                TextAlignment = TextAlignment.Center,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.WarningColor,
HDL_ON/UI/UI2/4-PersonalCenter/MyQRCodePage.cs
New file
@@ -0,0 +1,117 @@
using System;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    /// <summary>
    /// æˆ‘的二维码页面
    /// </summary>
    public class MyQRCodePage : FrameLayout
    {
        FrameLayout bodyView;
        public MyQRCodePage()
        {
            bodyView = this;
        }
        public void LoadPage()
        {
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(StringId.MyQRcode)).LoadTopView();
            int backViewHeight = Application.GetRealHeight(132) + Application.GetRealWidth(266);
            FrameLayout backView = new FrameLayout()
            {
                Y = Application.GetRealHeight(144),
                X = Application.GetRealWidth(20),
                Height = backViewHeight,
                Width = Application.GetRealWidth(335),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(8),
            };
            bodyView.AddChidren(backView);
            #region å¤´åƒã€æ˜µç§°ã€å¸å·
            FrameLayout headView = new FrameLayout()
            {
                Y = Application.GetRealHeight(16),
                Height = Application.GetRealHeight(60),
            };
            backView.AddChidren(headView);
            ImageView headImage = new ImageView()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetMinRealAverage(60),
                Height = Application.GetMinRealAverage(60),
                Radius = (uint)Application.GetMinRealAverage(30),
                ImagePath = UserInfo.Current.headImagePagePath,
            };
            headView.AddChidren(headImage);
            //用户名称
            var btnUserName = new Button()
            {
                X = headImage.Right + Application.GetRealWidth(12),
                Width = Application.GetRealWidth(200),
                Height = Application.GetRealHeight(30),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.UsersWhoNameIsEmpty,
                IsBold = true
            };
            headView.AddChidren(btnUserName);
            if (!string.IsNullOrEmpty(UserInfo.Current.userName))
            {
                btnUserName.Text = UserInfo.Current.userName;
            }
            //用户帐号
            var btnEmail = new Button()
            {
                X = headImage.Right + Application.GetRealWidth(12),
                Y = btnUserName.Bottom,
                Height = Application.GetRealHeight(30),
                TextAlignment = TextAlignment.TopLeft,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = UserInfo.Current.accountString
            };
            headView.AddChidren(btnEmail);
            #endregion
            //二维码
            int codeWidth = Application.GetRealWidth(266);
            ImageView codeImage = new ImageView()
            {
                X = Application.GetRealWidth(35),
                Y = Application.GetRealHeight(104),
                Height = codeWidth,
                Width = codeWidth,
                ImageBytes = Scan.BytesFromText(UserInfo.Current.accountString, codeWidth, codeWidth),
            };
            backView.AddChidren(codeImage);
            ////二维码中心头像
            //int imageWidth = Application.GetMinRealAverage(60);
            //int imageX = codeImage.X + (codeWidth - imageWidth) / 2;
            //int imageY = codeImage.Y + (codeWidth - imageWidth) / 2;
            //ImageView headImage2 = new ImageView()
            //{
            //    X = imageX,
            //    Y = imageY,
            //    Width = imageWidth,
            //    Height = imageWidth,
            //    ImagePath = UserInfo.Current.headImagePagePath,
            //    BorderColor = CSS_Color.MainBackgroundColor,
            //    BorderWidth = (uint)Application.GetRealWidth(2),
            //    Radius = (uint)Application.GetMinRealAverage(30),
            //};
            //backView.AddChidren(headImage2);
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/MyServerInfoPage.cs
New file
@@ -0,0 +1,106 @@
using System;
using HDL_ON.UI.CSS;
using Shared;
using Xamarin.Essentials;
namespace HDL_ON.UI
{
    /// <summary>
    /// æˆ‘的服务器信息页面
    /// </summary>
    public class MyServerInfoPage : FrameLayout
    {
        FrameLayout bodyView;
        public MyServerInfoPage()
        {
            bodyView = this;
        }
        public void LoadPage()
        {
            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
            //服务器信息
            new TopViewDiv(bodyView, Language.StringByID(StringId.ServerInformation)).LoadTopView();
            ImageView imageView = new ImageView()
            {
                Y = Application.GetMinRealAverage(88),
                Width = Application.GetMinRealAverage(200),
                Height = Application.GetMinRealAverage(180),
                ImagePath = "PersonalCenter/ServerInfo.png",
                Gravity = Gravity.CenterHorizontal
            };
            bodyView.AddChidren(imageView);
            var serverBtn = new Button()
            {
                X = Application.GetRealWidth(40),
                Y = imageView.Bottom + Application.GetRealHeight(12),
                Width = Application.GetRealWidth(295),
                Height = Application.GetRealHeight(22),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                //Text = "当前账号服务器所属:中国,代码xxxx",
                IsBold = true
            };
            bodyView.AddChidren(serverBtn);
            var tipBtn = new Button()
            {
                X = Application.GetRealWidth(40),
                Y = serverBtn.Bottom + Application.GetRealHeight(12),
                Width = Application.GetRealWidth(295),
                Height = Application.GetRealHeight(80),
                TextAlignment = TextAlignment.TopLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                //Text = "*服务器是您当前云端数据存储的所在区域,无需必要,我们不建议发生迁移",
                TextID = StringId.CurrentAccountServerOwnershipTip,
                IsMoreLines = true
            };
            bodyView.AddChidren(tipBtn);
            var callBtn = new TextButton()
            {
                X = Application.GetRealWidth(40),
                Y = Application.GetRealHeight(606),
                Width = Application.GetRealWidth(168),
                Height = Application.GetRealHeight(22),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.TextFontSize,
                //Text = "*若需要迁移服务器,请拨打",
                TextID = StringId.ToMigrateTheServerPleaseCall,
            };
            bodyView.AddChidren(callBtn);
            callBtn.Width = callBtn.GetTextWidth() + Application.GetRealWidth(2);
            var phoneBtn = new TextButton()
            {
                X = callBtn.Right + Application.GetRealHeight(2),
                Y = Application.GetRealHeight(606),
                Width = Application.GetRealWidth(200),
                Height = Application.GetRealHeight(22),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                Text = "400-855-8535",
                IsBold = true
            };
            bodyView.AddChidren(phoneBtn);
            phoneBtn.MouseUpEventHandler += (sender, e) =>
            {
                PhoneDialer.Open(Constant.SUPPORT_TELEPHONENUMBER);
            };
            serverBtn.Text = Language.StringByID(StringId.CurrentAccountServerOwnership) + UserInfo.Current.GlobalRegion.regionName;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
@@ -292,7 +292,8 @@
        #region æˆå‘˜ç®¡ç†
        void LoadEvent_GoMemberManagement()
        {
            EventHandler<MouseEventArgs> eHandler = (sender, e) => {
            EventHandler<MouseEventArgs> eHandler = (sender, e) =>
            {
                var mmp = new MemberManagementPage();
                MainPage.BasePageView.AddChidren(mmp);
                mmp.LoadPage();
@@ -307,7 +308,8 @@
        #region æ·»åŠ è®¾å¤‡
        void LoadEvent_SkipbtnAddFunctionPage()
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                var page = new SearchDevicePage();
                MainPage.BasePageView.AddChidren(page);
                page.LoadPage();
@@ -339,7 +341,13 @@
        {
            btnSupportText.MouseUpEventHandler = (sender, e) =>
            {
                var getsupportPage = new GetSupportPage();
                //var getsupportPage = new GetSupportPage();
                //MainPage.BasePageView.AddChidren(getsupportPage);
                //getsupportPage.LoadPage();
                //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                var getsupportPage = new FAQHelpPage();
                MainPage.BasePageView.AddChidren(getsupportPage);
                getsupportPage.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
@@ -13,6 +13,11 @@
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// å½“前
        /// </summary>
        VerticalScrolViewLayout bodyScrolView;
        /// <summary>
        /// å¤´åƒåŒºåŸŸ
        /// </summary>
        FrameLayout headPortraitView;
@@ -183,13 +188,27 @@
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(StringId.PersonalCenter)).LoadTopView();
            headPortraitView = new FrameLayout()
            bodyScrolView = new VerticalScrolViewLayout()
            {
                Y = Application.GetRealHeight(64),
                VerticalScrollBarEnabled = false,
                Height = Application.GetRealHeight(551),
            };
            bodyView.AddChidren(bodyScrolView);
            if (MainPage.Increase)
            {
                bodyScrolView.Height = Application.GetRealHeight(541);
            }
            headPortraitView = new FrameLayout()
            {
                //Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(124),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(headPortraitView);
            bodyScrolView.AddChidren(headPortraitView);
            userHeadImageView = new ImageView()
            {
@@ -202,17 +221,23 @@
            headPortraitView.AddChidren(userHeadImageView);
            #region ä¸ªäººä¿¡æ¯é€‰é¡¹åŒºåŸŸ
            var topPaddingView = new FrameLayout()
            {
                Height = Application.GetRealHeight(8)
            };
            bodyScrolView.AddChidren(topPaddingView);
            /// <summary>
            /// ä¸ªäººä¿¡æ¯é€‰é¡¹åŒºåŸŸ
            /// </summary>
            optionListView = new VerticalScrolViewLayout()
            {
                Y = headPortraitView.Bottom + Application.GetRealHeight(8),
                //Y = headPortraitView.Bottom + Application.GetRealHeight(8),
                Height = Application.GetRealHeight(51 * 6),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                ScrollEnabled = false,
            };
            bodyView.AddChidren(optionListView);
            bodyScrolView.AddChidren(optionListView);
            #region ä¸ªäººé€‰é¡¹-名字区域
            /// <summary>
            /// ä¸ªäººé€‰é¡¹-名字区域
@@ -477,16 +502,21 @@
            #endregion
            #region è§£é”è®¾ç½®åŒºåŸŸ
            var topPaddingView2 = new FrameLayout()
            {
                Height = Application.GetRealHeight(8)
            };
            bodyScrolView.AddChidren(topPaddingView2);
            /// <summary>
            /// è§£é”è®¾ç½®åŒºåŸŸ
            /// </summary>
            interpretationSettingsView = new FrameLayout()
            {
                Y = optionListView.Bottom + Application.GetRealHeight(8),
                //Y = optionListView.Bottom + Application.GetRealHeight(8),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Height = Application.GetRealHeight(65),
                Height = Application.GetRealHeight(66),
            };
            bodyView.AddChidren(interpretationSettingsView);
            bodyScrolView.AddChidren(interpretationSettingsView);
            btnInterpretationSettingsTitle = new Button()
            {
                X = Application.GetRealWidth(16),
@@ -497,6 +527,7 @@
                TextID = StringId.InterpretationSettings,
            };
            interpretationSettingsView.AddChidren(btnInterpretationSettingsTitle);
            btnInterpretationSettingsTip = new Button()
            {
                X = Application.GetRealWidth(16),
@@ -518,6 +549,26 @@
                UnSelectedImagePath = "Public/Right.png",
            };
            interpretationSettingsView.AddChidren(btnInterpretationSettingsRight);
            interpretationSettingsView.AddChidren(new LineView(interpretationSettingsView.Height));
            #endregion
            #region æœåŠ¡å™¨ä¿¡æ¯
            ListCellView myServerInfoCellView = new ListCellView()
            {
            };
            bodyScrolView.AddChidren(myServerInfoCellView);
            //跳转服务器信息
            Action selectAction = () =>
            {
                var myServerInfoPage = new MyServerInfoPage();
                MainPage.BasePageView.AddChidren(myServerInfoPage);
                myServerInfoPage.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            myServerInfoCellView.GoAction = selectAction;
            myServerInfoCellView.BtnTilte.Text = Language.StringByID(StringId.ServerInformation);
            myServerInfoCellView.LineView.RemoveFromParent();
            #endregion
            btnLogout = new Button()
HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
@@ -19,6 +19,7 @@
            LoadEvent_ChangeBindEmail();
            LoadEvent_ChangeBindPhone();
            LoadEvent_SkipModifyPassword();
            LoadEvent_MyQRcode();
            GetUserInfo();
        }
@@ -231,6 +232,26 @@
            btnEditUserNameIcon.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// åŠ è½½æˆ‘çš„äºŒç»´ç äº‹ä»¶
        /// </summary>
        void LoadEvent_MyQRcode()
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                //我的二维码
                var aep = new MyQRCodePage();
                MainPage.BasePageView.AddChidren(aep);
                aep.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            _QRcodeView.MouseUpEventHandler = eventHandler;
            btnQRcode.MouseUpEventHandler = eventHandler;
            btnQRcodeIcon.MouseUpEventHandler = eventHandler;
            btnQRcodeRight.MouseUpEventHandler = eventHandler;
        }
        #region ä¿®æ”¹ç»‘定邮箱
        /// <summary>
        /// ä¿®æ”¹ç»‘定邮箱
HDL_ON/UI/UI2/4-PersonalCenter/ResetAccountPassword/ResetPasswordPage.cs
@@ -83,9 +83,8 @@
                Foucs = true
            };
            rowView.AddChidren(etPassword);
            var lineView = new LineView();
            var lineView = new LineView(rowView.Height);
            rowView.AddChidren(lineView);
            lineView.Y = rowView.Height - lineView.Height;
            #endregion
            #region å†æ¬¡è¾“入新密码
@@ -126,8 +125,8 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(224),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextID = StringId.Confirm,
HDL_ON/UI/UI2/4-PersonalCenter/ResetAccountPassword/ResetPasswordVerificationCodePage.cs
@@ -253,7 +253,7 @@
                Y = Application.GetRealHeight(276),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Height = Application.GetRealWidth(44),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextAlignment = TextAlignment.Center,
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs
@@ -254,8 +254,8 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(582),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                BackgroundColor = CSS_Color .MainColor,
                TextColor = CSS_Color.MainBackgroundColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/ResidentialManagePage.cs
@@ -57,6 +57,25 @@
        /// </summary>
        Button btnCommissioningAuthoritySwitchIcon;
        #region è¿‡æˆ·
        /// <summary>
        ///
        /// </summary>
        FrameLayout transferRow;
        /// <summary>
        ///
        /// </summary>
        Button btnTransferTitle;
        /// <summary>
        ///
        /// </summary>
        Button btnTrasferExplan;
        /// <summary>
        ///
        /// </summary>
        Button btnTrasferSkinIcon;
        #endregion
        #endregion
        /// <summary>
        /// æ›´æ–°ä½å®…名称的回调函数
@@ -301,7 +320,7 @@
            #endregion
            #region è¿‡æˆ·
            FrameLayout transferRow;
            transferRow = new FrameLayout()
            {
                Y = administratorPermissionMigrationRow.Bottom,
@@ -310,7 +329,7 @@
            };
            bodyView.AddChidren(transferRow);
            var btnTransferTitle = new Button()
            btnTransferTitle = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(10),
@@ -323,7 +342,7 @@
            };
            transferRow.AddChidren(btnTransferTitle);
            var btnTrasferExplan = new Button()
            btnTrasferExplan = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = btnTransferTitle.Bottom,
@@ -336,7 +355,6 @@
            };
            transferRow.AddChidren(btnTrasferExplan);
            Button btnTrasferSkinIcon;
            btnTrasferSkinIcon = new Button()
            {
                X = Application.GetRealWidth(343),
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/ResidentialManagePageBLL.cs
@@ -14,6 +14,7 @@
            LoadEvent_SkipRoomsPage();
            LoadEvent_EditResidencName();
            LoadEvent_EditResidencAddress();
            //LoadEvent_SkipTransferConfirmPage();
        }
        /// <summary>
@@ -45,7 +46,7 @@
                        {
                            var responsePack = new HttpServerRequest().EditResidenceInfo(0, str);
                            if (responsePack.Code.ToUpper() == StateCode.SUCCESS)
                            if (responsePack.Code == StateCode.SUCCESS)
                            {
                                Application.RunOnMainThread(() =>
                                {
@@ -81,6 +82,7 @@
            btnResidenceName.MouseUpEventHandler = eventHandler;
            btnEditResidenceNameIcon.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// åŠ è½½ä¿®æ”¹ä½å®…åœ°å€äº‹ä»¶
        /// </summary>
@@ -207,5 +209,23 @@
                //{ IsBackground = true }.Start();
            };
        }
        /// <summary>
        /// è·³è½¬è¿‡æˆ·é¡µé¢
        /// </summary>
        void LoadEvent_SkipTransferConfirmPage()
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                var skipPage = new TransferConfirmPage();
                MainPage.BasePageView.AddChidren(skipPage);
                skipPage.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            transferRow.MouseUpEventHandler = eventHandler;
            btnTrasferExplan.MouseUpEventHandler = eventHandler;
            btnTrasferSkinIcon.MouseUpEventHandler = eventHandler;
            btnTransferTitle.MouseUpEventHandler = eventHandler;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/RoomEditFunctionPage.cs
@@ -165,8 +165,8 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(582),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                BackgroundColor = CSS_Color.MainColor,
                TextColor = CSS_Color.MainBackgroundColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/Transfer/TransferConfirmPage.cs
New file
@@ -0,0 +1,101 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
namespace HDL_ON.UI
{
    /// <summary>
    /// è¿‡æˆ·ç¡®è®¤æé†’界面
    /// </summary>
    public class TransferConfirmPage : FrameLayout
    {
        /// <summary>
        ///
        /// </summary>
        FrameLayout bodyView;
        public TransferConfirmPage()
        {
            bodyView = this;
        }
        /// <summary>
        ///
        /// </summary>
        public void LoadPage()
        {
            BackgroundColor = CSS_Color.MainBackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(StringId.Transfer)).LoadTopView();
            #region å¤´åƒ
            FrameLayout headView = new FrameLayout()
            {
                Y = Application.GetRealHeight(72),
                Height = Application.GetRealHeight(132),
            };
            bodyView.AddChidren(headView);
            ImageView myHeadImage = new ImageView()
            {
                X = Application.GetRealWidth(48),
                Y = Application.GetRealHeight(96),
                Width = Application.GetRealWidth(84),
                Height = Application.GetRealWidth(84),
                Radius = (uint)Application.GetRealWidth(42),
                ImagePath = UserInfo.Current.headImagePagePath,
                Gravity = Gravity.CenterVertical,
            };
            headView.AddChidren(myHeadImage);
            ImageView transferImage = new ImageView()
            {
                X = Application.GetRealWidth(144),
                Y = Application.GetRealHeight(96),
                Width = Application.GetRealWidth(84),
                Height = Application.GetRealWidth(32),
                ImagePath = "PersonalCenter/Transfer.png",
                Gravity = Gravity.Center,
            };
            headView.AddChidren(transferImage);
            ImageView otherHeadImage = new ImageView()
            {
                X = Application.GetRealWidth(231),
                Y = Application.GetRealHeight(96),
                Width = Application.GetRealWidth(101),
                Height = Application.GetRealWidth(101),
                ImagePath = "PersonalCenter/Head.png",
                Gravity = Gravity.CenterVertical,
            };
            headView.AddChidren(otherHeadImage);
            #endregion
            var btnTip = new Button()
            {
                Y = headView.Bottom,
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(22),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                Text = "您的住宅将过户给其他HDL账号",
            };
            bodyView.AddChidren(btnTip);
            //
            var btnConfirm = new ConfirmButton()
            {
                Y = Application.GetRealHeight(456),
                Text = "确认过户",
            };
            bodyView.AddChidren(btnConfirm);
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/SearchDevice/VoicePanelSceneListPage.cs
@@ -84,8 +84,8 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(582),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                BackgroundColor = CSS_Color.MainColor,
                TextColor = CSS_Color.MainBackgroundColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
HDL_ON/UI/UI2/4-PersonalCenter/SearchDevice/VoicePanelScenePage.cs
@@ -174,8 +174,8 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(582),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Radius = (uint)Application.GetRealHeight(22),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                BackgroundColor = CSS_Color.MainColor,
                TextColor = CSS_Color.MainBackgroundColor,
                TextSize = CSS_FontSize.SubheadingFontSize,