wxr
2022-11-11 b47f91b91bc5371bba0c8801dbd648772ab331fc
Merge branch 'Dev-Branch' into wjc
15个文件已添加
37个文件已修改
886 ■■■■ 已修改文件
HDL-ON_Android/Assets/Language.ini 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/electricalmechanical_arm.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/sensormmv_pose.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Properties/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/electricalmechanical_arm.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensormmv_pose.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/ApiUtlis.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/HDLCommon.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpServerRequest.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewAPI.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewApiRes.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/DB_ResidenceData.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Enumerative/MyEnum.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Function.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/FunctionList.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/MainPage.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/TopViewDiv.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/LoginPage.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/ClassificaitionPublicBLL.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionPage.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CancelAccountPage.cs 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/MechanicalArmPage.cs 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorGasPage.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini
@@ -560,7 +560,10 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Open
577=Close
578=Mechanical Arm
579=Cancellation
@@ -1786,6 +1789,10 @@
573=在家
574=制热除湿
575=选择模式
576=阀门已关闭
577=阀门已打开
578=机械手
579=立即注销
@@ -2988,7 +2995,10 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Открыть
577=Закрыть
578=Mechanical Arm
579=Cancellation
2532=Visitor Invitation Record
@@ -4198,9 +4208,10 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Abrir
577=Cerrar
578=Mechanical Arm
579=Cancellation
2532=Visitor Invitation Record
2533=Visitor management
@@ -5395,7 +5406,9 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Отворено
577=Затвори
579=Cancellation
1000=Влажност в стаята
@@ -5412,7 +5425,7 @@
1011=Синхронизация
1012=Изберете скорост на вятъра
1013=степен
1014=1014=Моля, потвърдете дали филтърният елемент действително е бил нулиран и работете с оборудването съгласно инструкциите на {0}, за да пренастроите живота на филтърния елемент {0}
1014=Моля, потвърдете дали филтърният елемент действително е бил нулиран и работете с оборудването съгласно инструкциите на {0}, за да пренастроите живота на филтърния елемент {0}
1015=Ниска степен
1016=Средна степен
1017=Висока степен
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png
HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/electricalmechanical_arm.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/sensormmv_pose.png
HDL-ON_Android/HDL-ON_Android.csproj
@@ -389,6 +389,13 @@
    <AndroidAsset Include="Assets\h5\static\img\co2-reduction-ic.9c75228c.png" />
    <AndroidAsset Include="Assets\h5\static\img\equal-plant-ic.7ef6befa.png" />
    <AndroidAsset Include="Assets\h5\static\img\coal-save-ic.6c5fd125.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\sensormmv_pose.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmBg.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmOnBg.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\FunctionBg\MechanicalArmFunctionBg.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\electricalmechanical_arm.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_blue.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_white.png" />
  </ItemGroup>
  <ItemGroup>
    <AndroidResource Include="Resources\values\colors.xml" />
@@ -1598,6 +1605,7 @@
    <Folder Include="Assets\Phone\FunctionIcon\CAC\" />
    <Folder Include="Assets\Phone\FunctionIcon\Panel\" />
    <Folder Include="Assets\Phone\FunctionIcon\Inverter\" />
    <Folder Include="Assets\Phone\FunctionIcon\Electrical\MechanicalArm\" />
  </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_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.6.2" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202211041">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.6.2" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202211081">
    <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
    <!--友盟-->
    <!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -490,6 +490,7 @@
        <Folder Include="Resources\Phone\FunctionIcon\CAC\" />
        <Folder Include="Resources\Phone\FunctionIcon\Panel\" />
        <Folder Include="Resources\Phone\FunctionIcon\Inverter\" />
        <Folder Include="Resources\Phone\FunctionIcon\Electrical\MechanicalArm\" />
    </ItemGroup>
    <ItemGroup>
        <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -1547,6 +1548,13 @@
      <BundleResource Include="Resources\h5\static\img\co2-reduction-ic.9c75228c.png" />
      <BundleResource Include="Resources\h5\static\img\equal-plant-ic.7ef6befa.png" />
      <BundleResource Include="Resources\h5\static\img\coal-save-ic.6c5fd125.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\sensormmv_pose.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmBg.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmOnBg.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\FunctionBg\MechanicalArmFunctionBg.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\electricalmechanical_arm.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_white.png" />
    </ItemGroup>
    <ItemGroup>
      <ITunesArtwork Include="iTunesArtwork" />
HDL-ON_iOS/Resources/Language.ini
@@ -560,7 +560,10 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Open
577=Close
578=Mechanical Arm
579=Cancellation
@@ -1786,6 +1789,10 @@
573=在家
574=制热除湿
575=选择模式
576=阀门已关闭
577=阀门已打开
578=机械手
579=立即注销
@@ -2988,7 +2995,10 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Открыть
577=Закрыть
578=Mechanical Arm
579=Cancellation
2532=Visitor Invitation Record
@@ -4198,9 +4208,10 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Abrir
577=Cerrar
578=Mechanical Arm
579=Cancellation
2532=Visitor Invitation Record
2533=Visitor management
@@ -5395,7 +5406,9 @@
573=At home
574=Heating and dehumidification
575=Select Mode
576=Отворено
577=Затвори
579=Cancellation
1000=Влажност в стаята
@@ -5412,7 +5425,7 @@
1011=Синхронизация
1012=Изберете скорост на вятъра
1013=степен
1014=1014=Моля, потвърдете дали филтърният елемент действително е бил нулиран и работете с оборудването съгласно инструкциите на {0}, за да пренастроите живота на филтърния елемент {0}
1014=Моля, потвърдете дали филтърният елемент действително е бил нулиран и работете с оборудването съгласно инструкциите на {0}, за да пренастроите живота на филтърния елемент {0}
1015=Ниска степен
1016=Средна степен
1017=Висока степен
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/electricalmechanical_arm.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensormmv_pose.png
HDL_ON/Common/ApiUtlis.cs
@@ -322,7 +322,7 @@
                    //===================读取逻辑列表==========================
                    Logic.LogicList.Clear();//主页下拉强制刷新自动化列表
                    UI.UI2.Intelligence.Automation.MainView.GetLogicList();
                    //UI.UI2.Intelligence.Automation.MainView.GetLogicList();
                    //===================读取可视对讲数据==========================
                    //判断是否有可视对讲数据,有则显示可视对讲icon
