Selaa lähdekoodia

refactor(更新) :
- 开关状态界面更新
- 指纹录入逻辑修改
- 列表添加分割线

周文健 3 kuukautta sitten
vanhempi
sitoutus
3c4ecceedc

+ 1 - 0
app/build.gradle

@@ -142,4 +142,5 @@ dependencies {
 
     implementation 'com.github.SilverIceKey.SIKExtension:SIKCore:1.1.56'
     implementation 'com.github.SilverIceKey.SIKExtension:SIKAndroid:1.1.56'
+    implementation 'com.github.liangjingkanji:BRV:1.6.1'
 }

+ 1034 - 0
app/src/main/java/com/grkj/iscs_mars/model/SimData.kt

@@ -0,0 +1,1034 @@
+package com.grkj.iscs_mars.model
+
+/**
+ * 模拟数据
+ */
+object SimData {
+    /**
+     * 地图数据
+     */
+    val mapData = """
+        {
+  "code": 200,
+  "data": {
+    "createBy": "117",
+    "createTime": "2025-03-20 15:28:18",
+    "updateBy": "117",
+    "updateTime": null,
+    "remark": null,
+    "paramMap": {},
+    "id": "8",
+    "name": "四号锁定站柜体",
+    "imageUrl": "http://120.27.232.27:9191/prod-api/profile/upload/2025/05/21/table_20250321115819A001_20250521141008A017.png",
+    "width": "540",
+    "height": "790",
+    "x": "330",
+    "y": "10",
+    "delFlag": "0",
+    "pointList": [
+      {
+        "id": "1",
+        "mapId": "8",
+        "entityId": "681",
+        "entityName": "E-38",
+        "x": "0",
+        "y": "7",
+        "pointSerialNumber": "1",
+        "switchStatus": "0"
+      },
+      {
+        "id": "2",
+        "mapId": "8",
+        "entityId": "612",
+        "entityName": "E-176",
+        "x": "5",
+        "y": "3",
+        "pointSerialNumber": "2",
+        "switchStatus": "0"
+      },
+      {
+        "id": "3",
+        "mapId": "8",
+        "entityId": "928",
+        "entityName": "E-76",
+        "x": "0",
+        "y": "11",
+        "pointSerialNumber": "3",
+        "switchStatus": "0"
+      },
+      {
+        "id": "4",
+        "mapId": "8",
+        "entityId": "226",
+        "entityName": "E-150",
+        "x": "6",
+        "y": "0",
+        "pointSerialNumber": "4",
+        "switchStatus": "0"
+      },
+      {
+        "id": "5",
+        "mapId": "8",
+        "entityId": "448",
+        "entityName": "E-143",
+        "x": "0",
+        "y": "1",
+        "pointSerialNumber": "5",
+        "switchStatus": "0"
+      },
+      {
+        "id": "6",
+        "mapId": "8",
+        "entityId": "906",
+        "entityName": "E-106",
+        "x": "1",
+        "y": "4",
+        "pointSerialNumber": "6",
+        "switchStatus": "0"
+      },
+      {
+        "id": "7",
+        "mapId": "8",
+        "entityId": "456",
+        "entityName": "E-20",
+        "x": "1",
+        "y": "5",
+        "pointSerialNumber": "7",
+        "switchStatus": "0"
+      },
+      {
+        "id": "8",
+        "mapId": "8",
+        "entityId": "989",
+        "entityName": "E-147",
+        "x": "0",
+        "y": "3",
+        "pointSerialNumber": "8",
+        "switchStatus": "0"
+      },
+      {
+        "id": "9",
+        "mapId": "8",
+        "entityId": "300",
+        "entityName": "E-80",
+        "x": "1",
+        "y": "11",
+        "pointSerialNumber": "9",
+        "switchStatus": "0"
+      },
+      {
+        "id": "10",
+        "mapId": "8",
+        "entityId": "822",
+        "entityName": "E-86",
+        "x": "7",
+        "y": "10",
+        "pointSerialNumber": "10",
+        "switchStatus": "0"
+      },
+      {
+        "id": "11",
+        "mapId": "8",
+        "entityId": "482",
+        "entityName": "E-170",
+        "x": "3",
+        "y": "4",
+        "pointSerialNumber": "11",
+        "switchStatus": "0"
+      },
+      {
+        "id": "12",
+        "mapId": "8",
+        "entityId": "412",
+        "entityName": "E-86",
+        "x": "0",
+        "y": "13",
+        "pointSerialNumber": "12",
+        "switchStatus": "0"
+      },
+      {
+        "id": "13",
+        "mapId": "8",
+        "entityId": "496",
+        "entityName": "E-140",
+        "x": "0",
+        "y": "6",
+        "pointSerialNumber": "13",
+        "switchStatus": "0"
+      },
+      {
+        "id": "14",
+        "mapId": "8",
+        "entityId": "267",
+        "entityName": "E-64",
+        "x": "0",
+        "y": "14",
+        "pointSerialNumber": "14",
+        "switchStatus": "0"
+      },
+      {
+        "id": "15",
+        "mapId": "8",
+        "entityId": "379",
+        "entityName": "E-24",
+        "x": "8",
+        "y": "11",
+        "pointSerialNumber": "15",
+        "switchStatus": "0"
+      },
+      {
+        "id": "16",
+        "mapId": "8",
+        "entityId": "527",
+        "entityName": "E-102",
+        "x": "3",
+        "y": "5",
+        "pointSerialNumber": "16",
+        "switchStatus": "0"
+      },
+      {
+        "id": "17",
+        "mapId": "8",
+        "entityId": "690",
+        "entityName": "E-175",
+        "x": "5",
+        "y": "4",
+        "pointSerialNumber": "17",
+        "switchStatus": "0"
+      },
+      {
+        "id": "18",
+        "mapId": "8",
+        "entityId": "984",
+        "entityName": "E-9",
+        "x": "9",
+        "y": "3",
+        "pointSerialNumber": "18",
+        "switchStatus": "0"
+      },
+      {
+        "id": "19",
+        "mapId": "8",
+        "entityId": "888",
+        "entityName": "E-107",
+        "x": "4",
+        "y": "2",
+        "pointSerialNumber": "19",
+        "switchStatus": "0"
+      },
+      {
+        "id": "20",
+        "mapId": "8",
+        "entityId": "407",
+        "entityName": "E-87",
+        "x": "8",
+        "y": "6",
+        "pointSerialNumber": "20",
+        "switchStatus": "0"
+      },
+      {
+        "id": "21",
+        "mapId": "8",
+        "entityId": "829",
+        "entityName": "E-89",
+        "x": "5",
+        "y": "10",
+        "pointSerialNumber": "21",
+        "switchStatus": "0"
+      },
+      {
+        "id": "22",
+        "mapId": "8",
+        "entityId": "808",
+        "entityName": "E-58",
+        "x": "5",
+        "y": "14",
+        "pointSerialNumber": "22",
+        "switchStatus": "0"
+      },
+      {
+        "id": "23",
+        "mapId": "8",
+        "entityId": "889",
+        "entityName": "E-38",
+        "x": "9",
+        "y": "6",
+        "pointSerialNumber": "23",
+        "switchStatus": "0"
+      },
+      {
+        "id": "24",
+        "mapId": "8",
+        "entityId": "192",
+        "entityName": "E-59",
+        "x": "7",
+        "y": "7",
+        "pointSerialNumber": "24",
+        "switchStatus": "0"
+      },
+      {
+        "id": "25",
+        "mapId": "8",
+        "entityId": "205",
+        "entityName": "E-141",
+        "x": "7",
+        "y": "9",
+        "pointSerialNumber": "25",
+        "switchStatus": "0"
+      },
+      {
+        "id": "26",
+        "mapId": "8",
+        "entityId": "678",
+        "entityName": "E-49",
+        "x": "7",
+        "y": "1",
+        "pointSerialNumber": "26",
+        "switchStatus": "0"
+      },
+      {
+        "id": "27",
+        "mapId": "8",
+        "entityId": "662",
+        "entityName": "E-96",
+        "x": "9",
+        "y": "13",
+        "pointSerialNumber": "27",
+        "switchStatus": "0"
+      },
+      {
+        "id": "28",
+        "mapId": "8",
+        "entityId": "672",
+        "entityName": "E-134",
+        "x": "6",
+        "y": "10",
+        "pointSerialNumber": "28",
+        "switchStatus": "0"
+      },
+      {
+        "id": "29",
+        "mapId": "8",
+        "entityId": "474",
+        "entityName": "E-16",
+        "x": "1",
+        "y": "0",
+        "pointSerialNumber": "29",
+        "switchStatus": "0"
+      },
+      {
+        "id": "30",
+        "mapId": "8",
+        "entityId": "858",
+        "entityName": "E-76",
+        "x": "1",
+        "y": "10",
+        "pointSerialNumber": "30",
+        "switchStatus": "0"
+      },
+      {
+        "id": "31",
+        "mapId": "8",
+        "entityId": "696",
+        "entityName": "E-68",
+        "x": "9",
+        "y": "15",
+        "pointSerialNumber": "31",
+        "switchStatus": "0"
+      },
+      {
+        "id": "32",
+        "mapId": "8",
+        "entityId": "798",
+        "entityName": "E-117",
+        "x": "0",
+        "y": "2",
+        "pointSerialNumber": "32",
+        "switchStatus": "0"
+      },
+      {
+        "id": "33",
+        "mapId": "8",
+        "entityId": "133",
+        "entityName": "E-104",
+        "x": "2",
+        "y": "2",
+        "pointSerialNumber": "33",
+        "switchStatus": "0"
+      },
+      {
+        "id": "34",
+        "mapId": "8",
+        "entityId": "657",
+        "entityName": "E-47",
+        "x": "2",
+        "y": "10",
+        "pointSerialNumber": "34",
+        "switchStatus": "0"
+      },
+      {
+        "id": "35",
+        "mapId": "8",
+        "entityId": "629",
+        "entityName": "E-147",
+        "x": "7",
+        "y": "2",
+        "pointSerialNumber": "35",
+        "switchStatus": "0"
+      },
+      {
+        "id": "36",
+        "mapId": "8",
+        "entityId": "113",
+        "entityName": "E-50",
+        "x": "1",
+        "y": "15",
+        "pointSerialNumber": "36",
+        "switchStatus": "0"
+      },
+      {
+        "id": "37",
+        "mapId": "8",
+        "entityId": "897",
+        "entityName": "E-195",
+        "x": "2",
+        "y": "8",
+        "pointSerialNumber": "37",
+        "switchStatus": "0"
+      },
+      {
+        "id": "38",
+        "mapId": "8",
+        "entityId": "201",
+        "entityName": "E-120",
+        "x": "8",
+        "y": "12",
+        "pointSerialNumber": "38",
+        "switchStatus": "0"
+      },
+      {
+        "id": "39",
+        "mapId": "8",
+        "entityId": "829",
+        "entityName": "E-114",
+        "x": "8",
+        "y": "1",
+        "pointSerialNumber": "39",
+        "switchStatus": "0"
+      },
+      {
+        "id": "40",
+        "mapId": "8",
+        "entityId": "171",
+        "entityName": "E-198",
+        "x": "10",
+        "y": "6",
+        "pointSerialNumber": "40",
+        "switchStatus": "0"
+      },
+      {
+        "id": "41",
+        "mapId": "8",
+        "entityId": "495",
+        "entityName": "E-54",
+        "x": "0",
+        "y": "5",
+        "pointSerialNumber": "41",
+        "switchStatus": "0"
+      },
+      {
+        "id": "42",
+        "mapId": "8",
+        "entityId": "137",
+        "entityName": "E-159",
+        "x": "8",
+        "y": "3",
+        "pointSerialNumber": "42",
+        "switchStatus": "0"
+      },
+      {
+        "id": "43",
+        "mapId": "8",
+        "entityId": "193",
+        "entityName": "E-69",
+        "x": "10",
+        "y": "1",
+        "pointSerialNumber": "43",
+        "switchStatus": "0"
+      },
+      {
+        "id": "44",
+        "mapId": "8",
+        "entityId": "480",
+        "entityName": "E-155",
+        "x": "1",
+        "y": "3",
+        "pointSerialNumber": "44",
+        "switchStatus": "0"
+      },
+      {
+        "id": "45",
+        "mapId": "8",
+        "entityId": "189",
+        "entityName": "E-149",
+        "x": "0",
+        "y": "12",
+        "pointSerialNumber": "45",
+        "switchStatus": "0"
+      },
+      {
+        "id": "46",
+        "mapId": "8",
+        "entityId": "698",
+        "entityName": "E-113",
+        "x": "4",
+        "y": "10",
+        "pointSerialNumber": "46",
+        "switchStatus": "0"
+      },
+      {
+        "id": "47",
+        "mapId": "8",
+        "entityId": "829",
+        "entityName": "E-112",
+        "x": "5",
+        "y": "1",
+        "pointSerialNumber": "47",
+        "switchStatus": "0"
+      },
+      {
+        "id": "48",
+        "mapId": "8",
+        "entityId": "874",
+        "entityName": "E-189",
+        "x": "9",
+        "y": "5",
+        "pointSerialNumber": "48",
+        "switchStatus": "0"
+      },
+      {
+        "id": "49",
+        "mapId": "8",
+        "entityId": "414",
+        "entityName": "E-177",
+        "x": "1",
+        "y": "14",
+        "pointSerialNumber": "49",
+        "switchStatus": "0"
+      },
+      {
+        "id": "50",
+        "mapId": "8",
+        "entityId": "602",
+        "entityName": "E-144",
+        "x": "2",
+        "y": "5",
+        "pointSerialNumber": "50",
+        "switchStatus": "0"
+      },
+      {
+        "id": "51",
+        "mapId": "8",
+        "entityId": "232",
+        "entityName": "E-140",
+        "x": "8",
+        "y": "0",
+        "pointSerialNumber": "51",
+        "switchStatus": "0"
+      },
+      {
+        "id": "52",
+        "mapId": "8",
+        "entityId": "794",
+        "entityName": "E-129",
+        "x": "6",
+        "y": "12",
+        "pointSerialNumber": "52",
+        "switchStatus": "0"
+      },
+      {
+        "id": "53",
+        "mapId": "8",
+        "entityId": "869",
+        "entityName": "E-56",
+        "x": "1",
+        "y": "2",
+        "pointSerialNumber": "53",
+        "switchStatus": "0"
+      },
+      {
+        "id": "54",
+        "mapId": "8",
+        "entityId": "384",
+        "entityName": "E-107",
+        "x": "5",
+        "y": "9",
+        "pointSerialNumber": "54",
+        "switchStatus": "0"
+      },
+      {
+        "id": "55",
+        "mapId": "8",
+        "entityId": "504",
+        "entityName": "E-33",
+        "x": "5",
+        "y": "8",
+        "pointSerialNumber": "55",
+        "switchStatus": "0"
+      },
+      {
+        "id": "56",
+        "mapId": "8",
+        "entityId": "411",
+        "entityName": "E-25",
+        "x": "3",
+        "y": "3",
+        "pointSerialNumber": "56",
+        "switchStatus": "0"
+      },
+      {
+        "id": "57",
+        "mapId": "8",
+        "entityId": "272",
+        "entityName": "E-163",
+        "x": "3",
+        "y": "10",
+        "pointSerialNumber": "57",
+        "switchStatus": "0"
+      },
+      {
+        "id": "58",
+        "mapId": "8",
+        "entityId": "533",
+        "entityName": "E-183",
+        "x": "9",
+        "y": "9",
+        "pointSerialNumber": "58",
+        "switchStatus": "0"
+      },
+      {
+        "id": "59",
+        "mapId": "8",
+        "entityId": "639",
+        "entityName": "E-72",
+        "x": "2",
+        "y": "14",
+        "pointSerialNumber": "59",
+        "switchStatus": "0"
+      },
+      {
+        "id": "60",
+        "mapId": "8",
+        "entityId": "664",
+        "entityName": "E-184",
+        "x": "8",
+        "y": "5",
+        "pointSerialNumber": "60",
+        "switchStatus": "0"
+      },
+      {
+        "id": "61",
+        "mapId": "8",
+        "entityId": "667",
+        "entityName": "E-193",
+        "x": "9",
+        "y": "2",
+        "pointSerialNumber": "61",
+        "switchStatus": "0"
+      },
+      {
+        "id": "62",
+        "mapId": "8",
+        "entityId": "942",
+        "entityName": "E-96",
+        "x": "4",
+        "y": "8",
+        "pointSerialNumber": "62",
+        "switchStatus": "0"
+      },
+      {
+        "id": "63",
+        "mapId": "8",
+        "entityId": "591",
+        "entityName": "E-35",
+        "x": "8",
+        "y": "9",
+        "pointSerialNumber": "63",
+        "switchStatus": "0"
+      },
+      {
+        "id": "64",
+        "mapId": "8",
+        "entityId": "120",
+        "entityName": "E-104",
+        "x": "2",
+        "y": "12",
+        "pointSerialNumber": "64",
+        "switchStatus": "0"
+      },
+      {
+        "id": "65",
+        "mapId": "8",
+        "entityId": "401",
+        "entityName": "E-149",
+        "x": "8",
+        "y": "13",
+        "pointSerialNumber": "65",
+        "switchStatus": "0"
+      },
+      {
+        "id": "66",
+        "mapId": "8",
+        "entityId": "955",
+        "entityName": "E-38",
+        "x": "9",
+        "y": "14",
+        "pointSerialNumber": "66",
+        "switchStatus": "0"
+      },
+      {
+        "id": "67",
+        "mapId": "8",
+        "entityId": "891",
+        "entityName": "E-71",
+        "x": "1",
+        "y": "9",
+        "pointSerialNumber": "67",
+        "switchStatus": "0"
+      },
+      {
+        "id": "68",
+        "mapId": "8",
+        "entityId": "827",
+        "entityName": "E-40",
+        "x": "0",
+        "y": "10",
+        "pointSerialNumber": "68",
+        "switchStatus": "0"
+      },
+      {
+        "id": "69",
+        "mapId": "8",
+        "entityId": "931",
+        "entityName": "E-48",
+        "x": "1",
+        "y": "1",
+        "pointSerialNumber": "69",
+        "switchStatus": "0"
+      },
+      {
+        "id": "70",
+        "mapId": "8",
+        "entityId": "351",
+        "entityName": "E-12",
+        "x": "6",
+        "y": "2",
+        "pointSerialNumber": "70",
+        "switchStatus": "0"
+      },
+      {
+        "id": "71",
+        "mapId": "8",
+        "entityId": "669",
+        "entityName": "E-15",
+        "x": "5",
+        "y": "12",
+        "pointSerialNumber": "71",
+        "switchStatus": "0"
+      },
+      {
+        "id": "72",
+        "mapId": "8",
+        "entityId": "774",
+        "entityName": "E-11",
+        "x": "6",
+        "y": "13",
+        "pointSerialNumber": "72",
+        "switchStatus": "0"
+      },
+      {
+        "id": "73",
+        "mapId": "8",
+        "entityId": "156",
+        "entityName": "E-9",
+        "x": "3",
+        "y": "8",
+        "pointSerialNumber": "73",
+        "switchStatus": "0"
+      },
+      {
+        "id": "74",
+        "mapId": "8",
+        "entityId": "100",
+        "entityName": "E-68",
+        "x": "2",
+        "y": "3",
+        "pointSerialNumber": "74",
+        "switchStatus": "0"
+      },
+      {
+        "id": "75",
+        "mapId": "8",
+        "entityId": "527",
+        "entityName": "E-44",
+        "x": "5",
+        "y": "2",
+        "pointSerialNumber": "75",
+        "switchStatus": "0"
+      },
+      {
+        "id": "76",
+        "mapId": "8",
+        "entityId": "787",
+        "entityName": "E-99",
+        "x": "6",
+        "y": "11",
+        "pointSerialNumber": "76",
+        "switchStatus": "0"
+      },
+      {
+        "id": "77",
+        "mapId": "8",
+        "entityId": "141",
+        "entityName": "E-130",
+        "x": "5",
+        "y": "5",
+        "pointSerialNumber": "77",
+        "switchStatus": "0"
+      },
+      {
+        "id": "78",
+        "mapId": "8",
+        "entityId": "137",
+        "entityName": "E-35",
+        "x": "4",
+        "y": "3",
+        "pointSerialNumber": "78",
+        "switchStatus": "0"
+      },
+      {
+        "id": "79",
+        "mapId": "8",
+        "entityId": "919",
+        "entityName": "E-100",
+        "x": "4",
+        "y": "15",
+        "pointSerialNumber": "79",
+        "switchStatus": "0"
+      },
+      {
+        "id": "80",
+        "mapId": "8",
+        "entityId": "654",
+        "entityName": "E-176",
+        "x": "8",
+        "y": "15",
+        "pointSerialNumber": "80",
+        "switchStatus": "0"
+      },
+      {
+        "id": "81",
+        "mapId": "8",
+        "entityId": "886",
+        "entityName": "E-130",
+        "x": "4",
+        "y": "14",
+        "pointSerialNumber": "81",
+        "switchStatus": "0"
+      },
+      {
+        "id": "82",
+        "mapId": "8",
+        "entityId": "738",
+        "entityName": "E-104",
+        "x": "2",
+        "y": "4",
+        "pointSerialNumber": "82",
+        "switchStatus": "0"
+      },
+      {
+        "id": "83",
+        "mapId": "8",
+        "entityId": "809",
+        "entityName": "E-188",
+        "x": "10",
+        "y": "5",
+        "pointSerialNumber": "83",
+        "switchStatus": "0"
+      },
+      {
+        "id": "84",
+        "mapId": "8",
+        "entityId": "310",
+        "entityName": "E-42",
+        "x": "10",
+        "y": "9",
+        "pointSerialNumber": "84",
+        "switchStatus": "0"
+      },
+      {
+        "id": "85",
+        "mapId": "8",
+        "entityId": "817",
+        "entityName": "E-84",
+        "x": "4",
+        "y": "13",
+        "pointSerialNumber": "85",
+        "switchStatus": "0"
+      },
+      {
+        "id": "86",
+        "mapId": "8",
+        "entityId": "808",
+        "entityName": "E-158",
+        "x": "3",
+        "y": "0",
+        "pointSerialNumber": "86",
+        "switchStatus": "0"
+      },
+      {
+        "id": "87",
+        "mapId": "8",
+        "entityId": "826",
+        "entityName": "E-118",
+        "x": "6",
+        "y": "9",
+        "pointSerialNumber": "87",
+        "switchStatus": "0"
+      },
+      {
+        "id": "88",
+        "mapId": "8",
+        "entityId": "746",
+        "entityName": "E-96",
+        "x": "3",
+        "y": "15",
+        "pointSerialNumber": "88",
+        "switchStatus": "0"
+      },
+      {
+        "id": "89",
+        "mapId": "8",
+        "entityId": "320",
+        "entityName": "E-12",
+        "x": "7",
+        "y": "8",
+        "pointSerialNumber": "89",
+        "switchStatus": "0"
+      },
+      {
+        "id": "90",
+        "mapId": "8",
+        "entityId": "333",
+        "entityName": "E-165",
+        "x": "10",
+        "y": "3",
+        "pointSerialNumber": "90",
+        "switchStatus": "0"
+      },
+      {
+        "id": "91",
+        "mapId": "8",
+        "entityId": "419",
+        "entityName": "E-177",
+        "x": "1",
+        "y": "7",
+        "pointSerialNumber": "91",
+        "switchStatus": "0"
+      },
+      {
+        "id": "92",
+        "mapId": "8",
+        "entityId": "447",
+        "entityName": "E-3",
+        "x": "10",
+        "y": "4",
+        "pointSerialNumber": "92",
+        "switchStatus": "0"
+      },
+      {
+        "id": "93",
+        "mapId": "8",
+        "entityId": "137",
+        "entityName": "E-71",
+        "x": "0",
+        "y": "8",
+        "pointSerialNumber": "93",
+        "switchStatus": "0"
+      },
+      {
+        "id": "94",
+        "mapId": "8",
+        "entityId": "125",
+        "entityName": "E-137",
+        "x": "4",
+        "y": "11",
+        "pointSerialNumber": "94",
+        "switchStatus": "0"
+      },
+      {
+        "id": "95",
+        "mapId": "8",
+        "entityId": "753",
+        "entityName": "E-173",
+        "x": "9",
+        "y": "1",
+        "pointSerialNumber": "95",
+        "switchStatus": "0"
+      },
+      {
+        "id": "96",
+        "mapId": "8",
+        "entityId": "626",
+        "entityName": "E-16",
+        "x": "3",
+        "y": "13",
+        "pointSerialNumber": "96",
+        "switchStatus": "0"
+      },
+      {
+        "id": "97",
+        "mapId": "8",
+        "entityId": "306",
+        "entityName": "E-180",
+        "x": "5",
+        "y": "11",
+        "pointSerialNumber": "97",
+        "switchStatus": "0"
+      },
+      {
+        "id": "98",
+        "mapId": "8",
+        "entityId": "251",
+        "entityName": "E-116",
+        "x": "3",
+        "y": "11",
+        "pointSerialNumber": "98",
+        "switchStatus": "0"
+      },
+      {
+        "id": "99",
+        "mapId": "8",
+        "entityId": "101",
+        "entityName": "E-58",
+        "x": "6",
+        "y": "7",
+        "pointSerialNumber": "99",
+        "switchStatus": "0"
+      },
+      {
+        "id": "100",
+        "mapId": "8",
+        "entityId": "652",
+        "entityName": "E-151",
+        "x": "1",
+        "y": "6",
+        "pointSerialNumber": "100",
+        "switchStatus": "0"
+      }
+    ]
+  },
+  "msg": ""
+}
+    """.trimIndent()
+}

