From 9f964fab5b55337d84ae6bb62dc1284fb831a789 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Wed, 22 Mar 2023 10:02:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- build.gradle | 4 +- collect-library/build.gradle | 18 +- ...m-android-gdx-0.17.0-natives-arm64-v8a.jar | 0 ...android-gdx-0.17.0-natives-armeabi-v7a.jar | 0 .../vtm-android-gdx-0.17.0-natives-x86.jar | 0 .../vtm-android-gdx-0.17.0-natives-x86_64.jar | 0 collect-library/libs/vtm-jts-0.16.0.jar | Bin 29662 -> 0 bytes .../navinfo/collect/FlutterBaseActivity.kt | 43 --- .../collect/library/data/DataConversion.kt | 224 ---------------- .../collect/library/data/NIDataController.kt | 33 --- .../collect/library/data/PbfFileUtils.kt | 24 +- .../data/flutter/FlutterDataController.kt | 141 ---------- .../data/flutter/FlutterDataProtocolKeys.kt | 94 ------- .../FlutterDataCameraHandler.kt | 67 ----- .../FlutterDataElementHandler.kt | 245 ------------------ .../flutterhandler/FlutterDataLayerHandler.kt | 114 -------- .../FlutterDataNiLocationHandler.kt | 92 ------- .../FlutterDataProjectHandler.kt | 64 ----- gradle.properties | 4 +- settings.gradle | 15 +- 21 files changed, 36 insertions(+), 1150 deletions(-) delete mode 100644 collect-library/libs/vtm-android-gdx-0.17.0-natives-arm64-v8a.jar delete mode 100644 collect-library/libs/vtm-android-gdx-0.17.0-natives-armeabi-v7a.jar delete mode 100644 collect-library/libs/vtm-android-gdx-0.17.0-natives-x86.jar delete mode 100644 collect-library/libs/vtm-android-gdx-0.17.0-natives-x86_64.jar delete mode 100644 collect-library/libs/vtm-jts-0.16.0.jar delete mode 100644 collect-library/src/main/java/com/navinfo/collect/FlutterBaseActivity.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/DataConversion.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/NIDataController.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataController.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataProtocolKeys.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataCameraHandler.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataElementHandler.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataLayerHandler.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataNiLocationHandler.kt delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataProjectHandler.kt diff --git a/app/build.gradle b/app/build.gradle index 506d1fc7..353bb4e8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = '1.8' diff --git a/build.gradle b/build.gradle index dffaa6b0..6ce9fc5d 100644 --- a/build.gradle +++ b/build.gradle @@ -6,8 +6,8 @@ buildscript { } } plugins { - id 'com.android.application' version '7.4.1' apply false - id 'com.android.library' version '7.4.1' apply false + id 'com.android.application' version '7.3.1' apply false + id 'com.android.library' version '7.3.1' apply false id 'org.jetbrains.kotlin.android' version '1.8.0' apply false id 'io.realm.kotlin' version '0.10.0' apply false } diff --git a/collect-library/build.gradle b/collect-library/build.gradle index dfa30183..f9c43139 100644 --- a/collect-library/build.gradle +++ b/collect-library/build.gradle @@ -56,11 +56,6 @@ android { dependencies { api fileTree(dir: 'libs', include: ['*.jar', '*.aar']) - implementation files('libs/vtm-jts-0.16.0.jar') - implementation files('libs/vtm-android-gdx-0.17.0-natives-x86.jar') - implementation files('libs/vtm-android-gdx-0.17.0-natives-arm64-v8a.jar') - implementation files('libs/vtm-android-gdx-0.17.0-natives-armeabi-v7a.jar') - implementation files('libs/vtm-android-gdx-0.17.0-natives-x86_64.jar') implementation "androidx.appcompat:appcompat:$appcompatVersion" implementation "com.google.android.material:material:$materialVersion" @@ -83,17 +78,22 @@ dependencies { implementation "org.mapsforge:vtm-json:$vtmVersion" implementation "org.mapsforge:vtm-gdx:$vtmVersion" - implementation "org.mapsforge:vtm-gdx-poi3d:$vtmVersion" - implementation "org.mapsforge:vtm-android-gdx:$vtmVersion" implementation "org.mapsforge:vtm-android-mvt:$vtmVersion" implementation "org.mapsforge:vtm-mvt:$vtmVersion" + implementation "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-armeabi-v7a" + implementation "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-arm64-v8a" + implementation "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86" + implementation "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86_64" + implementation "org.mapsforge:vtm-android-gdx:$vtmVersion" + implementation "com.google.protobuf:protobuf-java:3.6.1" implementation "com.wdtinc:mapbox-vector-tile:3.1.0" implementation "com.caverock:androidsvg:1.4" - implementation "com.badlogicgames.gdx:gdx:1.9.10" - implementation "com.badlogicgames.gdx:gdx-backend-android:1.9.10" + implementation "com.badlogicgames.gdx:gdx:1.11.0" + implementation "com.badlogicgames.gdx:gdx-backend-android:1.11.0" implementation "com.caverock:androidsvg:1.4" + implementation "org.mapsforge:vtm-jts:$vtmVersion" implementation "org.locationtech.jts:jts-core:1.18.2" implementation "com.squareup.okhttp3:okhttp:3.12.13" implementation "com.squareup.okio:okio:1.15.0" diff --git a/collect-library/libs/vtm-android-gdx-0.17.0-natives-arm64-v8a.jar b/collect-library/libs/vtm-android-gdx-0.17.0-natives-arm64-v8a.jar deleted file mode 100644 index e69de29b..00000000 diff --git a/collect-library/libs/vtm-android-gdx-0.17.0-natives-armeabi-v7a.jar b/collect-library/libs/vtm-android-gdx-0.17.0-natives-armeabi-v7a.jar deleted file mode 100644 index e69de29b..00000000 diff --git a/collect-library/libs/vtm-android-gdx-0.17.0-natives-x86.jar b/collect-library/libs/vtm-android-gdx-0.17.0-natives-x86.jar deleted file mode 100644 index e69de29b..00000000 diff --git a/collect-library/libs/vtm-android-gdx-0.17.0-natives-x86_64.jar b/collect-library/libs/vtm-android-gdx-0.17.0-natives-x86_64.jar deleted file mode 100644 index e69de29b..00000000 diff --git a/collect-library/libs/vtm-jts-0.16.0.jar b/collect-library/libs/vtm-jts-0.16.0.jar deleted file mode 100644 index 647090100515c788462ec3ab835b9b01c0616723..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29662 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 diff --git a/collect-library/src/main/java/com/navinfo/collect/FlutterBaseActivity.kt b/collect-library/src/main/java/com/navinfo/collect/FlutterBaseActivity.kt deleted file mode 100644 index 9f7e3ee0..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/FlutterBaseActivity.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.navinfo.collect - -import android.content.Intent -import android.util.Log -import com.baidu.ai.edge.ui.view.model.BasePolygonResultModel -import com.navinfo.collect.library.map.flutter.plugin.FlutterMapViewFactory -import com.navinfo.collect.library.map.flutter.plugin.FlutterMapViewFlutterPlugin -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.cancel - -abstract class FlutterBaseActivity : FlutterActivity(), CoroutineScope by MainScope() { - lateinit var factory: FlutterMapViewFactory - override fun configureFlutterEngine(flutterEngine: FlutterEngine) { - super.configureFlutterEngine(flutterEngine) - factory = FlutterMapViewFlutterPlugin.registerWith(flutterEngine, this); -// FlutterNiMapCopyViewFlutterPlugin.registerWith(flutterEngine, this); - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == 0x10 && data != null) { - val path = data.getStringExtra("photo_path") - val list = data.getParcelableArrayListExtra("result_list") - Log.e("jingo","OCR java 返回的数据:"+ path + list.toString()); - if (path != null && list != null) { - factory.dataController.flutterDataCameraHandler.sendOcrResults( - path, - list as List - ) - } - } - } - - override fun onDestroy() { - super.onDestroy() - //协程销毁 - cancel() - } - -} \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/DataConversion.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/DataConversion.kt deleted file mode 100644 index be753b73..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/DataConversion.kt +++ /dev/null @@ -1,224 +0,0 @@ -package com.navinfo.collect.library.data - -import android.graphics.Point -import android.graphics.Rect -import android.util.Log -import android.view.WindowInsetsAnimation.Bounds -import com.baidu.ai.edge.ui.view.model.BasePolygonResultModel -import com.baidu.ai.edge.ui.view.model.OcrViewResultModel -import com.navinfo.collect.library.data.entity.* -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.async -import kotlinx.coroutines.launch -import org.json.JSONArray -import org.json.JSONObject -import java.io.BufferedWriter -import java.io.File -import java.io.FileOutputStream -import java.io.OutputStream -import java.io.OutputStreamWriter - -/** - * 和flutter层进行数据传递时的数据格式转换 - */ -class DataConversion { - companion object { - /** - * 将数据转成map形式-传给flutter使用 - */ - fun toElementMapList(list: List): List> { - val newList = mutableListOf>() - for (element in list) { - newList.add(element.toMap()) - } - return newList - } - - /** - * json转数据图层自定义子表的所有字段对象列表 - * (现在用于从数据库中提取数据图层自定义表所有字段信息时,主要用于原生层) - */ - fun jsonToLayerItemsList(json: String): List { - val list = mutableListOf() - try { - val jsonArray = JSONArray(json) - for (i in 0 until jsonArray.length()) { - val itemObject = jsonArray.getJSONObject(i) - val itemMap = jsonToCustomLayerItem(itemObject) - list.add(itemMap); - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) } - Log.e("jingo", e.stackTraceToString()) - } - return list - } - - - /** - * 数据图层子表字段配置转Map - * (主要原生层使用) - */ - fun customLayerItemsToMapList(list: List?): List> { - var newList = mutableListOf>() - if (list == null) { - return newList - } - - for (item in list) { - newList.add(item.toMap()) - } - return newList - } - - /** - * 数据图层子表字段配置 json形式的数据 转成对象形式 - * (原生层主要用json,所以主要原生层使用) - */ - private fun jsonToCustomLayerItem(itemObject: JSONObject): CustomLayerItem { - return CustomLayerItem( - key = itemObject.optString("key"), - title = itemObject.optString("title"), - type = DataLayerItemType.values()[itemObject.optInt("type")], -// nullable = itemObject.optBoolean("nullable"), -// primaryKey = itemObject.optBoolean("primaryKey"), -// value = itemObject.opt("value"), -// selectOptions = itemObject.optString("selectOptions"), -// isMainName = itemObject.optBoolean("isMainName"), - describe = itemObject.optString("describe"), -// checkManagerList = mutableListOf() - itemBean = "" - ) - } - - /** - * 数据图层子表字段配置转Map - * (flutter层喜欢用map,所以主要用于flutter和原生交互使用) - */ - private fun jsonToCustomLayerItem(itemMap: Map<*, *>): CustomLayerItem { - val checkMapList = itemMap["checkMangerList"] as List> - val checkManagerList = mutableListOf() - for (c in checkMapList) { - checkManagerList.add( - CheckManager( - id = (c["id"] as Int).toLong(), - type = c["type"] as Int, - tag = c["tag"] as String, - regexStr = c["regexStr"] as String - ) - ) - } - return CustomLayerItem( - key = itemMap["key"] as String, - title = itemMap["title"] as String, - type = DataLayerItemType.values()[itemMap["type"] as Int], -// nullable = itemMap["nullable"] as Boolean, -// primaryKey = itemMap["primaryKey"] as Boolean, -// value = itemMap["value"] as Any, -// selectOptions = itemMap["selectOptions"] as String, -// isMainName = itemMap["isMainName"] as Boolean, - describe = itemMap["describe"] as String, -// checkManagerList = checkManagerList - itemBean = "" - ) - } - - /** - * 数据图层 map形式的字段数据集合转成对象集合 - * (主要用于flutter层与原生层数据交互时) - */ - fun listMapToCustomLayerItemsList(itemList: List>): List { - val list = mutableListOf() - for (itemMap in itemList) { - list.add(jsonToCustomLayerItem(itemMap)); - } - return list - } - - // /** -// * layerManager转化成map -// */ -// fun layerManagerToMap( -// layerManager: LayerManager, -// itemsMap: List> -// ): Map<*, *> { -// return mapOf("layerManager" to layerManager.toMap(), "itemsList" to itemsMap); -// } - /** - * 检查项转map给flutter - */ - fun toCheckManagerMapList(list: List): List> { - val newList = mutableListOf>() - for (check in list) { - newList.add( - check.toMap() - ) - } - return newList - } - - fun toOcrList( - path: String, - basePolygonResultModels: List - ): Map<*, *> { - val newList = mutableMapOf() - newList["photo_path"] = path - val list = mutableListOf(); - for (model in basePolygonResultModels) { - list.add(model.name) - } - newList["result"] = list - return newList - } - - /** - * 将ocr识别结果返回给flutter - */ - suspend fun toFlutterOcrList( - list: List>, - ): List { - val listR = mutableListOf() - val job = MainScope().async(Dispatchers.IO) { - Log.e("jingo", "OCR图像识别写CSV文件 ${Thread.currentThread().name}") - for (item in list) { - if (item is Map) { - val map1 = mutableMapOf() - map1["path"] = item["path"]!! - map1["width"] = item["width"]!! - map1["height"] = item["height"]!! - var data = item["data"] - if (data is List<*>) { - val dataList = mutableListOf() - for (v in data) { - val map = mutableMapOf() - map["index"] = (v as OcrViewResultModel).index - map["bounds"] = rectToMap(v.bounds) - map["text"] = v.name - map["confidence"] = v.confidence - dataList.add(map) - } - map1["data"] = dataList - } - listR.add(map1) - } - } - } - job.await() - Log.e("jingo", "ORC 识别结果 ${listR.toString()}") - return listR - } - - private fun rectToMap(list: List): List> { - val pointList = mutableListOf>() - for (point in list) { - val l = mutableListOf() - l.add(point.x) - l.add(point.y) - pointList.add(l) - } - - return pointList - } - } -} \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/NIDataController.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/NIDataController.kt deleted file mode 100644 index 9ab7cbc8..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/NIDataController.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.navinfo.collect.library.data - -import android.content.Context -import com.navinfo.collect.FlutterBaseActivity -import com.navinfo.collect.library.data.dao.impl.MapLifeDataBase -import com.navinfo.collect.library.data.handler.DataLayerHandler -import com.navinfo.collect.library.system.Constant - -/** - * 地图控制器 - */ - -open class NIDataController( - context: Context, - activity: FlutterBaseActivity, -) { - protected val mContext = context - protected val mActivity = activity - internal val mDateBase: MapLifeDataBase = MapLifeDataBase.getDatabase( - context, "${Constant.ROOT_PATH}/coremap.db" - ) - - init { - RealmUtils.getInstance().init(mContext, Constant.ROOT_PATH, "hd-data") - } - - protected val dataHandler: DataLayerHandler = DataLayerHandler(mContext, mDateBase); - - open fun release() { - mDateBase.close() - } -} - diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/PbfFileUtils.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/PbfFileUtils.kt index 009c90c6..f6f524d8 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/PbfFileUtils.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/PbfFileUtils.kt @@ -27,7 +27,7 @@ class NavinfoPbfFileUtils: GisFileUtils { * */ override fun parserGisFile(file: File): List { val geometryEntityList = ArrayList() - if (!file?.isFile || !file.exists()) { + if (!file.isFile || !file.exists()) { return geometryEntityList; } // 解析pbf文件 @@ -63,7 +63,7 @@ class NavinfoPbfFileUtils: GisFileUtils { * */ private fun parserRoadLink(roadLinkList: List, file: File, layerName: String= "道路线", layerTableName: String = "ROAD_LINK"): List { val featureEntityList = ArrayList() - if (roadLinkList?.isEmpty()) { + if (roadLinkList.isEmpty()) { return featureEntityList } for (roadLink in roadLinkList) { @@ -81,7 +81,7 @@ class NavinfoPbfFileUtils: GisFileUtils { * */ private fun parserHadLaneLink(hadLaneLinkList: List, file: File, layerName: String= "车道中心线", layerTableName: String = "HAD_LANE_LINK"): List { val featureEntityList = ArrayList() - if (hadLaneLinkList?.isEmpty()) { + if (hadLaneLinkList.isEmpty()) { return featureEntityList } for (hadLaneLink in hadLaneLinkList) { @@ -98,7 +98,7 @@ class NavinfoPbfFileUtils: GisFileUtils { * */ private fun parserSpeedLimitGen(speedLimitGenList: List, file: File, layerName: String= "固定限速", layerTableName: String = "SPEED_LIMIT_GEN"): List { val featureEntityList = ArrayList() - if (speedLimitGenList?.isEmpty()) { + if (speedLimitGenList.isEmpty()) { return featureEntityList } for (speedLimitGen in speedLimitGenList) { @@ -116,7 +116,7 @@ class NavinfoPbfFileUtils: GisFileUtils { * */ private fun parserSpeedLimitDepend(speedLimitDenpendList: List, file: File, layerName: String= "条件限速", layerTableName: String = "SPEED_LIMIT_DEPEND"): List { val featureEntityList = ArrayList() - if (speedLimitDenpendList?.isEmpty()) { + if (speedLimitDenpendList.isEmpty()) { return featureEntityList } for (speedLimitDepend in speedLimitDenpendList) { @@ -135,7 +135,7 @@ class NavinfoPbfFileUtils: GisFileUtils { private fun parserSpeedLimitVar(speedLimitVarList: List, file: File, layerName: String= "可变限速", layerTableName: String = "SPEED_LIMIT_VAR"): List { val featureEntityList = ArrayList() - if (speedLimitVarList?.isEmpty()) { + if (speedLimitVarList.isEmpty()) { return featureEntityList } for (speedLimitVar in speedLimitVarList) { @@ -154,7 +154,7 @@ class NavinfoPbfFileUtils: GisFileUtils { private fun parserHadLaneMarkLink(hadLaneMarkLinkList: List, file: File, layerName: String= "车道边线", layerTableName: String = "HAD_LANE_MARK_LINK"): List { val featureEntityList = ArrayList() - if (hadLaneMarkLinkList?.isEmpty()) { + if (hadLaneMarkLinkList.isEmpty()) { return featureEntityList } for (hadLaneMarkLink in hadLaneMarkLinkList) { @@ -172,7 +172,7 @@ class NavinfoPbfFileUtils: GisFileUtils { private fun parserHadLaneMarkLinkTraversal(hadLaneMarkLinkList: List, file: File, layerName: String= "车道边线可跨越性", layerTableName: String = "HAD_LANE_MARK_LINK_TRAVERSAL"): List { val featureEntityList = ArrayList() - if (hadLaneMarkLinkList?.isEmpty()) { + if (hadLaneMarkLinkList.isEmpty()) { return featureEntityList } // 解析道路边线可跨越性 @@ -206,7 +206,7 @@ class NavinfoPbfFileUtils: GisFileUtils { private fun parserHadLaneMarkLinkBoundary(hadLaneMarkLinkList: List, file: File, layerName: String= "车道边线非标线类型", layerTableName: String = "HAD_LANE_MARK_LINK_BOUNDARY"): List { val featureEntityList = ArrayList() - if (hadLaneMarkLinkList?.isEmpty()) { + if (hadLaneMarkLinkList.isEmpty()) { return featureEntityList } // 解析道路边线可跨越性 @@ -253,7 +253,7 @@ class NavinfoPbfFileUtils: GisFileUtils { private fun parserRoadDirect(roadLinkList: List, file: File, layerName: String= "道路方向", layerTableName: String = "ROAD_LINK_DIRECT"): List { val featureEntityList = ArrayList() - if (roadLinkList?.isEmpty()) { + if (roadLinkList.isEmpty()) { return featureEntityList } for (roadLink in roadLinkList) { @@ -279,7 +279,7 @@ class NavinfoPbfFileUtils: GisFileUtils { private fun parserRoadBrunnel(roadLinkList: List, file: File, layerName: String= "桥隧道", layerTableName: String = "ROAD_LINK_BRUNNEL"): List { val featureEntityList = ArrayList() - if (roadLinkList?.isEmpty()) { + if (roadLinkList.isEmpty()) { return featureEntityList } for (roadLink in roadLinkList) { @@ -303,7 +303,7 @@ class NavinfoPbfFileUtils: GisFileUtils { private fun parserRoadMovBrg(roadLinkList: List, file: File, layerName: String= "移动式桥", layerTableName: String = "ROAD_LINK_MOVBRG"): List { val featureEntityList = ArrayList() - if (roadLinkList?.isEmpty()) { + if (roadLinkList.isEmpty()) { return featureEntityList } for (roadLink in roadLinkList) { diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataController.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataController.kt deleted file mode 100644 index 7ba7bdff..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataController.kt +++ /dev/null @@ -1,141 +0,0 @@ -package com.navinfo.collect.library.data.flutter - -import android.content.Context -import com.navinfo.collect.FlutterBaseActivity -import com.navinfo.collect.library.data.NIDataController -import com.navinfo.collect.library.data.flutter.flutterhandler.* -import io.flutter.plugin.common.BinaryMessenger -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel - -class FlutterDataController( - id: Int, - context: Context, - binaryMessenger: BinaryMessenger, - activity: FlutterBaseActivity, -) : NIDataController(context, activity), MethodChannel.MethodCallHandler { - - private val mMethodChannel: MethodChannel = MethodChannel( - binaryMessenger, - "com.navinfo.collect/data_$id" - ) - - private val flutterDataLayerHandler: FlutterDataLayerHandler - - private val flutterDataElementHandler: FlutterDataElementHandler - - private val flutterDataProjectHandler: FlutterDataProjectHandler - - private val flutterDataNiLocationHandler: FlutterDataNiLocationHandler - - val flutterDataCameraHandler: FlutterDataCameraHandler - - init { - mMethodChannel.setMethodCallHandler(this) - flutterDataLayerHandler = FlutterDataLayerHandler(mContext, mDateBase) - flutterDataElementHandler = FlutterDataElementHandler(mContext, mMethodChannel, mDateBase) - flutterDataProjectHandler = FlutterDataProjectHandler(mContext, mDateBase) - flutterDataNiLocationHandler = FlutterDataNiLocationHandler(mContext, mDateBase) - flutterDataCameraHandler = - FlutterDataCameraHandler(mContext, mMethodChannel, activity, mDateBase) - } - - override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { - when (call.method) { - /** - * 数据图层操作部分 - */ - //创建数据图层 - FlutterDataProtocolKeys.DateLayerProtocol.kDataCreateDataLayer -> { - flutterDataLayerHandler.createDataLayerTable(call, result); - } - //获取所有数据图层 - FlutterDataProtocolKeys.DateLayerProtocol.kDataGetDataLayerList -> { - flutterDataLayerHandler.getDataLayerList(call, result); - } - - //获取某个数据图层 - FlutterDataProtocolKeys.DateLayerProtocol.kDataGetDataLayer -> { - flutterDataLayerHandler.getDataLayer(call, result); - } - - /** - * 数据操作部分 - */ - //保存数据 - FlutterDataProtocolKeys.DataElementProtocol.kDataSaveElementData -> { - flutterDataElementHandler.saveElementData(call, result) - } - - //删除数据 - FlutterDataProtocolKeys.DataElementProtocol.kDataDeleteElementData -> { - flutterDataElementHandler.deleteElementData(call, result) - } - - //捕捉数据 - FlutterDataProtocolKeys.DataElementProtocol.kDataSnapElementDataList -> { - flutterDataElementHandler.snapElementDataList(call, result) - } - - // 导入Pbf数据 - FlutterDataProtocolKeys.DataElementProtocol.kImportPbfData -> { - flutterDataElementHandler.importPbfData2Realm(call, result) - } - //查询数据详细信息模板 - FlutterDataProtocolKeys.DataElementProtocol.kDataQueryElementDeepInfo -> { - flutterDataElementHandler.queryElementDeepInfo(call, result) - } - //数据搜索 - FlutterDataProtocolKeys.DataElementProtocol.kDataSearchData -> { - flutterDataElementHandler.searchData(call, result) - } - - /** - * 项目管理 - */ - //获取项目列表 - FlutterDataProtocolKeys.DataProjectProtocol.kDataGetDataProjectList -> { - flutterDataProjectHandler.getProjectList(call, result); - } - - //保存项目 - FlutterDataProtocolKeys.DataProjectProtocol.kDataSaveDataProject -> { - flutterDataProjectHandler.saveProject(call, result); - } - - /** - * 轨迹操作部分 - */ - //保存轨迹数据 - FlutterDataProtocolKeys.DataNiLocationProtocol.kDataSaveNiLocationData -> { - flutterDataNiLocationHandler.saveNiLocationData(call, result) - } - - /** - * 检查项部分 - */ - //获取所有检查项 - FlutterDataProtocolKeys.DataCheckProtocol.kDataGetCheckManagerList -> { - flutterDataElementHandler.queryCheckManagerList(call, result) - } - //根据id获取检查项 - FlutterDataProtocolKeys.DataCheckProtocol.kDataGetCheckManagerListByIds -> { - flutterDataElementHandler.queryCheckManagerListByIds(call, result) - } - //打开摄像头 - FlutterDataProtocolKeys.DataCameraProtocol.kDataOpenCamera -> { - flutterDataCameraHandler.openCamera(call, result) - } - ///ocr批量识别 - FlutterDataProtocolKeys.DataCameraProtocol.kDataOCRBatchResults -> { - flutterDataCameraHandler.ocrBatch(call, result) - } - } - - } - - override fun release() { - super.release() - mMethodChannel.setMethodCallHandler(null) - } -} \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataProtocolKeys.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataProtocolKeys.kt deleted file mode 100644 index b48e5b53..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/FlutterDataProtocolKeys.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.navinfo.collect.library.data.flutter - -object FlutterDataProtocolKeys { - - /** - * 数据图层管理 - */ - object DateLayerProtocol { - /** - * 获取数据层列表 - */ - const val kDataGetDataLayerList = "flutter_nimap/DataLayer/getDataLayerList"; - - /** - * 获取某个数据层列表 - */ - const val kDataGetDataLayer = "flutter_nimap/DataLayer/getDataLayer"; - - /** - * 创建数据层 - */ - const val kDataCreateDataLayer = "flutter_nimap/DataLayer/createDataLayer"; - } - - /** - * 数据操作 - */ - object DataElementProtocol { - - - //保存数据 - const val kDataSaveElementData = "flutter_nimap/ElementData/saveElementData"; - - ///删除数据 - const val kDataDeleteElementData = "flutter_nimap/ElementData/deleteElementData"; - - //查询数据 - const val kDataSnapElementDataList = "flutter_nimap/ElementData/snapElementDataList"; - - // 导入pbf数据 - const val kImportPbfData = "flutter_nimap/HDData/importPBF"; - - //查询数据详细信息 - const val kDataQueryElementDeepInfo = "flutter_nimap/ElementData/queryElementDeepInfo"; - - ///按名称搜索数据 - const val kDataSearchData = "flutter_nimap/ElementData/queryElementByName" - } - - /** - * 数据操作 - */ - object DataNiLocationProtocol { - - - //保存数据 - const val kDataSaveNiLocationData = "flutter_nimap/NiLocationData/saveNiLocationData"; - - ///删除数据 - const val kDataDeleteNiLocationData = "flutter_nimap/NiLocationData/deleteNiLocationData"; - } - - object DataProjectProtocol { - /** - * 获取项目列表 - */ - const val kDataGetDataProjectList = "flutter_nimap/Project/getDataProjectList"; - - /** - * 保存项目 - */ - const val kDataSaveDataProject = "flutter_nimap/Project/saveDataProject"; - - } - - object DataCheckProtocol { - ///获取检查项列表 - const val kDataGetCheckManagerList = "flutter_nimap/CheckManager/getDataCheckManagerList"; - - ///根据id获取检查项列表 - const val kDataGetCheckManagerListByIds = - "flutter_nimap/CheckManager/getDataCheckManagerListByIds"; - } - - object DataCameraProtocol { - const val kDataOpenCamera = "flutter_nimap/openCamera"; - - const val kDataOCRResults = "flutter_nimap/ocrResults"; - ///批量识别 - const val kDataOCRBatchResults = "flutter_nimap/ocrBatch"; - ///ocr 批量回调进度 - const val kDataOCRBatchProgress = "flutter_nimap/ocrBatchProgress"; - } -} diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataCameraHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataCameraHandler.kt deleted file mode 100644 index 8330a99b..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataCameraHandler.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.navinfo.collect.library.data.flutter.flutterhandler - -import android.content.Context -import android.util.Log -import com.baidu.ai.edge.ui.view.model.BasePolygonResultModel -import com.baidu.ai.edge.ui.view.model.OcrViewResultModel -import com.navinfo.collect.FlutterBaseActivity -import com.navinfo.collect.library.data.DataConversion -import com.navinfo.collect.library.data.dao.impl.MapLifeDataBase -import com.navinfo.collect.library.data.flutter.FlutterDataProtocolKeys -import com.navinfo.collect.library.data.handler.DataCameraHandler -import com.navinfo.collect.library.data.handler.OnOCRBatchListener -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel - -class FlutterDataCameraHandler( - context: Context, - methodChannel: MethodChannel, - activity: FlutterBaseActivity, - dataBase: MapLifeDataBase -) : - DataCameraHandler(context, activity, dataBase) { - private val _methodChannel = methodChannel - fun openCamera(call: MethodCall, result: MethodChannel.Result) { - super.openCamera() - result.success(true) - } - - fun sendOcrResults(path: String, basePolygonResultModels: List) { - - _methodChannel.invokeMethod( - FlutterDataProtocolKeys.DataCameraProtocol.kDataOCRResults, - DataConversion.toOcrList(path, basePolygonResultModels) - ) - } - - fun ocrBatch(call: MethodCall, result: MethodChannel.Result) { - if (call.arguments is String) { - super.ocrBatch( - call.arguments as String, - object : OnOCRBatchListener { - override fun onProgress(total: Int, current: Int) { - Log.e("jingo", "OCRManager 线程名称2 ${Thread.currentThread().name}") - Log.e("jingo", "OCR识别 当前第 $current 张,总共 $total 张"); - val map = mutableMapOf() - map["total"] = total - map["current"] = current + 1 - _methodChannel.invokeMethod( - FlutterDataProtocolKeys.DataCameraProtocol.kDataOCRBatchProgress, - map - ) - } - - override suspend fun onResult(list: List>) { - Log.e("jingo", "OCRManager 线程名称2 ${Thread.currentThread().name}") - _methodChannel.invokeMethod( - FlutterDataProtocolKeys.DataCameraProtocol.kDataOCRBatchResults, - DataConversion.toFlutterOcrList(list) - ) - } - - } - ) - } - result.success(true) - } -} \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataElementHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataElementHandler.kt deleted file mode 100644 index 879b8f86..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataElementHandler.kt +++ /dev/null @@ -1,245 +0,0 @@ -package com.navinfo.collect.library.data.flutter.flutterhandler - -import android.content.Context -import android.util.Log -import com.navinfo.collect.library.data.DataConversion -import com.navinfo.collect.library.data.RealmUtils -import com.navinfo.collect.library.data.dao.impl.MapLifeDataBase -import com.navinfo.collect.library.data.entity.Element -import com.navinfo.collect.library.data.entity.LayerManager -import com.navinfo.collect.library.data.entity.Project -import com.navinfo.collect.library.data.flutter.FlutterDataProtocolKeys -import com.navinfo.collect.library.data.handler.DataElementHandler -import com.navinfo.collect.library.data.search.* -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import org.json.JSONObject - -/** - * 数据操作 - */ -class FlutterDataElementHandler( - context: Context, - methodChannel: MethodChannel, - dataBase: MapLifeDataBase -) : - DataElementHandler(context, dataBase), OnGetSearchDataResultListener { - val _methodChannel = methodChannel - - init { - setListener(this) - } - - /** - * 保存数据 - */ - fun saveElementData(call: MethodCall, result: MethodChannel.Result) = try { - if (call.arguments is Map<*, *>) { - val element = Element.fromMap(call.arguments as MutableMap?); - val valueMap = call.argument>("values") - saveData(element, valueMap) { res, error -> - if (res) { - result.success("$res") - } else { - result.success(error) - } - } - - } else { - result.success("数据格式错误") - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) } - Log.e("jingo", e.stackTraceToString()) - Log.e("jingo", e.toString()) - result.success("数据格式错误") - } - - /** - * 删除数据 - */ - fun deleteElementData(call: MethodCall, result: MethodChannel.Result) = try { - if (call.arguments is Map<*, *>) { - val element = Element() - element.layerId = call.argument("layerId") - element.id = call.argument("uuid") - element.geometry = call.argument("geometry") - element.displayText = call.argument("displayText") - element.displayStyle = call.argument("displayStyle") - element.operationTime = call.argument("tOperateDate") - element.tLifecycle = call.argument("tLifecycle")!! - element.tStatus = call.argument("tStatus")!! - deleteData(element) { res, message -> - if (res) { - result.success("success") - } else { - result.success(message) - } - }; - - } else { - result.success("数据格式错误") - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) } - Log.e("jingo", e.stackTraceToString()) - Log.e("jingo", e.toString()) - result.success("数据格式错误") - } - - /** - * 复制数据 - */ - fun copyElementData(call: MethodCall, result: MethodChannel.Result) = try { - if (call.arguments is Map<*, *>) { - - } else { - result.success("数据格式错误") - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) } - Log.e("jingo", e.stackTraceToString()) - Log.e("jingo", e.toString()) - result.success("数据格式错误") - } - - - fun importPbfData2Realm(call: MethodCall, result: MethodChannel.Result) { - if (call.arguments is List<*>) { - val pbfFiles: List = call.arguments as List - try { - val importResult = RealmUtils.getInstance().importPbfData(pbfFiles) - result.success(importResult) - } catch (exeception: Exception) { - result.error("-1", exeception.message, exeception) - } - } - } - - /** - * 捕捉数据 - */ - fun snapElementDataList(call: MethodCall, result: MethodChannel.Result) { - if (call.arguments is String) { - snapElementDataList(call.arguments as String) { - result.success(DataConversion.toElementMapList(it)) - } - } - } - - /** - * 查询数据深度信息模板 - */ - fun queryElementDeepInfo(call: MethodCall, result: MethodChannel.Result) { - if (call.arguments is Map<*, *>) { - val id = call.argument("id") - val layerId = call.argument("layerId") - if (id != null && layerId != null) { - queryElementDeepInfo(id, layerId) { layerManager, itemList -> - if (layerManager != null) { - val map = layerManager.toMap() - map["layerItems"] = DataConversion.customLayerItemsToMapList(itemList) - result.success(map) - } else { - result.error("-1","没有这条数据的拓展模板","") - } - } - } - } - } - - /** - * 根据渲染名称查询数据 - */ - fun searchData(call: MethodCall, result: MethodChannel.Result) { - if (call.arguments is String) { - try { - val jsonObject = JSONObject(call.arguments as String) - val keyword = jsonObject.getString("keyword") - val pageNum = jsonObject.getInt("pageNum") - val pageCapacity = jsonObject.getInt("pageCapacity") - val startTime = jsonObject.getInt("startTime") - val endTime = jsonObject.getInt("endTime") - val projectArray = jsonObject.getJSONArray("projectItemList") - val layerArray = jsonObject.getJSONArray("layerItemList") - val fieldArray = jsonObject.getJSONArray("fieldItemList") - val projectItemList = ArrayList() - val layerItemList = ArrayList() - val fieldItemList = ArrayList() - for (i in 0 until projectArray.length()) { - val item = OptionProjectItem(projectArray.getString(i)) - projectItemList.add(item) - } - for (i in 0 until layerArray.length()) { - val layerObject = layerArray.getJSONObject(i) - val item = OptionLayerItem( - layerObject.optString("projectId"), - layerObject.optString("layerId") - ) - layerItemList.add(item) - } - for (i in 0 until fieldArray.length()) { - val fieldObject = fieldArray.getJSONObject(i) - val item = OptionFieldItem( - fieldObject.optString("projectId"), - fieldObject.optString("layerId"), - fieldObject.optString("fieldName") - ) - fieldItemList.add(item) - } - val option = - SearchDataOption.Builder().setKeyword(keyword).setStartTime(startTime) - .setEndTime(endTime).setFieldItems(fieldItemList) - .setLayerItems(layerItemList).setProjectItems(projectItemList) - .setPageNum(pageNum).setPageCapacity(pageCapacity).build() - searchData(option) { -// result.success(DataConversion.toElementMapList(it)) - } - result.success(""); - } catch (e: Exception) { - println("$e") - result.error("-1", "查询参数解析错误", "$e") - } - - } - } - - /** - * 获取检查项列表 - */ - fun queryCheckManagerList(call: MethodCall, result: MethodChannel.Result) { - queryCheckManagerList() { list -> - result.success(DataConversion.toCheckManagerMapList(list)); - } - } - - - /** - * 根据id获取检查项列表 - */ - fun queryCheckManagerListByIds(call: MethodCall, result: MethodChannel.Result) { - queryCheckManagerList() { list -> - result.success(DataConversion.toCheckManagerMapList(list)); - } - } - - - - override fun onGetElementResult(elementList: List) { - _methodChannel.invokeMethod( - FlutterDataProtocolKeys.DataElementProtocol.kDataSearchData, - DataConversion.toElementMapList(elementList) - ) - } - - override fun onGetLayerResult(layer: LayerManager) { - } - - override fun onGetProjectResult(project: Project) { - } - - override fun onError(msg: String, keyword: String) { - } - - -} \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataLayerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataLayerHandler.kt deleted file mode 100644 index 26152815..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataLayerHandler.kt +++ /dev/null @@ -1,114 +0,0 @@ -package com.navinfo.collect.library.data.flutter.flutterhandler - -import android.content.Context -import android.util.Log -import com.navinfo.collect.library.data.DataConversion -import com.navinfo.collect.library.data.dao.impl.MapLifeDataBase -import com.navinfo.collect.library.data.entity.CustomLayerItem -import com.navinfo.collect.library.data.entity.DataLayerItemType -import com.navinfo.collect.library.data.handler.DataLayerHandler -import com.navinfo.collect.library.data.entity.LayerManager -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import org.json.JSONArray -import org.json.JSONObject - -/** - * 数据图层管理 - */ -class FlutterDataLayerHandler(context: Context, dataBase: MapLifeDataBase) : - DataLayerHandler(context, dataBase) { - - fun createDataLayerTable(call: MethodCall, result: MethodChannel.Result) { - try { - if (call.arguments is String) { - val jsonObject = JSONObject(call.arguments as String) - val layer = LayerManager() - layer.id = jsonObject.optString("uuid") - layer.projectId = jsonObject.optString("projectId") - layer.geometryType = jsonObject.optInt("geometryType") - layer.layerName = jsonObject.optString("layerName") - layer.style = jsonObject.optString("style") - layer.importTime = jsonObject.optString("import_time") - layer.describe = jsonObject.optString("describe") - layer.visibility = jsonObject.optBoolean("visibility") - val jsonArrayItems = JSONArray(jsonObject.optString("layerItems")) - layer.bundle = jsonArrayItems.toString() - - var itemList = mutableListOf(); - for (i in 0 until jsonArrayItems.length()) { - val jsonObjectItem: JSONObject = jsonArrayItems[i] as JSONObject; - val item = CustomLayerItem( - key = jsonObjectItem.optString("key"), - type = DataLayerItemType.values()[jsonObjectItem.optInt("type")], - title = jsonObjectItem.optString("title"), - describe = jsonObjectItem.optString("describe"), - itemBean = jsonObjectItem.optString("itemBean"), - ) - itemList.add(item) - } -// val list = DataConversion.listMapToCustomLayerItemsList(itemList) - createTable(layer, itemList) { res, _ -> - result.success(res) - } - } else { - result.success(false) - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) } - Log.e("jingo", e.stackTraceToString()) - Log.e("jingo", e.toString()) - result.success(false) - } - } - - /** - * 获取全部数据图层信息 - */ - fun getDataLayerList(call: MethodCall, result: MethodChannel.Result) { - getDataLayerList { list -> - val newList = mutableListOf>() - for (item in list) { - val map = mapOf( - "uuid" to item.id, - "projectId" to item.projectId, - "geometryType" to item.geometryType, - "layerName" to item.layerName, - "import_time" to item.importTime, - "describe" to item.describe, - "visibility" to item.visibility, - "layerItems" to item.bundle, - "style" to item.style - ) - newList.add(map) - } - result.success(newList) - } - } - - /** - * 获取某个数据图层 - */ - fun getDataLayer(call: MethodCall, result: MethodChannel.Result) { - if (call.arguments is String) { - getDataLayer(call.arguments as String) { layer -> - result.success( - mapOf( - "uuid" to layer.id, - "projectId" to layer.projectId, - "geometryType" to layer.geometryType, - "layerName" to layer.layerName, - "import_time" to layer.importTime, - "describe" to layer.describe, - "visibility" to layer.visibility, - "layerItems" to layer.bundle, - "style" to layer.style - ) - ) - } - } else { - result.success("false") - } - - } -} \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataNiLocationHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataNiLocationHandler.kt deleted file mode 100644 index 92428b3a..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataNiLocationHandler.kt +++ /dev/null @@ -1,92 +0,0 @@ -package com.navinfo.collect.library.data.flutter.flutterhandler - -import android.content.Context -import android.util.Log -import com.navinfo.collect.library.data.dao.impl.MapLifeDataBase -import com.navinfo.collect.library.data.entity.NiLocation -import com.navinfo.collect.library.data.handler.DataNiLocationHandler -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import java.text.SimpleDateFormat -import java.util.* - -/** - * 数据操作 - */ -class FlutterDataNiLocationHandler(context: Context, dataBase: MapLifeDataBase) : - DataNiLocationHandler(context, dataBase) { - - /** - * 保存数据 - */ - fun saveNiLocationData(call: MethodCall, result: MethodChannel.Result) = try { - if (call.arguments is Map<*, *>) { - val niLocation = NiLocation() - niLocation.id = call.argument("uuid") - niLocation.longitude = call.argument("longitude")!! - niLocation.latitude = call.argument("latitude")!! - niLocation.altitude = call.argument("altitude")!! - niLocation.radius = call.argument("radius")!! - niLocation.direction = call.argument("direction")!! - niLocation.time = call.argument("time")!! - if(niLocation.time.length==19){ - val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") - val dDate: Date = simpleDateFormat.parse(niLocation.time) - niLocation.time = dDate.time.toString() - } - niLocation.speed = call.argument("speed")!! - niLocation.country = call.argument("country") - niLocation.province = call.argument("province") - niLocation.city = call.argument("city") - niLocation.district = call.argument("district") - niLocation.street = call.argument("street") - niLocation.town = call.argument("town") - niLocation.adCode = call.argument("adCode") - niLocation.cityCode = call.argument("cityCode") - niLocation.streetNumber = call.argument("streetNumber") - niLocation.errorCode = call.argument("errorCode").toString() - niLocation.errorInfo = call.argument("errorInfo") - - saveDataNiLocation(niLocation) { res, error -> - if (res) { - result.success("$res") - } else { - result.success(error) - } - } - - } else { - result.success("数据格式错误") - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) } - Log.e("jingo", e.stackTraceToString()) - Log.e("jingo", e.toString()) - result.success("数据格式错误") - } - - /** - * 删除数据 - */ - fun deleteNiLocationData(call: MethodCall, result: MethodChannel.Result) = try { - if (call.arguments is Map<*, *>) { - val niLocation = NiLocation() - niLocation.id = call.argument("uuid") - deleteData(niLocation) { res, message -> - if (res) { - result.success("success") - } else { - result.success(message) - } - }; - - } else { - result.success("数据格式错误") - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) } - Log.e("jingo", e.stackTraceToString()) - Log.e("jingo", e.toString()) - result.success("数据格式错误") - } -} \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataProjectHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataProjectHandler.kt deleted file mode 100644 index e8f54c35..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/flutter/flutterhandler/FlutterDataProjectHandler.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.navinfo.collect.library.data.flutter.flutterhandler - -import android.content.Context -import android.util.Log -import com.navinfo.collect.library.data.dao.impl.MapLifeDataBase -import com.navinfo.collect.library.data.handler.DataProjectHandler -import com.navinfo.collect.library.data.entity.Project -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel - -/** - * 项目管理 - */ -class FlutterDataProjectHandler(context: Context, dataBase: MapLifeDataBase) : - DataProjectHandler(context, dataBase) { - - fun saveProject(call: MethodCall, result: MethodChannel.Result) { - try { - if (call.arguments is Map<*, *>) { -// "style": style, - val project = Project(); - //项目名称 - - project.id = call.argument("uuid") - project.name = call.argument("name") - project.createTime = call.argument("createTime") - project.describe = call.argument("describe") - project.visibility = call.argument("visibility") == false - project.geometry = call.argument("geometry") - project.geometryVisibility = call.argument("geometryVisibility") == false - - saveProject(project) { res, _ -> - result.success(res) - }; - } else { - result.success(false) - } - } catch (e: Throwable) { - e.message?.let { Log.e("jingo", it) }; - Log.e("jingo", e.stackTraceToString()); - Log.e("jingo", e.toString()); - result.success(false) - } - } - - fun getProjectList(call: MethodCall, result: MethodChannel.Result) { - getProjectList { list -> - val newList = mutableListOf>() - for (item in list) { - val map = mapOf( - "uuid" to item.id, - "name" to item.name, - "createTime" to item.createTime, - "describe" to item.describe, - "visibility" to item.visibility, - "geometry" to item.geometry, - "geometryVisibility" to item.geometryVisibility - ) - newList.add(map) - } - result.success(newList) - }; - } -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index d2ea1cc9..26bd972f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true +android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the @@ -25,4 +26,5 @@ systemProp.http.proxyHost=127.0.0.1 systemProp.http.proxyPort=1080 systemProp.https.proxyHost=127.0.0.1 systemProp.https.proxyPort=1080 -org.gradle.configureondemand=true \ No newline at end of file +org.gradle.configureondemand=true +android.experimental.legacyTransform.forceNonIncremental=true \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 184396c6..d591dffb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,29 +1,30 @@ pluginManagement { repositories { + gradlePluginPortal() + google() + mavenCentral() + maven { url 'https://jitpack.io' } maven { url "https://maven.aliyun.com/repository/google" } maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/jcenter' } - maven { url 'https://jitpack.io' } maven { url 'https://download.flutter.io' } maven { url 'https://storage.googleapis.com/download.flutter.io' } - google() - mavenCentral() - gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { + google() + mavenCentral() + gradlePluginPortal() + maven { url 'https://jitpack.io' } maven { url "https://maven.aliyun.com/repository/google" } maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/jcenter' } - maven { url 'https://jitpack.io' } maven { url 'https://download.flutter.io' } maven { url 'https://storage.googleapis.com/download.flutter.io' } - google() - mavenCentral() } } rootProject.name = "OMQualityInspection"