@@ -352,10 +352,10 @@
                                DB_ResidenceData.Instance.SaveResidenceData();
                                Entity.DB_ResidenceData.Instance.SupportFVDevice = true;
                            }
                            else if (video.interphoneType == InterphoneType.FREEVIEW.ToString())
                            {//为全视通可视对讲
                            {
                                //为全视通可视对讲
                                DB_ResidenceData.Instance.SupportFacePass = true;
                                Entity.DB_ResidenceData.Instance.SupportVisitorManage = true;
                                Entity.DB_ResidenceData.Instance.SupportFVDevice = true;
HDL_ON/Common/HDLCommon.cs
@@ -91,7 +91,7 @@
                    {
                        if (revertObj.Data != null)
                        {
                            var appVersionRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AppVersionRes>(revertObj.Data.ToString());
                            var appVersionRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AppVersionResNew>(revertObj.Data.ToString());
                            if (appVersionRes != null)
                            {
@@ -99,24 +99,25 @@
                                {
                                    UpdateType = appVersionRes.isEnforce ? 2 : 1,
                                    NewVersion = appVersionRes.version,
                                    NewVersionUrl = appVersionRes.androidUrl
                                    NewVersionUrl = appVersionRes.packageUrl
                                };
#if __IOS__
                                mForceUpdateInfo.NewVersionUrl = appVersionRes.iosUrl;
#endif
                                //解析更新内容详情
                                var reasonStrJson = GetReasonStrJson(appVersionRes.updateDescription);
                                if (reasonStrJson != null)
                                {
                                    if (Language.CurrentLanguage == "Chinese")
                                    {
                                        mForceUpdateInfo.ReasonStr = reasonStrJson.Chinese;
                                    }
                                    else
                                    {
                                        mForceUpdateInfo.ReasonStr = reasonStrJson.English;
                                    }
                                }
                                //var reasonStrJson = GetReasonStrJson(appVersionRes.remark);
                                //if (reasonStrJson != null)
                                //{
                                //    if (Language.CurrentLanguage == "Chinese")
                                //    {
                                //        mForceUpdateInfo.ReasonStr = reasonStrJson.Chinese;
                                //    }
                                //    else
                                //    {
                                //        mForceUpdateInfo.ReasonStr = reasonStrJson.English;
                                //    }
                                //}
                                mForceUpdateInfo.ReasonStr = appVersionRes.remark;
                                Application.RunOnMainThread(() =>
                                {
HDL_ON/Common/R.cs
@@ -5,6 +5,22 @@
    public static class StringId
    {
        /// <summary>
        /// 注销
        /// </summary>
        public const int Cancellation = 579;
        /// <summary>
        /// 机械臂
        /// </summary>
        public const int MechanicalArm = 578;
        /// <summary>
        /// 阀门已打开
        /// </summary>
        public const int ValveOpened = 577;
        /// <summary>
        /// 阀门已关闭
        /// </summary>
        public const int ValveClosed = 576;
        /// <summary>
        /// 选择模式
        /// </summary>
        public const int SelectMode = 575;
HDL_ON/DAL/DriverLayer/Control.cs
@@ -1438,12 +1438,14 @@
                            case SPK.SensorGas:
                            case SPK.HvacCac:
                            case SPK.SensorHelp:
                            case SPK.MechanicalArm:
                                //设备状态推送
                                //状态更新
                                Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
                                break;
                            case SPK.SenesorMegahealth:
                            case SPK.SenesorMegahealth2:
                            case SPK.SensorMmvPose:
                                var tempStatus = localFunction.attributes.Find((sta) => sta.key == FunctionAttributeKey.TargetStatus);
                                if (tempStatus != null)
HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -1356,13 +1356,47 @@
            {
            };
            #if __IOS__
            requestObj.releaseSystem = "IOS";
            #else
            requestObj.releaseSystem = "Android";
            #endif
            var requestJson = HttpUtil.GetSignRequestJson(requestObj);
            return HttpUtil.RequestHttpsPost(NewAPI.API_POST_CheckAppVersion, requestJson);
        }
        #endregion
        #region 注销账号
        /// <summary>
        /// 获取当前版本注销账号模式
        /// </summary>
        /// <returns></returns>
        public ResponsePackNew GetUnregisterModel()
        {
            Dictionary<string, object> d = new Dictionary<string, object>();
            d.Add("version", MainPage.VersionString);
            d.Add("appCode", "1588071238036582401");
#if __IOS__
            d.Add("releaseSystem", "IOS");
#else
            d.Add("releaseSystem", "Android");
#endif
            var requestJson = HttpUtil.GetSignRequestJson(d);
            return HttpUtil.RequestHttpsPost(NewAPI.Api_Post_GetUnregisterModel, requestJson);
        }
        /// <summary>
        /// 注销账号
        /// </summary>
        /// <returns></returns>
        public ResponsePackNew Unregister(string pwd)
        {
            Dictionary<string, object> d = new Dictionary<string, object>();
            d.Add("userId", UserInfo.Current.ID);
            d.Add("pwd", pwd);
            var requestJson = HttpUtil.GetSignRequestJson(d);
            return HttpUtil.RequestHttpsPost(NewAPI.Api_Post_Unregister, requestJson);
        }
        #endregion
        #region 获取天气部分
HDL_ON/DAL/Server/NewAPI.cs
@@ -348,13 +348,20 @@
        /// <summary>
        /// 检测更新,是否需要强制更新
        /// </summary>
        public const string API_POST_CheckAppVersion = "/smart-footstone/app/appVersion/check";
        public const string API_POST_CheckAppVersion = "/basis-footstone/app/appVersion/check";
        ///// <summary>
        ///// 查询APP最新版本
        ///// </summary>
        //public const string API_POST_GetAppVersion = "/smart-footstone/app/getAppVersion";
        #endregion
        /// <summary>
        /// 获取当前版本注销账号模式
        /// </summary>
        public const string Api_Post_GetUnregisterModel = "/basis-footstone/app/appVersion/unregisterModel";
        /// <summary>
        /// 注销账号
        /// </summary>
        public const string Api_Post_Unregister = "/basis-footstone/member/unregister";
        #region ■  -- 房间场景背景图片上传下载接口___________________________
HDL_ON/DAL/Server/NewApiRes.cs
@@ -1220,10 +1220,31 @@
        /// 
        /// </summary>
        public string version = MainPage.VersionString;
        ///// <summary>
        ///// 软件来源,Evoyo、ON、ON_Plus
        ///// </summary>
        //public string appName = SoftwareType.ON_Plus.ToString();
        public string appCode = "1588071238036582401";
        /// <summary>
        /// 软件来源,Evoyo、ON、ON_Plus
        /// IOS、Android
        /// </summary>
        public string appName = SoftwareType.ON_Plus.ToString();
        public string releaseSystem = "";
    }
    /// <summary>
    ///
    /// </summary>
    [System.Serializable]
    public class AppVersionResNew
    {
        public string version;
        public string appName;
        public string appCode;
        public bool isEnforce;
        public string releaseSystem;
        public string packageUrl;//": "http://hdl-hz-test.oss-cn-hangzhou.aliyuncs.com/20/2022/11/51b8b0b2-0ebc-4632-a3b5-0be1e5d104e4.apk",
        public string remark;
    }
    /// <summary>
HDL_ON/Entity/DB_ResidenceData.cs
@@ -54,11 +54,33 @@
            }
        }
        [Newtonsoft.Json.JsonIgnore]
        private List<ShowFunction> showFunctions;
        /// <summary>
        /// 功能类型列表
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<ShowFunction> functionTypeList = new List<ShowFunction>();
        public List<ShowFunction> functionTypeList
        {
            get
            {
                if (showFunctions == null)
                {
                    showFunctions = new List<ShowFunction> {
                                    ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain,
                                    ShowFunction.FloorHeating,ShowFunction.Music,
                                    ShowFunction.Electric,ShowFunction.Environmental,
                                    ShowFunction.EnergyMonitoring,
                                    ShowFunction.FreshAir,ShowFunction.DoorLock,
                                    ShowFunction.Panel,ShowFunction.SecurityMonitoring,
                                    ShowFunction.Sensor,ShowFunction.VideoIntercom,
                                    ShowFunction.SecurityCenter,ShowFunction.Acst,
                                    ShowFunction.MechanicalArm };
                }
                return showFunctions;
            }
        }
        static DB_ResidenceData instance;
        public static DB_ResidenceData Instance
@@ -70,16 +92,6 @@
                    if(MainPage.NoLoginMode)
                    {
                        instance = new DB_ResidenceData();
                        instance.functionTypeList.AddRange(new List<ShowFunction> {
                                    ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain,
                                    ShowFunction.FloorHeating,ShowFunction.Music,
                                    ShowFunction.Electric,ShowFunction.Environmental,
                                    ShowFunction.EnergyMonitoring,
                                    ShowFunction.FreshAir,ShowFunction.DoorLock,
                                    ShowFunction.Panel,ShowFunction.SecurityMonitoring,
                                    ShowFunction.Sensor,ShowFunction.VideoIntercom,
                                    ShowFunction.SecurityCenter,ShowFunction.Acst,
                                });
                        instance.SaveResidenceData();
                        instance.residenceImage = "Classification/Room/Roombg.png";
                        instance.HomeGateway = new HomeGatewayInfo()
@@ -120,6 +132,7 @@
                                    ShowFunction.Panel,ShowFunction.SecurityMonitoring,
                                    ShowFunction.Sensor,ShowFunction.VideoIntercom,
                                    ShowFunction.SecurityCenter,ShowFunction.Acst,
                                    ShowFunction.MechanicalArm
                                });
                        instance.SupportFacePass = false;
                        instance.SaveResidenceData();
HDL_ON/Entity/Enumerative/MyEnum.cs
@@ -177,6 +177,10 @@
        /// 绿建科技系统
        /// </summary>
        Acst = 0x23,
        /// <summary>
        /// 机械臂
        /// </summary>
        MechanicalArm=0x24,
    }
HDL_ON/Entity/Function/Function.cs
@@ -1617,6 +1617,10 @@
        public const string SenesorMegahealth = "sensor.megahealth";
        public const string SenesorMegahealth2 = "sensor.megahealth.zg";
        /// <summary>
        /// 毫米波传感器(姿态版)
        /// </summary>
        public const string SensorMmvPose = "sensor.mmv_pose";
        /// <summary>
        /// 紧急呼叫
        /// </summary>
        public const string SensorHelp = "sensor.help";
@@ -1641,6 +1645,7 @@
            spkList.Add(SensorDryContact2);
            spkList.Add(SenesorMegahealth);
            spkList.Add(SenesorMegahealth2);
            spkList.Add(SensorMmvPose);
            return spkList;
        }
        #endregion
@@ -1912,6 +1917,7 @@
            spkList.Add(ElectricTuyaWaterValve2);
            spkList.Add(ElectricTuyaWeepRobot);
            spkList.Add(ElectricTuyaWeepRobot2);
            spkList.Add(SensorMmvPose);
            spkList.Add(SenesorMegahealth);
            spkList.Add(SenesorMegahealth2);
            return spkList;
@@ -1937,7 +1943,7 @@
                    list.Add(ElectricTuyaWeepRobot2);
                    break;
                case BrandType.All3tyBrand:
                    list.Add(SenesorMegahealth);//兆观
                    list.Add(SenesorMegahealth2);//兆观
                    break;
            }
            return list;