+ 5 - 1
app/src/main/java/com/grkj/iscs_mars/util/NetApi.kt

@@ -1,10 +1,14 @@
 package com.grkj.iscs_mars.util
 
 import android.graphics.Bitmap
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
 import com.grkj.iscs_mars.BusinessManager
 import com.grkj.iscs_mars.MyApplication
+import com.grkj.iscs_mars.model.SimData
 import com.grkj.iscs_mars.model.Token
 import com.grkj.iscs_mars.model.UrlConsts
+import com.grkj.iscs_mars.model.vo.BaseVO
 import com.grkj.iscs_mars.model.vo.FileStreamReqParam
 import com.grkj.iscs_mars.model.vo.cabinet.LockCabinetPageRespVO
 import com.grkj.iscs_mars.model.vo.card.CardInfoRespVO
@@ -1433,7 +1437,7 @@ object NetApi {
             false,
             mapOf(
                 "current" to 1,
-                "size" to 50
+                "size" to -1
             ),
             { res, _, _ ->
                 res?.let {

+ 0 - 1
app/src/main/java/com/grkj/iscs_mars/view/activity/HomeActivity.kt

@@ -35,7 +35,6 @@ import com.grkj.iscs_mars.view.fragment.DockTestFragment
 import com.grkj.iscs_mars.view.fragment.ExceptionReportFragment
 import com.grkj.iscs_mars.view.fragment.JobManagementFragment
 import com.grkj.iscs_mars.view.fragment.SettingFragment
-import com.grkj.iscs_mars.view.fragment.SwitchStatusFragment
 import com.grkj.iscs_mars.view.fragment.SystemSettingFragment
 import com.grkj.iscs_mars.view.iview.IHomeView
 import com.grkj.iscs_mars.view.presenter.HomePresenter

+ 43 - 9
app/src/main/java/com/grkj/iscs_mars/view/activity/SwitchStatusActivity.kt

@@ -5,8 +5,18 @@ import android.view.MotionEvent
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.repeatOnLifecycle
+import com.drake.brv.BindingAdapter
+import com.drake.brv.annotaion.DividerOrientation
+import com.drake.brv.utils.divider
+import com.drake.brv.utils.linear
+import com.drake.brv.utils.models
+import com.drake.brv.utils.setup
 import com.grkj.iscs_mars.BusinessManager
+import com.grkj.iscs_mars.R
 import com.grkj.iscs_mars.databinding.ActivitySwitchStatusBinding
+import com.grkj.iscs_mars.databinding.ItemSwitchBinding
+import com.grkj.iscs_mars.modbus.ModBusController
+import com.grkj.iscs_mars.model.vo.map.MapInfoRespVO.IsMapPoint
 import com.grkj.iscs_mars.util.ToastUtils
 import com.grkj.iscs_mars.view.base.BaseMvpActivity
 import com.grkj.iscs_mars.view.iview.ISwitchStatusView
@@ -33,29 +43,53 @@ class SwitchStatusActivity :
         mBinding?.cbBack?.setDebouncedClickListener {
             finish()
         }
-        gestureDetector = GestureDetector(this, object :
-            GestureDetector.SimpleOnGestureListener() {
+        gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
             override fun onDoubleTap(e: MotionEvent): Boolean {
                 mBinding?.mapview?.currentRotateDegrees = 0f
                 return super.onDoubleTap(e)
             }
 
             override fun onFling(
-                e1: MotionEvent?,
-                e2: MotionEvent,
-                velocityX: Float,
-                velocityY: Float
+                e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float
             ): Boolean {
                 mBinding?.mapview?.currentRotateDegrees = 0f
                 return super.onFling(e1, e2, velocityX, velocityY)
             }
         })
+        mBinding?.rvList?.linear()?.divider {
+            orientation = DividerOrientation.HORIZONTAL
+            setColorRes(R.color.common_bg_black_30)
+        }?.setup {
+            addType<IsMapPoint>(R.layout.item_switch)
+            onBind {
+                onRVListBinding()
+            }
+        }
         initMap()
         lifecycleScope.launch {
             repeatOnLifecycle(Lifecycle.State.RESUMED) {
                 delay(1000)
-                BusinessManager.updateSwitchStatus {}
+                BusinessManager.updateSwitchStatus {
+                    mBinding?.rvList?.adapter?.notifyDataSetChanged()
+                }
             }
+        }
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onRVListBinding() {
+        val itemBinding = getBinding<ItemSwitchBinding>()
+        val item = getModel<IsMapPoint>()
+        itemBinding.index.text = "${modelPosition + 1}"
+        itemBinding.pointName.text = item.entityName
+        val switchData = ModBusController.getSwitchData()
+        val switchStatus = switchData
+            .find { it.idx == item.pointSerialNumber?.toInt() }?.enabled
+        itemBinding.status.text = if (switchStatus == true) {
+            getString(R.string.switch_open)
+        } else {
+            getString(R.string.switch_close)
+        }
+        itemBinding.position.setDebouncedClickListener {
 
         }
     }
@@ -69,6 +103,7 @@ class SwitchStatusActivity :
 
     private fun getMap(mapId: String) {
         presenter?.getMapInfo(mapId.toLong()) { itMapInfo ->
+            mBinding?.rvList?.models = itMapInfo?.pointList
             presenter?.mapDataHandle(this, itMapInfo, stationLayer) { mapBmp ->
                 mBinding?.mapview?.loadMap(mapBmp)
             }
@@ -91,8 +126,7 @@ class SwitchStatusActivity :
                     return
                 }
                 stationLayer = CustomSwitchStationLayer(
-                    mBinding?.mapview,
-                    presenter?.mStationList ?: mutableListOf()
+                    mBinding?.mapview, presenter?.mStationList ?: mutableListOf()
                 )
                 mBinding?.mapview?.addLayer(stationLayer)
                 stationLayer?.setRatio(presenter?.mapRatio ?: 1f)

+ 2 - 1
app/src/main/java/com/grkj/iscs_mars/view/dialog/FingerScanDialog.kt

@@ -9,13 +9,14 @@ import com.grkj.iscs_mars.view.base.BaseDialog
 /**
  * 指纹采集弹框
  */
-class FingerScanDialog(val ctx: Context, var callback: (Bitmap?) -> Unit) :
+class FingerScanDialog(val ctx: Context, var callback: (Bitmap?) -> Unit,var clear:()-> Unit) :
     BaseDialog<DialogFingerScanBinding>(ctx) {
     override val viewBinding: DialogFingerScanBinding
         get() = DialogFingerScanBinding.inflate(layoutInflater)
 
     override fun initView() {
         mBinding?.tvCancel?.setOnClickListener {
+            clear()
             dismiss()
         }
     }

+ 6 - 1
app/src/main/java/com/grkj/iscs_mars/view/fragment/FingerprintConfigFragment.kt

@@ -41,6 +41,7 @@ class FingerprintConfigFragment :
                 ToastUtils.tip(getString(R.string.fingerprint_config_tip, mFingerprintLimit / 3))
                 return@setOnClickListener
             }
+            inputFingerprintIds.clear()
             mFingerprintPressTimes = 0
             mFingerprintInputErrorTimes = 0
             showFingerScanDialog()
@@ -111,7 +112,7 @@ class FingerprintConfigFragment :
 
     private fun showFingerScanDialog() {
         mFingerDialog ?: let {
-            mFingerDialog = FingerScanDialog(requireContext()) {
+            mFingerDialog = FingerScanDialog(requireContext(), {
                 if (it != null) {
                     presenter?.insertFinger(it, "$mFingerprintGroupName") {
                         if (it != null) {
@@ -150,6 +151,10 @@ class FingerprintConfigFragment :
                         }
                     }
                 }
+            }) {
+                presenter?.deleteFinger(inputFingerprintIds.joinToString(",")) {
+                    refreshFingerList()
+                }
             }
         }
         mFingerprintPressTimes = 0

+ 0 - 169
app/src/main/java/com/grkj/iscs_mars/view/fragment/SwitchStatusFragment.kt

@@ -1,169 +0,0 @@
-package com.grkj.iscs_mars.view.fragment
-
-import android.graphics.PointF
-import android.view.GestureDetector
-import android.view.MotionEvent
-import com.grkj.iscs_mars.BusinessManager
-import com.grkj.iscs_mars.databinding.FragmentSwitchStatusBinding
-import com.grkj.iscs_mars.util.BitmapUtil
-import com.grkj.iscs_mars.util.ToastUtils
-import com.grkj.iscs_mars.util.log.LogUtil
-import com.grkj.iscs_mars.view.base.BaseMvpFragment
-import com.grkj.iscs_mars.view.iview.ISwitchStatusView
-import com.grkj.iscs_mars.view.presenter.SwitchStatusPresenter
-import com.grkj.iscs_mars.view.widget.CustomSwitchStationLayer
-import com.onlylemi.mapview.library.MapViewListener
-import com.sik.sikcore.thread.ThreadUtils
-
-class SwitchStatusFragment :
-    BaseMvpFragment<ISwitchStatusView, SwitchStatusPresenter, FragmentSwitchStatusBinding>() {
-    private var mapRatio: Float = 1f
-    private var stationLayer: CustomSwitchStationLayer? = null
-    private val mStationList = mutableListOf<CustomSwitchStationLayer.IsolationPoint>()
-    private lateinit var gestureDetector: GestureDetector
-
-    override fun initPresenter(): SwitchStatusPresenter {
-        return SwitchStatusPresenter()
-    }
-
-    override val viewBinding: FragmentSwitchStatusBinding
-        get() = FragmentSwitchStatusBinding.inflate(layoutInflater)
-
-    override fun initView() {
-        gestureDetector = GestureDetector(requireContext(), object :
-            GestureDetector.SimpleOnGestureListener() {
-            override fun onDoubleTap(e: MotionEvent): Boolean {
-                mBinding?.mapview?.currentRotateDegrees = 0f
-                return super.onDoubleTap(e)
-            }
-
-            override fun onFling(
-                e1: MotionEvent?,
-                e2: MotionEvent,
-                velocityX: Float,
-                velocityY: Float
-            ): Boolean {
-                mBinding?.mapview?.currentRotateDegrees = 0f
-                return super.onFling(e1, e2, velocityX, velocityY)
-            }
-        })
-        initMap()
-    }
-
-    override fun onResume() {
-        super.onResume()
-        presenter?.getMapData {
-            getMap(it)
-        }
-        fun refreshSwitchStatus() {
-            if (!isResumed) {
-                return
-            }
-            ThreadUtils.runOnIODelayed(1000) {
-                BusinessManager.updateSwitchStatus {
-                    refreshSwitchStatus()
-                }
-            }
-        }
-        refreshSwitchStatus()
-    }
-
-    override fun onPause() {
-        super.onPause()
-//        mBinding?.mapview?.release()
-    }
-
-    private fun getMap(mapId: String) {
-        presenter?.getMapInfo(mapId.toLong()) { itMapInfo ->
-            // 如果没有图 URL,直接返回
-            val imageUrl = itMapInfo?.imageUrl ?: return@getMapInfo
-
-            BitmapUtil.loadBitmapFromUrl(requireContext(), imageUrl) { mapBmp ->
-                if (mapBmp == null) {
-                    LogUtil.e("Map pic is null")
-                    return@loadBitmapFromUrl
-                }
-
-                // 清空旧点
-                mStationList.clear()
-
-                // 1 格 对应的像素
-                val cellPx = 50f
-                // 后端给的“逻辑”子图原始尺寸(像素)
-                val backendW = itMapInfo.width!!.toFloat()
-                val backendH = itMapInfo.height!!.toFloat()
-                // 实际下载回来的 Bitmap 尺寸(像素)
-                val actualW = mapBmp.width.toFloat()
-                val actualH = mapBmp.height.toFloat()
-                // 计算缩放比例
-                val ratioX = actualW / backendW
-                val ratioY = actualH / backendH
-                mapRatio = ratioX
-                // 子图在全局坐标系里的左上角偏移(像素)
-                val offsetX = itMapInfo.x!!.toFloat()
-                val offsetY = itMapInfo.y!!.toFloat()
-                // 图标请求尺寸:逻辑 45px * 缩放比
-                val iconReqPx = (45f * ratioX).toInt().coerceAtLeast(1)
-                itMapInfo.pointList?.filter { it.x != null && it.y != null }?.forEach { pt ->
-                    // 1) 格数 → 全局像素
-                    val globalX = pt.x!!.toFloat() * cellPx
-                    val globalY = pt.y!!.toFloat() * cellPx
-                    // 2) 全局像素 - 子图偏移 = 子图内像素
-                    val localX = globalX - offsetX
-                    val localY = globalY - offsetY
-                    // 3) 再乘缩放比,得到真实 Bitmap 上的像素坐标
-                    val finalX = localX * ratioX
-                    val finalY = localY * ratioY
-                    // 异步加载点位图标,固定请求尺寸
-                    mStationList.add(
-                        CustomSwitchStationLayer.IsolationPoint(
-                            PointF(finalX, finalY),
-                            pt.entityName!!,
-                            null,
-                            pt.entityId!!.toLong(),
-                            pt.pointSerialNumber,
-                            false
-                        )
-                    )
-
-                    // 全部点都加载完后,设置给 layer 并绘制
-                    if (mStationList.size == itMapInfo.pointList.count { it.x != null && it.y != null }) {
-                        if (stationLayer?.inDraw == true) {
-                            return@loadBitmapFromUrl
-                        }
-                        mBinding?.mapview?.loadMap(mapBmp)
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 初始化地图
-     */
-    private fun initMap() {
-        mBinding?.mapview?.isScaleAndRotateTogether = false
-        mBinding?.mapview?.setOnTouchListener { _, event ->
-            gestureDetector.onTouchEvent(event)
-            false
-        }
-        mBinding?.mapview?.setMapViewListener(object : MapViewListener {
-            override fun onMapLoadSuccess() {
-                if (stationLayer != null) {
-                    mBinding?.mapview?.currentRotateDegrees = 0f
-                    return
-                }
-                stationLayer = CustomSwitchStationLayer(mBinding?.mapview, mStationList)
-                mBinding?.mapview?.addLayer(stationLayer)
-                stationLayer?.setRatio(mapRatio)
-                stationLayer?.stopAnimation()
-                stationLayer?.startAnimation()
-                mBinding?.mapview?.refresh()
-            }
-
-            override fun onMapLoadFail() {
-                ToastUtils.tip("onMapLoadFail")
-            }
-        })
-    }
-}

+ 6 - 0
app/src/main/java/com/grkj/iscs_mars/view/presenter/SwitchStatusPresenter.kt

@@ -3,8 +3,12 @@ package com.grkj.iscs_mars.view.presenter
 import android.content.Context
 import android.graphics.Bitmap
 import android.graphics.PointF
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
 import com.grkj.iscs_mars.MyApplication
 import com.grkj.iscs_mars.extentions.serialNo
+import com.grkj.iscs_mars.model.SimData
+import com.grkj.iscs_mars.model.vo.BaseVO
 import com.grkj.iscs_mars.model.vo.map.MapInfoRespVO
 import com.grkj.iscs_mars.util.BitmapUtil
 import com.grkj.iscs_mars.util.Executor
@@ -29,6 +33,8 @@ class SwitchStatusPresenter : BasePresenter<ISwitchStatusView>() {
      * 地图id
      */
     fun getMapInfo(mapId: Long, callBack: (MapInfoRespVO?) -> Unit) {
+        callBack(Gson().fromJson<BaseVO<MapInfoRespVO>>(SimData.mapData,object : TypeToken<BaseVO<MapInfoRespVO>>(){}.type).data)
+        return
         NetApi.getMapInfo(mapId) {
             Executor.runOnMain {
                 callBack(it)

+ 6 - 0
app/src/main/res/drawable/common_layout_bg.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/white" />
+    <corners android:radius="@dimen/common_radius_small" />
+</shape>

+ 7 - 0
app/src/main/res/drawable/divider_vertical.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="line">
+    <size
+        android:width="1dp"
+        android:height="10dp" />
+</shape>

+ 70 - 6
app/src/main/res/layout/activity_switch_status.xml

@@ -27,16 +27,80 @@
         android:orientation="horizontal"
         android:showDividers="middle">
 
-        <com.onlylemi.mapview.library.MapView
-            android:id="@+id/mapview"
+        <com.google.android.material.card.MaterialCardView
             android:layout_width="0dp"
             android:layout_height="match_parent"
-            android:layout_weight="2" />
+            android:layout_weight="2"
+            android:stateListAnimator="@null"
+            app:cardCornerRadius="@dimen/common_radius_small"
+            app:cardElevation="0dp"
+            app:cardPreventCornerOverlap="false"
+            app:cardUseCompatPadding="false"
+            app:strokeWidth="0dp">
 
-        <androidx.recyclerview.widget.RecyclerView
-            android:id="@+id/rv_list"
+            <com.onlylemi.mapview.library.MapView
+                android:id="@+id/mapview"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+        </com.google.android.material.card.MaterialCardView>
+
+        <LinearLayout
             android:layout_width="0dp"
             android:layout_height="match_parent"
-            android:layout_weight="1" />
+            android:layout_weight="1"
+            android:background="@drawable/common_layout_bg"
+            android:orientation="vertical"
+            android:padding="@dimen/common_spacing">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/switch_information"
+                android:textColor="@color/black"
+                android:textSize="@dimen/common_text_size"
+                android:textStyle="bold" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_marginTop="@dimen/common_spacing"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:paddingVertical="@dimen/common_spacing_small"
+                    android:text="@string/index_number"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/common_text_size" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="@string/name"
+                    android:paddingVertical="@dimen/common_spacing_small"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/common_text_size" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:paddingVertical="@dimen/common_spacing_small"
+                    android:text="@string/switch_status"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/common_text_size" />
+            </LinearLayout>
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/rv_list"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+        </LinearLayout>
     </LinearLayout>
 </LinearLayout>

+ 0 - 14
app/src/main/res/layout/fragment_switch_status.xml

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/item_rv_technology_sop_bg_normal"
-    android:padding="@dimen/common_spacing"
-    tools:context=".view.fragment.SwitchStatusFragment">
-
-    <com.onlylemi.mapview.library.MapView
-        android:id="@+id/mapview"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
-</RelativeLayout>

+ 54 - 0
app/src/main/res/layout/item_switch.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_vertical"
+    android:orientation="horizontal">
+
+    <TextView
+        android:id="@+id/index"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:paddingVertical="@dimen/common_spacing_small"
+        android:textColor="@color/black"
+        android:textSize="@dimen/common_text_size" />
+
+    <TextView
+        android:id="@+id/point_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:paddingVertical="@dimen/common_spacing_small"
+        android:textColor="@color/black"
+        android:textSize="@dimen/common_text_size" />
+
+    <TextView
+        android:id="@+id/status"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:paddingVertical="@dimen/common_spacing_small"
+        android:textColor="@color/black"
+        android:textSize="@dimen/common_text_size" />
+
+    <FrameLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingVertical="@dimen/common_spacing_small">
+
+        <com.grkj.iscs_mars.view.widget.CommonBtn
+            android:id="@+id/position"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:gravity="center"
+            app:btn_bg="@drawable/common_btn_blue_bg"
+            app:btn_name="@string/positioning" />
+    </FrameLayout>
+</LinearLayout>

+ 5 - 0
app/src/main/res/values-en/strings.xml

@@ -391,4 +391,9 @@
     <string name="please_re_press_fingerprint_again">Please press the fingerprint again</string>
     <string name="use_default_url">Use default url</string>
     <string name="not_detect_face">No face detected yet</string>
+    <string name="switch_information">Switch Information</string>
+    <string name="name">Name</string>
+    <string name="switch_open">Open</string>
+    <string name="switch_close">Close</string>
+    <string name="positioning">Positioning</string>
 </resources>

+ 5 - 0
app/src/main/res/values-zh/strings.xml

@@ -391,4 +391,9 @@
     <string name="please_re_press_fingerprint_again">请重新按压指纹</string>
     <string name="use_default_url">使用默认地址</string>
     <string name="not_detect_face">暂未检测到人脸</string>
+    <string name="switch_information">开关信息</string>
+    <string name="name">名称</string>
+    <string name="switch_open">开启</string>
+    <string name="switch_close">关闭</string>
+    <string name="positioning">定位</string>
 </resources>

+ 5 - 0
app/src/main/res/values/strings.xml

@@ -391,4 +391,9 @@
     <string name="please_re_press_fingerprint_again">请重新按压指纹</string>
     <string name="use_default_url">使用默认地址</string>
     <string name="not_detect_face">暂未检测到人脸</string>
+    <string name="switch_information">开关信息</string>
+    <string name="name">名称</string>
+    <string name="switch_open">开启</string>
+    <string name="switch_close">关闭</string>
+    <string name="positioning">定位</string>
 </resources>