ZigbeeApp/GateWay.Droid/GateWay.Droid.csprojold mode 100755 new mode 100644
@@ -40,10 +40,6 @@ <EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk> <AndroidSupportedAbis /> <AndroidDexTool>d8</AndroidDexTool> <AotAssemblies>false</AotAssemblies> <EnableLLVM>false</EnableLLVM> <AndroidEnableProfiledAot>false</AndroidEnableProfiledAot> <BundleAssemblies>false</BundleAssemblies> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -57,10 +53,6 @@ <MandroidI18n>cjk</MandroidI18n> <DefineConstants>Android,Release</DefineConstants> <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> <AotAssemblies>false</AotAssemblies> <EnableLLVM>false</EnableLLVM> <AndroidEnableProfiledAot>false</AndroidEnableProfiledAot> <BundleAssemblies>false</BundleAssemblies> <AndroidDexTool>d8</AndroidDexTool> <AndroidUseAapt2>false</AndroidUseAapt2> </PropertyGroup> ZigbeeApp/GateWay.Droid/Properties/AndroidManifest.xmlold mode 100755 new mode 100644
@@ -164,7 +164,7 @@ <meta-data android:name="JPUSH_APPKEY" android:value="f4a3322fbc45e58d04c85191" /> <!-- </>值来自开发者平台取得的AppKey--> <!-- 极光推送结束 --> <!-- 设置高德地图key --> <meta-data android:name="com.amap.api.v2.apikey" android:value="1f753413955012c9594c5df69eaa0aff" /> <!-- 设置高德地图key --> <meta-data android:name="com.amap.api.v2.apikey" android:value="1f753413955012c9594c5df69eaa0aff" /> </application> </manifest> ZigbeeApp/GateWay.Droid/Resources/Resource.designer.csold mode 100755 new mode 100644
Diff too large ZigbeeApp/Home.Ios/mono_crash.115869ea88.0.json
File was deleted ZigbeeApp/Home.Ios/mono_crash.f3dbef0b0.0.json
File was deleted ZigbeeApp/Shared/Common/CommonPage.cs
@@ -62,7 +62,7 @@ /// <summary> /// 版本号 /// </summary> public static string CodeIDString = "1.0.20010701"; public static string CodeIDString = "1.0.20011001"; /// <summary> /// 注册来源(0:HDL On 1:Zigbee) /// </summary> ZigbeeApp/Shared/Common/Device.cs
@@ -37,7 +37,7 @@ } } /// <summary> /// 本地所有设备的缓存(排序) /// 本地所有设备的缓存 /// </summary> public List<CommonDevice> listAllDevice { @@ -241,7 +241,7 @@ //获取这个网关的本地所有设备 string gwID = HdlGatewayLogic.Current.GetGatewayId(zbGateway); List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID); List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID, true); Dictionary<string, CommonDevice> dicExist = new Dictionary<string, CommonDevice>(); foreach (var device in listLocalDevices) { @@ -273,25 +273,13 @@ for (int i = 0; i < listDevice.Count; i++) { var device = listDevice[i]; //对未命名的设备重新命名 if (this.GetSimpleEpointName(device) == string.Empty) //对未命名的虚拟设备重新命名 if (device.DriveCode > 0 && this.GetSimpleEpointName(device) == string.Empty) { //根据设备类型获取名称 var dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false); //虚拟设备的话,附加回路号 if (device.DriveCode > 0) { //在端点名字的后面附加【回路】字样 dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; } //多回路设备的话,附加回路号 else if (dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && dicDeviceEpoint[device.DeviceAddr].Count > 1) { var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries); dName = arry[0].Trim(); //在端点名字的后面附加【回路】字样 dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; } //在端点名字的后面附加【回路】字样 dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; HdlThreadLogic.Current.RunThread(async () => { @@ -301,10 +289,19 @@ } //只有完全获取的时候,才会去处理删除的问题 if (statu == 1) if (statu != 1) { //如果本地和网关的设备不一致的时候,删除本地的设备 foreach (var device in dicExist.Values) return statu; } //如果本地和网关的设备不一致的时候,删除本地的设备 foreach (var device in dicExist.Values) { if (device is OTADevice) { this.DeleteMemmoryOtaDevice(device.DeviceAddr); } else { this.DeleteMemmoryDevice(device, true); } @@ -484,15 +481,25 @@ lock (dicAllDevice) { string mainKeys = this.GetDeviceMainKeys(device); if (this.dicAllDevice.ContainsKey(mainKeys) == false) if (this.dicAllDevice.ContainsKey(mainKeys) == true) { return; } this.dicAllDevice[mainKeys] = device; device.ReSave(); //一般设备 this.dicAllDevice[mainKeys] = device; device.ReSave(); //添加自动备份 HdlAutoBackupLogic.AddOrEditorFile(device.FilePath); //添加自动备份 HdlAutoBackupLogic.AddOrEditorFile(device.FilePath); } else if (this.dicOTADevice.ContainsKey(mainKeys) == true) { //Ota设备 this.dicOTADevice[mainKeys] = (OTADevice)device; device.ReSave(); //添加自动备份 HdlAutoBackupLogic.AddOrEditorFile(device.FilePath); } } } @@ -524,11 +531,14 @@ return false; } //删除文件 //删除缓存的Ota设备 this.DeleteMemmoryOtaDevice(listdevice[0].DeviceAddr); //删除一般设备文件 foreach (CommonDevice device in listdevice) { this.DeleteMemmoryDevice(device); } if (this.dicDeviceRoomId.ContainsKey(listdevice[0].DeviceAddr) == true) { //移除真实设备的房间索引 @@ -539,7 +549,7 @@ } /// <summary> /// 删除缓存的设备 /// 删除缓存的一般设备 /// </summary> /// <param name="device">设备对象</param> /// <param name="deleteRoom">是否从房间删除</param> @@ -561,6 +571,11 @@ { this.dicAllDevice.Remove(mainKeys); } if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true) { //变更端点数 this.dicDeviceEpoint[device.DeviceAddr].Remove(device.DeviceEpoint); } } //删除设备文件 @@ -580,9 +595,17 @@ HdlAutoBackupLogic.DeleteFile(device.FilePath); } } } /// <summary> /// 删除缓存的Ota设备 /// </summary> /// <param name="macAdrr"></param> /// <param name="ePoint"></param> public void DeleteMemmoryOtaDevice(string macAdrr, int ePoint = 200) { //删除200端口文件 string otaKeys = this.GetDeviceMainKeys(device.DeviceAddr, 200); string otaKeys = this.GetDeviceMainKeys(macAdrr, ePoint); if (this.dicOTADevice.ContainsKey(otaKeys) == true) { string otaFile = this.dicOTADevice[otaKeys].FilePath; @@ -591,12 +614,12 @@ if (UserCenterResourse.UserInfo.AuthorityNo == 3) { //成员的话,直接删除,没有商量的余地 Global.DeleteFilebyHomeId(filePath); Global.DeleteFilebyHomeId(otaFile); } else { //变更:搞掉它,不留了 Global.DeleteFilebyHomeId(filePath); Global.DeleteFilebyHomeId(otaFile); //删除自动备份 HdlAutoBackupLogic.DeleteFile(otaFile); } @@ -680,8 +703,9 @@ /// 根据网关ID获取所有的设备 /// </summary> /// <param name="gwId">网关ID</param> /// <param name="getOtaDevice">是否获取ota设备</param> /// <returns></returns> public List<CommonDevice> GetDeviceByGatewayID(string gwId) public List<CommonDevice> GetDeviceByGatewayID(string gwId, bool getOtaDevice = false) { List<CommonDevice> list = new List<CommonDevice>(); lock (dicAllDevice) @@ -692,6 +716,17 @@ if (gwId == device.CurrentGateWayId) { list.Add(device); } } if (getOtaDevice == true) { //获取ota设备 foreach (var ota in this.dicOTADevice.Values) { if (ota.CurrentGateWayId == gwId) { list.Add(ota); } } } } @@ -817,6 +852,30 @@ return this.dicOTADevice[mainkeys]; } /// <summary> /// 获取特殊的,没有其他回路,单纯只有200端点的OTA设备 /// </summary> /// <param name="gwId">网关ID</param> /// <returns></returns> public List<OTADevice> GetSpecialOtaDevice(string gwId) { var list = new List<OTADevice>(); foreach (var ota in this.dicOTADevice.Values) { if (ota.CurrentGateWayId != gwId) { //不是同一个网关 continue; } if (dicDeviceEpoint.ContainsKey(ota.DeviceAddr) == false || dicDeviceEpoint[ota.DeviceAddr].Count == 0) { list.Add(ota); } } return list; } #endregion #region ■ 获取设备名称_______________________ @@ -834,16 +893,39 @@ return dName; } //根据设备类型获取名称 dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false); var tempValue = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false); var arry = tempValue.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries); dName = arry[0].Trim(); //如果是虚拟设备 if (device.DriveCode > 0 || (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1)) if (device.DriveCode > 0) { var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries); dName = arry[0].Trim(); //在端点名字的后面附加【回路】字样 dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; return dName; } //获取设备类型 var deviceInfoType = this.GetMyDeviceEnumInfo(new List<CommonDevice>() { device }); if (deviceInfoType.BeloneType == Common.DeviceBeloneType.A按键面板 && device.Type == DeviceType.TemperatureSensor) { //面板的最后一个回路是温度传感器 dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId11); } else if (deviceInfoType.ConcreteType == Common.DeviceConcreteType.Sensor_Pir) { //pir传感器,它又搞特殊东西,传感器自身用自己的名字,继电器回路的话…… if (device.Type == DeviceType.OnOffOutput) { dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2300); } } else if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1) { //XXXXX(N回路) dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; } return dName; } @@ -1682,6 +1764,11 @@ //如果设备只有一个回路,如果改变了真实设备区域,则它的回路的区域也一起改了 if (saveRoadDevice == true && listDevice != null && listDevice.Count == 1) { if (listDevice[0] is OTADevice) { //单纯只是Ota设备则不处理 return; } Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId, false); } } @@ -2443,19 +2530,19 @@ //=========★★其他类(????-????)★★========= /// <summary> /// 干接点 /// 干接点(注意,它属于其他类,不是设备类型) /// </summary> DryContact = -10000, /// <summary> /// 灯光(注意,它输入其他类,不是设备类型) /// 灯光(注意,它属于其他类,不是设备类型) /// </summary> Light = -10001, /// <summary> /// 插座 /// 插座(注意,它属于其他类,不是设备类型) /// </summary> Socket1 = -10002, /// <summary> /// 开关 /// 开关(注意,它属于其他类,不是设备类型) /// </summary> Switch = -10003, } ZigbeeApp/Shared/Common/Room.cs
@@ -98,6 +98,7 @@ { if (m_CurrentRoom == null && Lists.Count > 0) { if (m_CurrentRoom == null) { m_CurrentRoom = Lists[0]; } return Lists[0]; } return m_CurrentRoom; @@ -193,6 +194,10 @@ var sceneList = new List<SceneUI> { }; foreach (var r in Shared.Common.Room.Lists) { if(r.IsLove) { continue; } if (r.SceneUIList.Count == 0) { continue; @@ -222,6 +227,11 @@ var pathList = new List<string> { }; foreach (var r in Lists) { if(r.IsLove) { continue; } if (r.SceneUIFilePathList.Count == 0) { continue; @@ -263,7 +273,7 @@ for (int i = 0; i < Lists.Count; i++) { var room = Lists[i]; if (room.IsSharedRoom) if (room.IsSharedRoom || room.IsLove) { continue; } @@ -335,6 +345,7 @@ } } Config.Instance.Home.InitFloor(); CurrentRoom.RefreshRoomListView(); @@ -356,7 +367,6 @@ /// </summary> public static void RefreshAllRoomByLocation() { Lists.Clear(); var homeTemp = Config.Instance.Home; homeTemp.RoomFilePathList.Clear(); @@ -367,7 +377,7 @@ if (listFile.Contains(fRoom) == true) { listFile.Remove(fRoom); homeTemp.AddRoomListFilePath(fRoom); homeTemp.RoomFilePathList.Add(fRoom); } var listRoomFile = new List<string>(); @@ -375,7 +385,7 @@ { if (fileName.StartsWith("Room_")) { homeTemp.AddRoomListFilePath(fileName); homeTemp.RoomFilePathList.Add(fileName); listRoomFile.Add(fileName); } } @@ -696,11 +706,24 @@ /// <returns></returns> public List<Room> GetRoomsByFloorId(string id) { if (Config.Instance.Home.FloorDics.Count == 0) try { return Lists; if (Lists == null || Lists.Count == 0 || Lists.Count == 1) { return null; } if (Config.Instance.Home.FloorDics.Count == 0) { return Lists; } return Lists.FindAll((obj) => obj.FloorId == id); } return Lists.FindAll((obj) => obj.FloorId == id); catch(Exception ex) { System.Console.WriteLine(ex.Message); return null; } } /// <summary> /// 获取当前楼层的房间名称 @@ -904,8 +927,6 @@ //保存到本地 Save(); //添加自动备份 HdlAutoBackupLogic.AddOrEditorFile(FileName); if (saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1) { //如果只有一个回路,则修改真实物理设备的房间 @@ -1185,17 +1206,8 @@ /// <param name="scene">Scene.</param> public void AddScene(SceneUI scene) { //var sceneUI = new SceneUI //{ // Name = scene.Name, // Id = scene.Id, // IconPath = scene.IconPath, // IconPathType = scene.IconPathType, // AddSceneMemberDataList = scene.AddSceneMemberDataList //}; SceneUIList.Add(scene); SceneUIFilePathList.Add(scene.FileName); scene.Save(); Save(); } @@ -1205,10 +1217,13 @@ /// <param name="scene"></param> public void DeleteScene(SceneUI scene) { //scene.IsCollected = false; scene.Save(); SceneUIList.Remove(scene); SceneUIFilePathList.Remove(scene.FileName); var curScene = SceneUIList.Find((obj) => obj.Id == scene.Id); if (curScene == null) { return; } SceneUIList.Remove(curScene); SceneUIFilePathList.Remove(curScene.FileName); Save(); } @@ -1297,9 +1312,61 @@ { sceneUI.AddSceneMemberDataList = addCommons; sceneUI.Save(); if (IsLove == false) { var curScene = Common.Room.CurrentRoom.GetLoveRoom().SceneUIList.Find((obj) => obj.Id == sceneUI.Id); if (curScene != null) { curScene.Name = sceneUI.Name; curScene.IconPath = sceneUI.IconPath; curScene.IconPathType = sceneUI.IconPathType; curScene.AddSceneMemberDataList = sceneUI.AddSceneMemberDataList; curScene.SceneDelayTime = sceneUI.SceneDelayTime; curScene.Save(false); Common.Room.CurrentRoom.GetLoveRoom().Save(); } } return 1; } return 0; } /// <summary> /// 设置、同步延时时间 /// </summary> /// <param name="scene"></param> public void ModifySceneDelayTime(SceneUI scene) { if (IsLove) { foreach (var r in Lists) { if (r.IsLove || r.SceneUIList.Count == 0) { continue; } foreach (var sce in r.SceneUIList) { if (sce.Id == scene.Id) { sce.SceneDelayTime = scene.SceneDelayTime; sce.Save(false); r.Save(false); break; } } } } else { var curScene = Common.Room.CurrentRoom.GetLoveRoom().SceneUIList.Find((obj) => obj.Id == scene.Id); if (curScene != null) { curScene.SceneDelayTime = scene.SceneDelayTime; curScene.Save(false); Common.Room.CurrentRoom.GetLoveRoom().Save(false); } } } #endregion @@ -1316,9 +1383,16 @@ { return; } SceneUIList.Remove(sceneUI); SceneUIFilePathList.Remove(sceneUI.FileName); Save(); if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2) { if (Global.IsExistsByHomeId(sceneUI.IconPath)) { Global.DeleteFilebyHomeId(sceneUI.IconPath); HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath); } } if (IsLove == false) { if (CurrentRoom.GetLoveRoom().SceneUIList.Find((obj) => obj.Id == sceneUI.Id) != null) @@ -1326,6 +1400,11 @@ CurrentRoom.GetLoveRoom().DeleteScene(sceneUI); } } SceneUIList.Remove(sceneUI); SceneUIFilePathList.Remove(sceneUI.FileName); Save(); Global.DeleteFilebyHomeId(sceneUI.FileName); HdlAutoBackupLogic.DeleteFile(sceneUI.FileName); } ZigbeeApp/Shared/Common/SceneUI.cs
@@ -232,6 +232,7 @@ } }); } #endregion #region ◆ 保存____________________________ ZigbeeApp/Shared/Phone/Device/Category/SelectFloor.cs
@@ -133,7 +133,7 @@ if(changeFloor) { Config.Instance.Home.CurrentFloorId = (sender as CommonForm.LeftIconButtonRow).Tag.ToString(); Config.Instance.Home.Save(); Config.Instance.Home.Save(false); Common.Room.CurrentRoom.RefreshRoomListView(); } RemoveView(); ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs
@@ -373,6 +373,8 @@ { scene.SceneDelayTime = t; delayTimeBtn.Text = CommonFormResouce.GetTimeString(t); room.ModifySceneDelayTime(scene); }; }; } @@ -422,6 +424,7 @@ scene.RemainTime = scene.SceneDelayTime; scene.SceneDelayTime = 0; room.ModifySceneDelayTime(scene); new System.Threading.Thread(() => { while (scene.RemainTime > 0) ZigbeeApp/Shared/Phone/Device/CommonForm/SceneMainView.cs
@@ -37,6 +37,10 @@ /// scene /// </summary> public SceneUI scene; /// <summary> /// CollectionAction /// </summary> public Action CollectionAction; /// <summary> /// IsSelected @@ -284,6 +288,7 @@ scene.RemainTime = scene.SceneDelayTime; scene.SceneDelayTime = 0; Common.Room.CurrentRoom.ModifySceneDelayTime(scene); new System.Threading.Thread(() => { while (scene.RemainTime > 0) @@ -310,16 +315,23 @@ /// <param name="mouseEventArgs"></param> private void CollectionEvent(object sender,MouseEventArgs mouseEventArgs) { (sender as Button).IsSelected = !(sender as Button).IsSelected; if ((sender as Button).IsSelected) if (Common.Room.CurrentRoom.IsLove) { Shared.Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene); Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene); CollectionAction?.Invoke(); } else { Shared.Common.Room.CurrentRoom.GetLoveRoom().RemoveScene(scene); (sender as Button).IsSelected = !(sender as Button).IsSelected; if ((sender as Button).IsSelected) { Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene); } else { Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene); } } scene.Save(); } /// <summary> @@ -342,6 +354,8 @@ { scene.SceneDelayTime = t; SetTimeByDelayTime(t); Common.Room.CurrentRoom.ModifySceneDelayTime(scene); }; } ZigbeeApp/Shared/Phone/Device/Logic/SecurityMode.cs
@@ -367,18 +367,18 @@ } else if (actions["SecuritySetting"].ToString() == "1") { if (actions["SecurityModeId"].ToString() == "1") { athomedefenceSelected.Visible = true; leavehomedefenceSelected.Visible = false; withdrawalSelected.Visible = false; urgentwithdrawalSelected.Visible = false; } else if (actions["SecuritySetting"].ToString() == "2") { athomedefenceSelected.Visible = false; leavehomedefenceSelected.Visible = true; withdrawalSelected.Visible = false; urgentwithdrawalSelected.Visible = false; } else { athomedefenceSelected.Visible = false; leavehomedefenceSelected.Visible = true; withdrawalSelected.Visible = false; urgentwithdrawalSelected.Visible = false; } } break; ZigbeeApp/Shared/Phone/Device/Room/RoomManagement.cs
@@ -149,67 +149,74 @@ var roomScrolView = new VerticalScrolViewLayout { }; bodyFrameLayout.AddChidren(roomScrolView); var roomList = Common.Room.CurrentRoom.GetRoomsByFloorId(floorId); if (roomList == null) try { return; } for (int i = 0; i < roomList.Count+1; i++) { int xx = 43 + i % 2 * (20 + 487); int yy = 0; if (i == 0 || i == 1) var roomList = Common.Room.CurrentRoom.GetRoomsByFloorId(floorId); if (roomList == null || roomList.Count == 0) { if (i % 2 == 0) return; } for (int i = 0; i < roomList.Count + 1; i++) { int xx = 43 + i % 2 * (20 + 487); int yy = 0; if (i == 0 || i == 1) { if (i % 2 == 0) { itemView = new FrameLayout() { Height = Application.GetRealHeight(354 + 58) }; roomScrolView.AddChidren(itemView); } yy = 58; } else if (i % 2 == 0) { itemView = new FrameLayout() { Height = Application.GetRealHeight(354 + 58) Height = Application.GetRealHeight(354) }; roomScrolView.AddChidren(itemView); } yy = 58; } else if (i % 2 == 0) { itemView = new FrameLayout() { Height = Application.GetRealHeight(354) }; roomScrolView.AddChidren(itemView); } if (i< roomList.Count) { var room = roomList[i]; var roomView = new RoomMainView(xx, yy); itemView.AddChidren(roomView); roomView.Init(this,room); roomView.SetRoomName(room.Name); roomView.SetRoomIcon(room.BackgroundImageType == 0 ? room.BackgroundImage : System.IO.Path.Combine(Config.Instance.FullPath, room.BackgroundImage)); roomView.ClickBtn.MouseUpEventHandler += (sender, e) => if (i < roomList.Count) { if (CanClick == false) var room = roomList[i]; var roomView = new RoomMainView(xx, yy); itemView.AddChidren(roomView); roomView.Init(this, room); roomView.SetRoomName(room.Name); roomView.SetRoomIcon(room.BackgroundImageType == 0 ? room.BackgroundImage : System.IO.Path.Combine(Config.Instance.FullPath, room.BackgroundImage)); roomView.ClickBtn.MouseUpEventHandler += (sender, e) => { return; } CommonPage.Instance.CloseLeftMenu(); Common.Room.CurrentRoom = room; Config.Instance.Home.CurrentFloorId = room.FloorId; UserPage.Instance.Fresh(); }; } else { var roomView = new RoomNoNameMainView(xx, yy); itemView.AddChidren(roomView); roomView.Init(); if (CanClick == false) { return; } CommonPage.Instance.CloseLeftMenu(); Common.Room.CurrentRoom = room; Config.Instance.Home.CurrentFloorId = room.FloorId; UserPage.Instance.Fresh(); }; } else { var roomView = new RoomNoNameMainView(xx, yy); itemView.AddChidren(roomView); roomView.Init(); roomView.Icon.MouseUpEventHandler += ShowUnallocatedRoom_MouseUpEvent; roomView.RoomNameButton.MouseUpEventHandler += ShowUnallocatedRoom_MouseUpEvent; roomView.iconFL.MouseUpEventHandler += ShowUnallocatedRoom_MouseUpEvent; roomView.Icon.MouseUpEventHandler += ShowUnallocatedRoom_MouseUpEvent; roomView.RoomNameButton.MouseUpEventHandler += ShowUnallocatedRoom_MouseUpEvent; roomView.iconFL.MouseUpEventHandler += ShowUnallocatedRoom_MouseUpEvent; } } } catch (Exception ex) { string tt=ex.Message; } } #endregion ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs
@@ -36,6 +36,7 @@ /// <summary> /// DistributedMark /// </summary> [Newtonsoft.Json.JsonIgnore] public string DistributedMark = string.Empty; /// <summary> /// 邮箱 @@ -58,16 +59,6 @@ /// </summary> public string AuthorityText = string.Empty; /// <summary> /// 用户图标文件 /// </summary> [Newtonsoft.Json.JsonIgnore] public string UserIconFile = string.Empty; /// <summary> /// 用户图标文件是否改变 /// </summary> [Newtonsoft.Json.JsonIgnore] public bool UserIconFileChanged = false; /// <summary> /// 用户头像数据(临时用,会置空) /// </summary> public byte[] HeadImage = null; @@ -79,6 +70,23 @@ /// 密码验证(临时用,会置空) /// </summary> public string StringPwd = string.Empty; /// <summary> /// 用户图标文件 /// </summary> [Newtonsoft.Json.JsonIgnore] public string UserIconFile = string.Empty; /// <summary> /// 用户图标文件是否改变 /// </summary> [Newtonsoft.Json.JsonIgnore] public bool UserIconFileChanged = false; /// <summary> /// 是否初始化用户信息成功 /// </summary> [Newtonsoft.Json.JsonIgnore] public bool InitUserInfoSuccess = false; } /// <summary> ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Form/Base/EditorCommonForm.cs
@@ -26,6 +26,25 @@ /// </summary> public FrameLayout bodyFrameLayout = null; /// <summary> /// 左滑使能 /// </summary> private bool m_ScrollEnabled = true; /// <summary> /// 左滑使能 /// </summary> public bool ScrollEnabled { get { return m_ScrollEnabled; } set { if (UserView.HomePage.Instance.ScrollEnabled != value) { UserView.HomePage.Instance.ScrollEnabled = value; this.m_ScrollEnabled = value; } } } /// <summary> /// 缓存启动参数 /// </summary> private object[] m_parameter = null; @@ -46,6 +65,9 @@ //初始化中部控件 this.InitBodyFrameLayout(); //初始左滑使能可 this.ScrollEnabled = true; } /// <summary> ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -142,8 +142,10 @@ List<CommonDevice> list = Common.LocalDevice.Current.GetDeviceByGatewayID(gatewayId); foreach (var device in list) { //删除设备,不删除房间信息 Common.LocalDevice.Current.DeleteMemmoryDevice(device, false); //删除一般设备 Common.LocalDevice.Current.DeleteMemmoryDevice(device, true); //删除Ota设备 Common.LocalDevice.Current.DeleteMemmoryOtaDevice(device.DeviceAddr); } //删除网关文件 this.DeleteGatewayFile(gatewayId); @@ -759,6 +761,8 @@ { //删除设备文件 Common.LocalDevice.Current.DeleteMemmoryDevice(device, true); //删除Ota设备 Common.LocalDevice.Current.DeleteMemmoryOtaDevice(device.DeviceAddr); } //如果是主网关 if (this.IsMainGateway(zbGatewayID) == 1) ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs
@@ -29,6 +29,13 @@ /// </param> public static async Task<bool> GetResultStatuByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null) { //检测是否已经完成账号信息初始化 if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false) { //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败 await ReInitUserAccoutInfo(); return false; } //获取接口的连接模式 var connectMode = GetHttpConnectMode(checkAuthority); //获取从接口那里取到的比特数据 @@ -63,6 +70,14 @@ /// </param> public static async Task<string> GetResultCodeByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null) { //检测是否已经完成账号信息初始化 if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false) { //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败 await ReInitUserAccoutInfo(); return "Error"; } //获取接口的连接模式 var connectMode = GetHttpConnectMode(checkAuthority); //获取从接口那里取到的比特数据 @@ -96,6 +111,13 @@ /// </param> public static async Task<string> GetResponseDataByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null) { //检测是否已经完成账号信息初始化 if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false) { //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败 await ReInitUserAccoutInfo(); return null; } //获取接口的连接模式 var connectMode = GetHttpConnectMode(checkAuthority); //获取从接口那里取到的比特数据 @@ -139,6 +161,13 @@ /// </param> public static async Task<byte[]> GetByteResponseDataByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null) { //检测是否已经完成账号信息初始化 if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false) { //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败 await ReInitUserAccoutInfo(); return null; } //获取接口的连接模式 var connectMode = GetHttpConnectMode(checkAuthority); //获取从接口那里取到的比特数据 @@ -406,11 +435,13 @@ { try { var Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID]; if (Myform is EditorCommonForm) EditorCommonForm Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID] as EditorCommonForm; if (Myform != null) { //重置左滑使能 Myform.ScrollEnabled = Myform.ScrollEnabled; //触发界面再次激活的事件 int value = ((EditorCommonForm)Myform).FormActionAgainEvent(); int value = Myform.FormActionAgainEvent(); if (value == 1) { //Log出力 @@ -441,11 +472,13 @@ { try { var Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID]; if (Myform is EditorCommonForm) EditorCommonForm Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID] as EditorCommonForm; if (Myform != null) { //重置左滑使能 Myform.ScrollEnabled = Myform.ScrollEnabled; //触发界面再次激活的事件 int value = ((EditorCommonForm)Myform).FormActionAgainEvent(); int value = Myform.FormActionAgainEvent(); if (value == 1) { //Log出力 @@ -917,22 +950,32 @@ /// <returns></returns> private async static Task<bool> InitUserAccoutInfo() { //初始化个人信息的标识 UserCenterResourse.UserInfo.InitUserInfoSuccess = false; //获取本地记录的用户信息 UserCenterResourse.UserInfo = GetUserInformationFromLocation(); UserCenterResourse.UserInfo.UserIconFile = System.IO.Path.Combine(UserCenterResourse.Option.UserPictruePath, "Admin.png"); //先根据本地缓存设置初始值 Config.Instance.isAdministrator = UserCenterResourse.UserInfo.AuthorityNo != 1; //获取登录账号的信息 var pra = new AccountInfoPra(); var listNotShow = new List<string>() { "NotSetAgain" }; string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetAccountInfo", false, pra, listNotShow); if (string.IsNullOrEmpty(result) == true) //序列化对象 var requestJson = JsonConvert.SerializeObject(pra); //访问接口 byte[] byteData = await CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync("ZigbeeUsers/GetAccountInfo", Encoding.UTF8.GetBytes(requestJson)); if (byteData == null) { //断网的话,该干嘛就干嘛吧,总之不能控主人的东西 Config.Instance.isAdministrator = false; return false; } //检测错误 var revertObj = JsonConvert.DeserializeObject<ResponsePack>(Encoding.UTF8.GetString(byteData)); if (revertObj.StateCode.ToUpper() != "SUCCESS") { return false; } var userInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInformation>(result); var userInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInformation>(revertObj.ResponseData.ToString()); userInfo.Account = Common.Config.Instance.Account; if (string.IsNullOrEmpty(userInfo.UserName) == true) { @@ -965,22 +1008,23 @@ string dirPath = CombinePath(); if (System.IO.Directory.Exists(dirPath) == true) { //先记录起住宅的一些信息 var house = House.GetHouseByHouseId(Config.Instance.HomeId); //删除整个文件夹 System.IO.Directory.Delete(dirPath, true); try { //同步数据的判断文件(以防万一删除整个文件夹失败的时候,这个文件被删的话,应该没什么大问题) string SynchronizeFile = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.AutoDownLoadBackupCheckFile); //如果本地已经拥有了这个文件,则说明不是新手机,不再自动还原 if (System.IO.File.Exists(SynchronizeFile) == true) { System.IO.File.Delete(SynchronizeFile); } //删除整个文件夹 System.IO.Directory.Delete(dirPath, true); } catch { } //创建住宅文件夹 Global.CreateHomeDirectory(Config.Instance.HomeId); //预创建个人中心全部的文件夹 CreatAllUserCenterDirectory(); var newHouse = new House(); newHouse.Id = house.Id; newHouse.Name = house.Name; newHouse.IsOthreShare = house.IsOthreShare; newHouse.AccountType = house.AccountType; newHouse.MainUserDistributedMark = house.MainUserDistributedMark; newHouse.Save(false); } } if (string.IsNullOrEmpty(userInfo.UserName) == true) @@ -1005,9 +1049,11 @@ UserCenterResourse.UserInfo.StringPwd = null; //初始化管理员控制主人的连接地址(因为这个连接Token是不会改变的,所以只需要初始化一次) await InitAdminConnectMainInfo(); bool flage = await InitAdminConnectMainInfo(); //初始化个人信息的标识 UserCenterResourse.UserInfo.InitUserInfoSuccess = flage; return true; return flage; } /// <summary> @@ -1024,6 +1070,26 @@ } var info = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInformation>(value); return info; } /// <summary> /// 重新初始化登陆账号的信息(旨在对应那一瞬间,网络不好,导致误判的情况) /// </summary> /// <returns></returns> private async static Task<bool> ReInitUserAccoutInfo() { //重新初始化账号信息 var result = await InitUserAccoutInfo(); if (result == false) { return result; } //同步云端的网关id,如果本地拥有云端不存在的id,则表示应该被换绑了,直接删除 HdlGatewayLogic.Current.SynchronizeDbGateway(); //初始化个人信息的标识 UserCenterResourse.UserInfo.InitUserInfoSuccess = true; return true; } /// <summary> @@ -1057,13 +1123,8 @@ /// 初始化管理员权限远程连接主人的信息 /// </summary> /// <returns></returns> public static async Task<bool> InitAdminConnectMainInfo() private static async Task<bool> InitAdminConnectMainInfo() { //先清空 Config.Instance.isAdministrator = false; Config.Instance.AdminRequestBaseUrl = string.Empty; Config.Instance.AdminRequestToken = string.Empty; if (UserCenterResourse.UserInfo.AuthorityNo != 2 && UserCenterResourse.UserInfo.AuthorityNo != 3) { //时代变了,这里管理员和成员都能调用 @@ -1077,16 +1138,24 @@ SharedHid = Config.Instance.Home.Id }; var listNotShow = new List<string>() { "NotSetAgain" }; var result = await GetResponseDataByRequestHttps("App/GetSharedHomeApiControl", false, pra, listNotShow); if (string.IsNullOrEmpty(result) == true) //序列化对象 var requestJson = JsonConvert.SerializeObject(pra); //访问接口 byte[] byteData = await CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync("App/GetSharedHomeApiControl", Encoding.UTF8.GetBytes(requestJson)); if (byteData == null) { return false; } //检测错误 var revertObj = JsonConvert.DeserializeObject<ResponsePack>(Encoding.UTF8.GetString(byteData)); if (revertObj.StateCode.ToUpper() != "SUCCESS") { return false; } Config.Instance.isAdministrator = true; //分享链接 var info = JsonConvert.DeserializeObject<MemberAdministratorResult>(result); var info = JsonConvert.DeserializeObject<MemberAdministratorResult>(revertObj.ResponseData.ToString()); Config.Instance.AdminRequestBaseUrl = info.RequestBaseUrl; Config.Instance.AdminRequestToken = info.RequestToken; ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/IndoorUnitListForm.cs
@@ -211,7 +211,7 @@ { for (int i = 0; i < listDevice.Count; i++) { if (i != 0 && i % 5 == 0) if (i != 0 && i % 3 == 0) { //读取5个后,间隔一段时间 System.Threading.Thread.Sleep(200); ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/IndoorUnitSettionForm.cs
@@ -167,7 +167,7 @@ { //不能再点击 btnSwingSwitch.CanClick = false; string statu = btnSwingSwitch.IsSelected == true ? "1" : "0"; string statu = btnSwingSwitch.IsSelected == true ? "0" : "1"; //将二进制转换为十进制 int sendData = Convert.ToInt32(this.fixValue + statu, 2); HdlThreadLogic.Current.RunThread(async () => @@ -280,7 +280,7 @@ //转换为二进制 var value = Convert.ToString(data.AttriButeData, 2).PadLeft(16, '0'); //这个设置是放在后面的 this.fixValue = value.Substring(0, value.Length - 15); this.fixValue = value.Substring(0, value.Length - 1); this.swingMode = Convert.ToInt32(value.Substring(this.fixValue.Length)); } } ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs
@@ -61,7 +61,7 @@ /// <param name="i_listdevice">窗帘的回路</param> public void ShowForm(Rollershade i_CurtainDevice) { UserView.HomePage.Instance.ScrollEnabled = false; this.ScrollEnabled = false; this.curtainDevice = i_CurtainDevice; @@ -775,8 +775,6 @@ { HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute"); HdlGatewayReceiveLogic.Current.RemoveEvent("ReceiveLimitData"); UserView.HomePage.Instance.ScrollEnabled = true; base.CloseFormBefore(); } ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceAddSuccessForm.cs
@@ -213,9 +213,9 @@ }; } #endregion #endregion #region ■ 修改名字___________________________ #region ■ 修改名字___________________________ /// <summary> /// 设备重命名然后打开新的画面 @@ -251,47 +251,22 @@ /// </summary> private async void SetAllEpointName() { var tempValue = Common.LocalDevice.Current.GetDeviceObjectText(this.listNewDevice); var arry = tempValue.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries); var objName = arry[0].Trim(); //获取设备类型 var deviceInfoType = Common.LocalDevice.Current.GetMyDeviceEnumInfo(this.listNewDevice); foreach (var device in this.listNewDevice) { if (Common.LocalDevice.Current.GetSimpleEpointName(device) != string.Empty) { //有名字不处理 continue; } var epointName = objName; if (this.listNewDevice.Count > 1) { if (deviceInfoType.BeloneType == Common.DeviceBeloneType.A按键面板 && device.Type == DeviceType.TemperatureSensor) { //面板的最后一个回路是温度传感器 epointName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId11); } else if (deviceInfoType.ConcreteType == Common.DeviceConcreteType.Sensor_Pir) { //pir传感器,它又搞特殊东西,传感器自身用自己的名字,继电器回路的话…… if (device.Type == DeviceType.OnOffOutput) { epointName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2300); } } else { //XXXXX(N回路) epointName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; } } //获取端点名字 var epointName = Common.LocalDevice.Current.GetDeviceEpointName(device); await Common.LocalDevice.Current.ReName(device, epointName, ShowErrorMode.NO); } } #endregion #endregion #region ■ 画面关闭___________________________ #region ■ 画面关闭___________________________ /// <summary> /// 画面关闭 @@ -308,6 +283,6 @@ base.CloseFormBefore(); } #endregion #endregion } } ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceListMainForm.cs
@@ -43,6 +43,8 @@ /// </summary> public void ShowForm() { this.ScrollEnabled = false; //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.DeviceManagement)); ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelBackLightSettionForm.cs
@@ -40,7 +40,7 @@ /// <param name="i_listdevice">面板设备的全部回路</param> public void ShowForm(Panel i_panel) { UserView.HomePage.Instance.ScrollEnabled = false; this.ScrollEnabled = false; this.panelDevice = i_panel; @@ -557,20 +557,6 @@ private uint GetColorByRGB(byte R, byte G, byte B) { return (uint)(0xFF000000 + R * 256 * 256 + G * 256 + B); } #endregion #region ■ 界面关闭___________________________ /// <summary> /// 界面关闭 /// </summary> public override void CloseFormBefore() { UserView.HomePage.Instance.ScrollEnabled = true; base.CloseFormBefore(); } #endregion ZigbeeApp/Shared/Phone/UserCenter/Device/PirSensor/PirSensorBindTargetSettionForm.cs
@@ -52,7 +52,7 @@ /// <param name="i_iasZone">传感器设备</param> public void ShowForm(IASZone i_iasZone) { UserView.HomePage.Instance.ScrollEnabled = false; this.ScrollEnabled = false; deviceIASZone = i_iasZone; //设置头部信息 @@ -606,15 +606,6 @@ #endregion #region ■ 一般方法___________________________ /// <summary> /// 界面关闭 /// </summary> public override void CloseFormBefore() { UserView.HomePage.Instance.ScrollEnabled = true; base.CloseFormBefore(); } #endregion } ZigbeeApp/Shared/Phone/UserCenter/Device/Relay/RelayThreeLoadBackLightSettionForm.cs
@@ -43,7 +43,7 @@ /// </summary> public void ShowForm(string i_deviceMac) { UserView.HomePage.Instance.ScrollEnabled = false; this.ScrollEnabled = false; this.deviceMac = i_deviceMac; this.listDevice = Common.LocalDevice.Current.GetDevicesByMac(i_deviceMac); @@ -386,20 +386,6 @@ this.CloseProgressBar(); return true; } #endregion #region ■ 界面关闭___________________________ /// <summary> /// 界面关闭 /// </summary> public override void CloseFormBefore() { UserView.HomePage.Instance.ScrollEnabled = true; base.CloseFormBefore(); } #endregion ZigbeeApp/Shared/Phone/UserCenter/DoorLock/EntryStatusPage.cs
@@ -201,17 +201,17 @@ if (currentType == "password") { btnPasswordRemark.Text = Language.StringByID(R.MyInternationalizationString.PasswordRemark); btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Password) + "-" + doorLock.doorLockProgrammingEventNotificationCommand.UserID; btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Password) + "ID" + doorLock.doorLockProgrammingEventNotificationCommand.UserID; } else if (currentType == "fingerprint") { btnPasswordRemark.Text = Language.StringByID(R.MyInternationalizationString.FingerprintRemark); btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Fingerprint) + "-" + doorLock.doorLockProgrammingEventNotificationCommand.UserID; btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Fingerprint) + "ID" + doorLock.doorLockProgrammingEventNotificationCommand.UserID; } else { btnPasswordRemark.Text = Language.StringByID(R.MyInternationalizationString.ProximityRemark); btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.ProximityCard) + "-" + doorLock.doorLockProgrammingEventNotificationCommand.UserID; btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.IcCard) + "ID" + doorLock.doorLockProgrammingEventNotificationCommand.UserID; } if (!string.IsNullOrEmpty(curAccountObj.UserName)) ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs
@@ -104,6 +104,30 @@ row1 = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(row1); row1.AddLeftCaption("清除缓存文件", 500); row1.AddRightArrow(); row1.ButtonClickEvent += (sender, e) => { this.ShowMassage(ShowMsgType.Confirm, "是否清除缓存文件", () => { var myPath = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory); try { System.IO.Directory.Delete(myPath, true); System.IO.Directory.CreateDirectory(myPath); this.ShowMassage(ShowMsgType.Tip, "清除缓存文件完成,请重新登陆"); UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account); } catch (Exception ex) { this.ShowMassage(ShowMsgType.Error, "清除缓存文件异常"); HdlLogLogic.Current.WriteLog(ex, "清除缓存文件异常"); } }); }; row1 = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(row1); row1.AddLeftCaption("上传Log", 500); row1.AddRightArrow(); row1.ButtonClickEvent += (sender, e) => ZigbeeApp/Shared/Phone/UserCenter/Password/EditorGesturePasswordForm.cs
@@ -30,7 +30,7 @@ public void ShowForm() { //界面右划不可 UserView.HomePage.Instance.ScrollEnabled = false; this.ScrollEnabled = false; //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uGestureAuthentication)); @@ -260,21 +260,6 @@ }); } }); } #endregion #region ■ 界面关闭___________________________ /// <summary> /// 界面关闭 /// </summary> public override void CloseFormBefore() { //界面右划可 UserView.HomePage.Instance.ScrollEnabled = true; base.CloseFormBefore(); } #endregion ZigbeeApp/Shared/Phone/UserView/UserHomeView.cs
@@ -1813,8 +1813,9 @@ } var sceneView = new SceneMainView(xx, yy); itemView.AddChidren(sceneView); sceneView.Init(scene); itemView.AddChidren(sceneView); sceneView.CollectionAction += ShowScene; } GetDelayScene(sceneScrolView); }