HDL_ON/Entity/FunctionList.cs
@@ -39,6 +39,14 @@
        /// 功能列表
        /// </summary>
        public List<Function> Functions = new List<Function>();
        /// <summary>
        /// 机械臂列表
        /// </summary>
        /// <returns></returns>
        public List<Function> GetMechanicalArmList()
        {
            return Functions.FindAll((obj) => obj.spk == SPK.MechanicalArm);
        }
        /// <summary>
        /// 绿建科技系统
HDL_ON/HDL_ON.projitems
@@ -525,6 +525,7 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Curtain\VenetianBlindsPageBLL.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\ChooseIocate.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\LogicView\ColorTemperature.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\1ContorlPage\MechanicalArmPage.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
HDL_ON/UI/MainPage.cs
@@ -116,6 +116,7 @@
            SPK.AirFreshStandard,SPK.HvacAirFresh,
            SPK.AirSwitch,
            SPK.PanelSocket,SPK.ElectricSocket,
            SPK.MechanicalArm,
        };
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -136,6 +136,10 @@
                        var tyWaterValve = new TuyaWaterValvePage();
                        tyWaterValve.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                        break;
                    case SPK.MechanicalArm:
                        var mechanicalArmPage = new MechanicalArmPage();
                        mechanicalArmPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                        break;
                    case SPK.ElectricTuyaWeepRobot:
                    case SPK.ElectricTuyaWeepRobot2:
                        var weepRobot = new TuyaWeepRobotPage();
@@ -180,6 +184,7 @@
                        doorwindowPage.ShowColltionButton = false;
                        doorwindowPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                        break;
                    case SPK.SensorMmvPose:
                    case SPK.SenesorMegahealth:
                    case SPK.SenesorMegahealth2:
                        var smPage = new SenesorMegahealthPage();
HDL_ON/UI/UI0-Public/TopViewDiv.cs
@@ -173,7 +173,7 @@
                Y = Application.GetRealHeight(10),
                Width = Application.GetMinRealAverage(28+37),
                Height = Application.GetMinRealAverage(28+19),
                Text = "组合调光",
                TextID = StringId.CombinedDimming,
                TextSize = CSS_FontSize.TextFontSize,
                TextColor = CSS_Color.MainColor,
                IsMoreLines = true
HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -219,7 +219,7 @@
                    etAccount.Text = "tf@smarttech.com.ua";
                    etAccount.Text = "13288623489";
                    etAccount.Text = "455740454@qq.com";
                    etAccount.Text = "13799777637";
                    etAccount.Text = "13335135632";
                }
                else
                {
@@ -253,9 +253,9 @@
                }
                b = !b;
                etPassword.Text = "123456";
                if(etAccount.Text == "13799777637")
                if(etAccount.Text == "13335135632")
                {
                    etPassword.Text = "xiamen1990";
                    etPassword.Text = "borui1123";
                }
                //etPassword.Text = "Hdl85521566";
                btnLogin.IsSelected = true;
@@ -794,6 +794,21 @@
#if DEBUG
                var mechanicalArm = new Function()
                {
                    sid = "mechanicalArm1",
                    deviceId = "mechanicalArm1",
                    name = Language.CurrentLanguage == "Chinese" ? "机械手" : "Mechanical Arm",
                    spk = SPK.MechanicalArm,
                    roomIds = new List<string>() { "1405771024583090178" },
                    attributes = new List<FunctionAttributes>()
                    {
                        new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
                    },
                };
                mechanicalArm.SaveFunctionFile();
                var lightRgbw1 = new Function()
                {
                    sid = "light11",
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -903,7 +903,7 @@
                };
                if (function.spk == SPK.SenesorMegahealth)
                if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
@@ -1116,7 +1116,7 @@
                }
                
                else if (function.spk == SPK.SenesorMegahealth)
                else if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
                {
                    //btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}.png";
                    //btnIcon.SelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -408,7 +408,7 @@
                                        state = function.trait_on_off.curValue.ToString() == "on";
                                    }
                                }
                                else if (function.spk == SPK.SenesorMegahealth)
                                else if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
                                {
                                    var tempStatus = function.attributes.Find((sta) => sta.key == FunctionAttributeKey.TargetStatus);
HDL_ON/UI/UI2/2-Classification/ClassificaitionPublicBLL.cs
@@ -112,10 +112,10 @@
                                    {
                                        #region 窗帘更新
                                        var onoffString = updataFunction.GetAttrState(FunctionAttributeKey.OnOff);
                                        if (onoffString == "stop")
                                        {
                                            return;
                                        }
                                        //if (onoffString == "stop")
                                        //{
                                        //    return;
                                        //}
                                        var percent = onoffString == "off" ? 0 : 100;
                                        if (updataFunction.GetAttributes().Contains(FunctionAttributeKey.Percent))
                                        {
@@ -172,7 +172,7 @@
                                        #endregion
                                    }
                                    //更新毫米波传感器状态
                                    else if(SPK.SenesorMegahealth == updataFunction.spk)
                                    else if(SPK.SenesorMegahealth == updataFunction.spk || SPK.SensorMmvPose == updataFunction.spk)
                                    {
                                        if (cTag == updataFunction.sid + "_SenesorMegahealth_Status")
                                        {
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -655,6 +655,10 @@
                int functionOnCount = 0;
                switch (item)
                {
                    case ShowFunction.MechanicalArm:
                        functionCount = FunctionList.List.GetMechanicalArmList().Count;
                        functionOnCount = FunctionList.List.GetMechanicalArmList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
                        break;
                    case ShowFunction.Light:
                        #region Light
                        functionCount = FunctionList.List.GetLightList().Count;
@@ -863,6 +867,28 @@
                        #endregion
                        break;
                    case ShowFunction.MechanicalArm:
                        btnName.TextID = StringId.MechanicalArm;
                        Button btnMaPower = new Button()
                        {
                            X = Application.GetRealWidth(120),
                            Y = specialList.Contains(index) ? Application.GetRealWidth(160) : Application.GetRealWidth(117),
                            Width = Application.GetRealWidth(32),
                            Height = Application.GetRealWidth(32),
                            SelectedImagePath = "Public/PowerOpen.png",
                            UnSelectedImagePath = "Public/PowerClose.png",
                            IsSelected = functionOnCount > 0,
                            Tag = item + "_AllControl",
                        };
                        functionView.AddChidren(btnMaPower);
                        btnMaPower.MouseUpEventHandler = (sender, e) =>
                        {
                            LoadEvent_SwitchFunction(btnMaPower, item, functionView);
                        };
                        functionPageTitleId = StringId.MechanicalArm;
                        break;
                    case ShowFunction.AC:
                        #region AC
                        btnName.TextID = StringId.AC;
HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -98,7 +98,7 @@
                else if (function.spk == SPK.SenesorMegahealth)
                else if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose  )
                {
                    var btnStatus = new Button()
                    {
@@ -375,7 +375,7 @@
                bodyDiv.AddChidren(btnCollectionIcon);
            }
            if(function.spk == SPK.SenesorMegahealth)
            if(function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
            {
                bodyDiv.AddChidren(btnCollectionIcon);
            }
@@ -464,6 +464,14 @@
        /// </summary>
        void CurtainFragment()
        {
            var onoffString = function.GetAttrState(FunctionAttributeKey.OnOff);
            var percent = onoffString == "off" ? 0 : 100;
            if (function.GetAttributes().Contains(FunctionAttributeKey.Percent))
            {
                string percentString = function.GetAttrState(FunctionAttributeKey.Percent);
                int.TryParse(percentString, out percent);
            }
            #region Curtain
            var btnCurtainClose = new Button()
            {
@@ -473,7 +481,7 @@
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/Curtain/CurtainCloseIcon.png",
                SelectedImagePath = "FunctionIcon/Curtain/CurtainCloseOnIcon.png",
                IsSelected = function.GetAttrState(FunctionAttributeKey.OnOff) == "off",
                IsSelected = percent == 0,
                Tag = function.sid + "_off"
            };
            bodyDiv.AddChidren(btnCurtainClose);
@@ -504,7 +512,7 @@
                UnSelectedImagePath = "FunctionIcon/Curtain/CurtainOpenIcon.png",
                SelectedImagePath = "FunctionIcon/Curtain/CurtainOpenOnIcon.png",
                Tag = function.sid + "_on",
                IsSelected = function.GetAttrState(FunctionAttributeKey.OnOff) == "on",
                IsSelected = percent != 0,
            };
            bodyDiv.AddChidren(btnCurtainOpen);
            if (function.spk == SPK.CurtainRoller)
HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
@@ -182,7 +182,11 @@
            {
                functionList.AddRange(FunctionList.List.GetAirFreshList());
            }
            functionList.OrderByDescending(o => o.controlCounter).ToList();
            else if(titleId == StringId.MechanicalArm)
            {
                functionList.AddRange(FunctionList.List.GetMechanicalArmList());
            }
            functionList = functionList.OrderByDescending(o => o.controlCounter).ToList();
            ShowFunctionRow(functionList);
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -264,6 +264,7 @@
                    break;
                //毫米波传感器(自研北邮)
                case SPK.SenesorMegahealth:
                    case SPK.SensorMmvPose:
                    {
                        LogicView.FunTypeView view1 = new LogicView.FunTypeView();
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -281,6 +281,7 @@
                                    }
                                    break;
                                case SPK.SenesorMegahealth:
                                case SPK.SensorMmvPose:
                                    {
                                        string key = this.GetKey(dicList);
                                        string value = this.GetValue(dicList);
@@ -2020,6 +2021,7 @@
                    }
                    break;
                case SPK.SenesorMegahealth:
                case SPK.SensorMmvPose:
                    {
                        foreach (var dic in dicList)
                        {
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -187,7 +187,7 @@
            var list2 = this.GetVideoDeviceList();
            list.AddRange(list1);
            list.AddRange(list2);
            this.GetTestDevice(ref list, false);
            GetTestDevice(ref list, false);
            return list;
        }
        /// <summary>
@@ -423,6 +423,7 @@
                case SPK.SensorPir:
                case SPK.SensorDoorWindow:
                case SPK.SensorUtrasonic:
                case SPK.SensorMmvPose:
                case SPK.SenesorMegahealth:
                case SPK.SenesorMegahealth2:
                case SPK.SensorEnvironment:
@@ -516,6 +517,7 @@
            || device.spk == SPK.SensorPir
            || device.spk == SPK.SensorDoorWindow
            || device.spk == SPK.SensorUtrasonic
            || device.spk == SPK.SensorMmvPose
            || device.spk == SPK.SenesorMegahealth
            || device.spk == SPK.SenesorMegahealth2
            || device.spk == SPK.SensorEnvironment
@@ -629,6 +631,7 @@
                functionTypeList.Add(SPK.SensorPir);
                functionTypeList.Add(SPK.SensorDoorWindow);
                functionTypeList.Add(SPK.SensorUtrasonic);
                functionTypeList.Add(SPK.SensorMmvPose);
                functionTypeList.Add(SPK.SenesorMegahealth);
                functionTypeList.Add(SPK.SenesorMegahealth2);
                functionTypeList.Add(SPK.SensorEnvironment);
@@ -701,6 +704,7 @@
                functionTypeList.Add(SPK.SensorPir);
                functionTypeList.Add(SPK.SensorDoorWindow);
                functionTypeList.Add(SPK.SensorUtrasonic);
                functionTypeList.Add(SPK.SensorMmvPose);
                functionTypeList.Add(SPK.SenesorMegahealth);
                functionTypeList.Add(SPK.SenesorMegahealth2);
                functionTypeList.Add(SPK.SensorEnvironment);
@@ -761,6 +765,7 @@
                        deviceTypeList.Add(SPK.SensorPir);
                        deviceTypeList.Add(SPK.SensorDoorWindow);
                        deviceTypeList.Add(SPK.SensorUtrasonic);
                        deviceTypeList.Add(SPK.SensorMmvPose);
                        deviceTypeList.Add(SPK.SenesorMegahealth);
                        deviceTypeList.Add(SPK.SenesorMegahealth2);
                        deviceTypeList.Add(SPK.SensorEnvironment);
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
@@ -155,6 +155,7 @@
                            break;
                        case SPK.SenesorMegahealth:
                        case SPK.SenesorMegahealth2:
                        case SPK.SensorMmvPose:
                            var form1 = new AddSenesorMegahealthDirection1Page();
                            form1.AddForm(device);
                            form1.AddDeviceEvent = (functionObj) => {
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
@@ -171,6 +171,7 @@
                                contentView.BeginHeaderRefreshing();
                            });
                            break;
                        case SPK.SensorMmvPose:
                        case SPK.SenesorMegahealth:
                        case SPK.SenesorMegahealth2:
                            var smPage = new SenesorMegahealthManagerPage();
HDL_ON/UI/UI2/4-PersonalCenter/CancelAccountPage.cs
@@ -2,6 +2,7 @@
using Shared;
using HDL_ON.UI.CSS;
using Xamarin.Essentials;
using HDL_ON.DAL.Server;
namespace HDL_ON.UI
{
@@ -24,7 +25,277 @@
        /// <summary>
        /// 
        /// </summary>
        public void LoadPage()
        public void LoadPage() {
            var loading = new Loading();
            this.AddChidren(loading);
            loading.Start("");
            new System.Threading.Thread(() => {
                try
                {
                    var pack = new HttpServerRequest().GetUnregisterModel();
                    if (pack.Code == StateCode.SUCCESS)
                    {
                        var data = Newtonsoft.Json.JsonConvert.DeserializeObject<UMode>(pack.Data.ToString());
                        Application.RunOnMainThread(() =>
                        {
                            if (data != null)
                            {
                                if (data.model == "APP")
                                {
                                    InitView_PreRelease();
                                }
                                else
                                {
                                    InitView_Release();
                                }
                            }
                            else
                            {
                                InitView_PreRelease();
                            }
                        });
                    }
                    else
                    {
                        Application.RunOnMainThread(() =>
                        {
                            InitView_PreRelease();
                        });
                    }
                }
                catch
                {
                    Application.RunOnMainThread(() =>
                    {
                        InitView_PreRelease();
                    });
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (loading != null)
                        {
                            loading.Hide();
                            loading.RemoveFromParent();
                            loading = null;
                        }
                    });
                }
            }) { IsBackground = true }.Start();
        }
        public void InitView_PreRelease()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.CancelAccount)).LoadTopView(CSS_Color.MainBackgroundColor);
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            var textView = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(64 + 16),
                Height = Application.GetRealHeight(90),
                Width = Application.GetRealWidth(343),
                Padding = new Padding(Application.GetRealWidth(16), Application.GetRealWidth(16), Application.GetRealWidth(16), Application.GetRealWidth(16)),
                IsMoreLines = true,
                TextSize = CSS_FontSize.TextFontSize,
                TextAlignment = TextAlignment.TopLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Radius = (uint)Application.GetRealHeight(14),
                BackgroundColor = 0x174484F4,
            };
            if (Language.CurrentLanguage == "Chinese")
            {
                textView.Text = "*注销账户是不可恢复的操作,注销账户之后,您App所有账户数据(包括昵称、头像、二维码照片等)都会被删除,且无法再找回。";
            }
            else
            {
                textView.Text = "*Account cancellation is an irreversible operation. After account cancellation, all account data (including nickname, avatar, QR code photo, etc.) of your app will be deleted and cannot be retrieved.";
            }
            bodyView.AddChidren(textView);
            #region 账号填写
            var accountView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(132 + 50),
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealHeight(25),
            };
            bodyView.AddChidren(accountView);
            var etAccount = new EditText()
            {
                X = Application.GetRealWidth(58),
                Width = Application.GetRealWidth(343 - 68),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                PlaceholderTextColor = CSS_Color.PromptingColor1,
                PlaceholderText = Language.StringByID(StringId.PlsEntryPhoneNumber),
                TextAlignment = TextAlignment.CenterLeft,
            };
            accountView.AddChidren(etAccount);
            var btnAccountIcon = new Button()
            {
                X = Application.GetRealWidth(26),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(20),
                Height = Application.GetMinRealAverage(20),
                UnSelectedImagePath = "LoginIcon/AccountIcon.png",
            };
            accountView.AddChidren(btnAccountIcon);
            #endregion
            #region 密码填写
            var passwordView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(211 + 40),
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(50),
                Radius = (uint)Application.GetRealHeight(25),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(passwordView);
            var btnPasswordIcon = new Button()
            {
                X = Application.GetRealWidth(26),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(20),
                Height = Application.GetMinRealAverage(20),
                UnSelectedImagePath = "LoginIcon/PasswordIcon.png",
            };
            passwordView.AddChidren(btnPasswordIcon);
            var etPassword = new EditText()
            {
                X = Application.GetRealWidth(58),
                Width = Application.GetRealWidth(343 - 68),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                PlaceholderTextColor = CSS_Color.PromptingColor1,
                PlaceholderText = Language.StringByID(StringId.PlsEntryPassword),
                SecureTextEntry = true,
                TextAlignment = TextAlignment.CenterLeft,
            };
            passwordView.AddChidren(etPassword);
            #endregion
            var btnLogin = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(403),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealWidth(44),
                Radius = (uint)Application.GetRealWidth(22),
                SelectedBackgroundColor = CSS_Color.MainColor,
                BackgroundColor = CSS_Color.PromptingColor1,
                TextID = StringId.Cancellation,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.MainBackgroundColor,
                TextAlignment = TextAlignment.Center,
            };
            bodyView.AddChidren(btnLogin);
            string account = "";
            etAccount.TextChangeEventHandler = (sender, e) =>
            {
                account = etAccount.Text.Trim();
                if (account.Length > 0 && etPassword.Text.Trim().Length > 0)
                {
                    btnLogin.IsSelected = true;
                }
                else
                {
                    btnLogin.IsSelected = false;
                }
            };
            etPassword.TextChangeEventHandler += (sender, e) =>
            {
                if (etAccount.Text.Trim().Length > 0 && etPassword.Text.Trim().Length > 0)
                {
                    btnLogin.IsSelected = true;
                }
                else
                {
                    btnLogin.IsSelected = false;
                }
            };
            btnLogin.MouseUpEventHandler = (sender,e) =>{
                if (btnLogin.IsSelected)
                {
                    var tipMsg = "*您当前正在注销账户,注销完成后,您在On Pro App的所有数据均会被删除,请谨慎操作。";
                    Action action = () => {
                        var loading = new Loading();
                        this.AddChidren(loading);
                        loading.Start("");
                        var pwd = etPassword.Text.Trim();
                        new System.Threading.Thread(() => {
                            try
                            {
                                var pack = new HttpServerRequest().Unregister(pwd);
                                Application.RunOnMainThread(() =>
                                {
                                    if (pack.Code == StateCode.SUCCESS)
                                    {
                                        //Action okAction = () =>
                                        //{
                                            HDLCommon.Current.Logout();
                                        //};
                                        //new ConfirmDialog().ShowDialog(StringId.Tip, StringId.IfConfirmLogout, okAction);
                                    }
                                    else
                                    {
                                        var tip = new Tip()
                                        {
                                            Text = pack.message,
                                            CloseTime = 3,
                                            Direction = AMPopTipDirection.None
                                        };
                                        tip.Show(bodyView);
                                    }
                                });
                            }
                            catch
                            {
                            }
                            finally
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    if (loading != null)
                                    {
                                        loading.Hide();
                                        loading.RemoveFromParent();
                                        loading = null;
                                    }
                                });
                            }
                        })
                        { IsBackground = true }.Start();
                    };
                    new PublicAssmebly().TipOptionMsg(StringId.CancelAccount, tipMsg, action, 20);
                }
            };
        }
        public void InitView_Release()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.CancelAccount)).LoadTopView();
@@ -196,6 +467,26 @@
            Utlis.ShowTip(text + "\n" + Language.StringByID(StringId.CopySuccess));
        }
        bool isPublishingMode()
        {
            DAL.Server.HttpServerRequest http = new DAL.Server.HttpServerRequest();
            return true;
        }
    }
    class UMode
    {
        public string appCode;
        public string version;
        public string releaseSystem;
        /// <summary>
        /// APP :用户在app上自助注销
        /// APPLY : 用户发邮件给公司申请注销
        /// </summary>
        public string model;
    }
}
HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/MechanicalArmPage.cs
New file
@@ -0,0 +1,186 @@
using System;
using System.Collections.Generic;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.Stan;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    /// <summary>
    /// 机械手控制页面
    /// </summary>
    public class MechanicalArmPage : DeviceFunctionCardCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 图片控件
        /// </summary>
        private PicViewControl btnPictrue = null;
        /// <summary>
        /// 开关状态提示控件
        /// </summary>
        private Button btnTipStatus = null;
        /// <summary>
        /// 开关控件
        /// </summary>
        private IconViewControl btnSwitch = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 初始化白色区域的内容
        /// </summary>
        public override void InitFrameWhiteContent()
        {
            base.SetTitleText(Language.StringByID(StringId.WaterValve));
            //初始化第一个索引页的内容
            this.InitFrameWhiteContent1();
            //刷新界面状态
            this.RefreshFormStatu();
            //读取状态
            new System.Threading.Thread(() =>
            {
                Control.Ins.ReadFunctionsInfo(new List<string>() { device.deviceId });
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 初始化第一个索引页的内容
        /// </summary>
        private void InitFrameWhiteContent1()
        {
            btnTipStatus = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(79),
                Width = Application.GetRealWidth(100),
                Height = Application.GetRealHeight(34),
                BackgroundColor = 0x171B2D4D,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Radius = (uint)Application.GetRealHeight(17),
                TextID = StringId.ValveClosed,
            };
            FrameWhiteCentet1.AddChidren(btnTipStatus);
            //图片控件
            this.btnPictrue = new PicViewControl(327, 327);
            btnPictrue.Y = Application.GetRealHeight(127);
            btnPictrue.Gravity = Gravity.CenterHorizontal;
            btnPictrue.UnSelectedImagePath = "FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png";
            btnPictrue.SelectedImagePath = "FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png";
            FrameWhiteCentet1.AddChidren(btnPictrue);
            btnPictrue.ButtonClickEvent += (sender, e) =>
            {
                //发送开关命令
                this.SendSwitchComand();
            };
            //开关图标
            this.btnSwitch = new IconViewControl(40);
            btnSwitch.Gravity = Gravity.CenterHorizontal;
            btnSwitch.Y = Application.GetRealHeight(468);
            btnSwitch.UnSelectedImagePath = "Public/PowerClose.png";
            btnSwitch.SelectedImagePath = "Public/PowerOpen.png";
            FrameWhiteCentet1.AddChidren(btnSwitch);
            btnSwitch.ButtonClickEvent += (sender, e) =>
            {
                //发送开关命令
                this.SendSwitchComand();
            };
            var pack = new DAL.Server.HttpServerRequest().GetDeviceInfoList(new List<string>() { base.device.deviceId });
        }
        #endregion
        #region ■ 设备状态反馈_______________________
        /// <summary>
        /// 设备状态反馈
        /// </summary>
        /// <param name="i_LocalDevice"></param>
        public override void DeviceStatuPush(Function i_LocalDevice)
        {
            //不是同一个东西
            if (this.device.sid != i_LocalDevice.sid) { return; }
            //刷新界面状态
            this.RefreshFormStatu();
        }
        #endregion
        #region ■ 发送各种命令_______________________
        /// <summary>
        /// 发送开关命令
        /// </summary>
        private void SendSwitchComand()
        {
            //if (!device.online)
            //{
            //    new Tip()
            //    {
            //        CloseTime = 1,
            //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
            //        Direction = AMPopTipDirection.None,
            //    }.Show(MainPage.BaseView);
            //    return;
            //}
            this.btnPictrue.CanClick = false;
            this.btnSwitch.CanClick = false;
            string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
            HdlThreadLogic.Current.RunThread(() =>
            {
                var dic = new Dictionary<string, string>();
                dic.Add(FunctionAttributeKey.OnOff, statu);
                Control.Ins.SendWriteCommand(this.device, dic, true);
                HdlThreadLogic.Current.RunMain(() =>
                {
                    this.btnPictrue.CanClick = true;
                    this.btnSwitch.CanClick = true;
                });
            });
        }
        #endregion
        #region ■ 刷新界面状态_______________________
        /// <summary>
        /// 刷新界面状态
        /// </summary>
        private void RefreshFormStatu()
        {
            Application.RunOnMainThread(() =>
            {
                var onoffStatu = device.attributes.Find((obj) => obj.key == FunctionAttributeKey.OnOff);
                if (onoffStatu != null)
                {
                    if (onoffStatu.state == "on")
                    {
                        btnTipStatus.TextID = StringId.ValveOpened;
                        btnTipStatus.TextColor = 0xFF4BC803;
                        btnTipStatus.BackgroundColor = 0x174BC803;
                    }
                    else
                    {
                        btnTipStatus.TextID = StringId.ValveClosed;
                        btnTipStatus.TextColor = CSS_Color.FirstLevelTitleColor;
                        btnTipStatus.BackgroundColor = 0x171B2D4D;
                    }
                    this.btnSwitch.IsSelected = this.btnPictrue.IsSelected = onoffStatu.state.ToString() == "on";
                }
            });
        }
        #endregion
    }
}
HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
@@ -100,21 +100,21 @@
            Application.RunOnMainThread(() =>
            {
                if (basePage.sensorDiyView_Temp != null)
                    basePage.sensorDiyView_Temp.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_temp.ToString()).state);
                    basePage.sensorDiyView_Temp.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_temp.ToString()).state,true);
                if (basePage.sensorDiyView_Humi != null)
                    basePage.sensorDiyView_Humi.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_humidity.ToString()).state);
                    basePage.sensorDiyView_Humi.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_humidity.ToString()).state, true);
                if (basePage.sensorDiyView_Pm25 != null)
                    basePage.sensorDiyView_Pm25.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.pm25.ToString()).state);
                    basePage.sensorDiyView_Pm25.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.pm25.ToString()).state,false);
                if (basePage.sensorDiyView_Co2 != null)
                    basePage.sensorDiyView_Co2.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.co2.ToString()).state);
                    basePage.sensorDiyView_Co2.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.co2.ToString()).state, false);
                if (basePage.sensorDiyView_Tvoc != null)
                    basePage.sensorDiyView_Tvoc.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.tvoc.ToString()).state);
                    basePage.sensorDiyView_Tvoc.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.tvoc.ToString()).state, false);
                if (basePage.sensorDiyView_EleDay != null)
                    basePage.sensorDiyView_EleDay.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.day_electricity.ToString()).state);
                    basePage.sensorDiyView_EleDay.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.day_electricity.ToString()).state, false);
                if (basePage.sensorDiyView_EleMonth != null)
                    basePage.sensorDiyView_EleMonth.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.month_electricity.ToString()).state);
                    basePage.sensorDiyView_EleMonth.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.month_electricity.ToString()).state, false);
                if (basePage.sensorDiyView_EleActivePower != null)
                    basePage.sensorDiyView_EleActivePower.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.active_power.ToString()).state);
                    basePage.sensorDiyView_EleActivePower.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.active_power.ToString()).state, false);
@@ -1149,7 +1149,7 @@
                TextAlignment = TextAlignment.Center,
                TextColor = color,
                TextSize = 20,
                Text = value + unitString,
                Text = value,
            };
            contentView.AddChidren(btnValue);
@@ -1160,34 +1160,19 @@
                TextAlignment = TextAlignment.Center,
                TextColor = 0xFF949AA5,
                TextSize = 12,
                Text = text,
                Text = text + "(" + unitString+")",
            };
            contentView.AddChidren(btnText);
            if (btnValue.Text.Length > 7)
            {
                btnValue.TextSize = 16;
            }
            else if (btnValue.Text.Length > 9)
            {
                btnValue.TextSize = 12;
            }
        }
        public void UpdateValue(string value)
        public void UpdateValue(string value,bool isInt)
        {
            if (value.Contains("."))
            if (value.Contains(".") && isInt)
            {
                value = value.Remove(value.IndexOf('.'), value.Length - value.IndexOf('.'));
            }
            if (btnValue.Text.Length > 8)
            {
                btnValue.TextSize = 16;
            }else if (btnValue.Text.Length > 10)
            {
                btnValue.TextSize = 12;
            }
            btnValue.Text = value + unitString;
        }
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs
@@ -50,7 +50,7 @@
            //读取状态
            new System.Threading.Thread(() =>
            {
                if (device.spk == SPK.SenesorMegahealth|| device.spk == SPK.SenesorMegahealth2)
                if (device.spk == SPK.SenesorMegahealth || device.spk == SPK.SensorMmvPose || device.spk == SPK.SenesorMegahealth2)
                {
                    DriverLayer.Control.Ins.SendReadCommand(device, true);
                }
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorGasPage.cs
@@ -43,10 +43,8 @@
            //读取状态
            new System.Threading.Thread(() =>
            {
                if (device.spk == SPK.SenesorMegahealth|| device.spk == SPK.SenesorMegahealth2)
                {
                    DriverLayer.Control.Ins.SendReadCommand(device, true);
                }
            })
            { IsBackground = true }.Start();
        }
HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
@@ -658,7 +658,7 @@
            }
            else if(function.spk == SPK.SenesorMegahealth)
            else if(function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
            {
                contentView.AddChidren(new Button
                {