diff --git a/app/build.gradle b/app/build.gradle
index 3f963fba..8d24081c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,8 +24,8 @@ android {
}
}
compileOptions {
- sourceCompatibility JavaVersion.VERSION_11
- targetCompatibility JavaVersion.VERSION_11
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d55acb3d..13a16152 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,31 @@
-
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.navinfo.omqs">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -22,6 +47,16 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/assets/MergeOMDB.py b/app/src/main/assets/MergeOMDB.py
new file mode 100644
index 00000000..401524b1
--- /dev/null
+++ b/app/src/main/assets/MergeOMDB.py
@@ -0,0 +1,95 @@
+# coding:utf-8
+# 合并指定目录下的omdb(sqlite)数据
+
+import os
+import sys
+import json
+import sqlite3
+
+
+# 定义遍历目录的函数
+def traverse_dir(path):
+ fileList = list()
+ for root, dirs, files in os.walk(path):
+ for file in files:
+ if str(file).endswith(".omdb"):
+ # 文件的完整路径
+ file_path = os.path.join(root, file)
+ # 处理文件,例如读取文件内容等
+ print(file_path)
+ fileList.append(file_path)
+ return fileList
+
+
+# 打开配置文件,读取用户配置的
+def openConfigJson(path):
+ # 读取json配置,获取要抽取的表名
+ with open(path, "r") as f:
+ configMap = json.load(f)
+ return configMap
+
+
+# 按照tableList中指定的表名合并多个源数据库到指定目标数据库中
+def mergeSqliteData(originSqliteList, destSqlite, tableList):
+ destConn = sqlite3.connect(destSqlite)
+ destCursor = destConn.cursor()
+
+ for originSqlite in originSqliteList:
+ originConn = sqlite3.connect(originSqlite)
+ originCursor = originConn.cursor()
+ # 从源数据库中遍历取出表list中的数据
+ for table in tableList:
+ # 检查目标数据库中是否存在指定的表
+ containsTable = destCursor.execute(
+ "SELECT sql FROM sqlite_master WHERE type='table' AND name='%s'" % (table)).fetchall()
+ if not containsTable or len(containsTable) <= 0:
+ # 复制表结构
+ originCursor.execute("SELECT sql FROM sqlite_master WHERE type='table' AND name='%s'" % (table))
+ createTableSql = originCursor.fetchone()[0]
+ destCursor.execute(createTableSql)
+ destConn.commit()
+
+ originCursor.execute("Select * From " + table)
+ # 获取到源数据库中该表的所有数据
+ originData = originCursor.fetchall()
+ # 获取一行数据中包含多少列,以此动态设置sql语句中的?个数
+ if originData and len(originData)>0:
+ num_cols = len(originData[0])
+ placeholders = ",".join(["?"] * num_cols)
+ for row in originData:
+ destCursor.execute("INSERT INTO "+table+" VALUES ({})".format(placeholders), row)
+
+ print("{}数据已导入!".format(originSqlite))
+ originCursor.close()
+ originConn.close()
+ destConn.commit()
+ destCursor.close()
+ destConn.close()
+
+
+if __name__ == '__main__':
+ params = sys.argv[1:] # 截取参数
+ if params:
+ if not params[0]:
+ print("请输入要合并的omdb数据的文件夹")
+ raise AttributeError("请输入要合并的omdb数据的文件夹")
+ # 获取导出文件的表配置
+ jsonPath = params[0] + "/config.json"
+ if not os.path.exists(jsonPath):
+ raise AttributeError("指定目录下缺少config.json配置文件")
+ omdbDir = params[0]
+ originSqliteList = traverse_dir(omdbDir) # 获取到所有的omdb数据库的路径
+
+ tableNameList = list()
+ configMap = openConfigJson(jsonPath)
+ if configMap["tables"] and len(configMap["tables"]) > 0:
+ for tableName in set(configMap["tables"]):
+ tableNameList.append(tableName)
+ print(tableNameList)
+ else:
+ raise AttributeError("config.json文件中没有配置抽取数据的表名")
+
+ # 开始分别连接Sqlite数据库,按照指定表名合并数据
+ mergeSqliteData(originSqliteList, params[0]+"/output.sqlite", tableNameList)
+ else:
+ raise AttributeError("缺少参数:请输入要合并的omdb数据的文件夹")
diff --git a/app/src/main/java/com/navinfo/omqs/QAApplication.kt b/app/src/main/java/com/navinfo/omqs/QAApplication.kt
new file mode 100644
index 00000000..faef9dba
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/QAApplication.kt
@@ -0,0 +1,10 @@
+package com.navinfo.omqs
+
+import android.app.Application
+
+class QAApplication: Application() {
+ override fun onCreate() {
+ super.onCreate()
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/model/LoginUser.kt b/app/src/main/java/com/navinfo/omqs/model/LoginUser.kt
new file mode 100644
index 00000000..77c0aceb
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/model/LoginUser.kt
@@ -0,0 +1,6 @@
+package com.navinfo.omqs.model
+
+data class LoginUser(
+ var username: String = "",
+ var password: String = ""
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/LoginActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/LoginActivity.kt
deleted file mode 100644
index 6b18b820..00000000
--- a/app/src/main/java/com/navinfo/omqs/ui/LoginActivity.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.navinfo.omqs.ui
-
-import android.os.Bundle
-import android.os.PersistableBundle
-import androidx.activity.viewModels
-import com.navinfo.omqs.databinding.ActivityLoginBinding
-
-class LoginActivity : PermissionsActivity() {
-
- private lateinit var binding: ActivityLoginBinding
- private val viewModel by viewModels()
-
- override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
- super.onCreate(savedInstanceState, persistentState)
- binding = ActivityLoginBinding.inflate(layoutInflater)
- setContentView(binding.root)
- }
-
- override fun onPermissionsGranted() {
- initView()
- }
-
- private fun initView() {
-
- }
-
- override fun onPermissionsDenied() {
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/LoginActivityViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/LoginActivityViewModel.kt
deleted file mode 100644
index 10656373..00000000
--- a/app/src/main/java/com/navinfo/omqs/ui/LoginActivityViewModel.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.navinfo.omqs.ui
-
-import androidx.lifecycle.ViewModel
-
-class LoginActivityViewModel : ViewModel() {
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/MainActivity.kt
index 281fb87b..0dc22c98 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/MainActivity.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/MainActivity.kt
@@ -1,11 +1,7 @@
package com.navinfo.omqs.ui
import android.content.Intent
-import android.net.Uri
import android.os.Bundle
-import android.os.FileUtils
-import com.google.android.material.snackbar.Snackbar
-import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
@@ -13,20 +9,11 @@ import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import android.view.Menu
import android.view.MenuItem
-import android.widget.Toast
-import androidx.core.net.toFile
-import androidx.lifecycle.LifecycleOwner
-import com.blankj.utilcode.util.UriUtils
import com.github.k1rakishou.fsaf.FileChooser
-import com.github.k1rakishou.fsaf.FileManager
import com.github.k1rakishou.fsaf.callback.FSAFActivityCallbacks
-import com.github.k1rakishou.fsaf.callback.FileChooserCallback
-import com.hjq.permissions.OnPermissionCallback
-import com.hjq.permissions.Permission
-import com.hjq.permissions.XXPermissions
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.ActivityMainBinding
-import java.io.File
+import com.navinfo.omqs.ui.activity.PermissionsActivity
class MainActivity : PermissionsActivity(), FSAFActivityCallbacks {
@@ -41,29 +28,27 @@ class MainActivity : PermissionsActivity(), FSAFActivityCallbacks {
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
- setSupportActionBar(binding.toolbar)
-
val navController = findNavController(R.id.nav_host_fragment_content_main)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
fileChooser.setCallbacks(this@MainActivity)
- binding.fab.setOnClickListener { view ->
- Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
- .setAnchorView(R.id.fab)
- .setAction("Action", null).show()
- // 开始数据导入功能
- fileChooser.openChooseFileDialog(object: FileChooserCallback() {
- override fun onCancel(reason: String) {
- }
-
- override fun onResult(uri: Uri) {
- val file = UriUtils.uri2File(uri)
- Snackbar.make(view, "文件大小为:${file.length()}", Snackbar.LENGTH_LONG)
- .show()
- }
- })
- }
+// binding.fab.setOnClickListener { view ->
+// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
+// .setAnchorView(R.id.fab)
+// .setAction("Action", null).show()
+// // 开始数据导入功能
+// fileChooser.openChooseFileDialog(object: FileChooserCallback() {
+// override fun onCancel(reason: String) {
+// }
+//
+// override fun onResult(uri: Uri) {
+// val file = UriUtils.uri2File(uri)
+// Snackbar.make(view, "文件大小为:${file.length()}", Snackbar.LENGTH_LONG)
+// .show()
+// }
+// })
+// }
}
override fun onPermissionsGranted() {
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt
new file mode 100644
index 00000000..481a05f4
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt
@@ -0,0 +1,16 @@
+package com.navinfo.omqs.ui.activity
+
+import android.content.pm.ActivityInfo
+import android.os.Bundle
+import android.os.PersistableBundle
+import androidx.appcompat.app.AppCompatActivity
+
+/**
+ * 基类
+ */
+open class BaseActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏
+ super.onCreate(savedInstanceState)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/LoginActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/LoginActivity.kt
new file mode 100644
index 00000000..4ba3dd65
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/LoginActivity.kt
@@ -0,0 +1,40 @@
+package com.navinfo.omqs.ui.activity
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.databinding.DataBindingUtil
+import com.navinfo.omqs.R
+import com.navinfo.omqs.databinding.ActivityLoginBinding
+
+/**
+ * 登陆页面
+ */
+class LoginActivity : PermissionsActivity() {
+
+ private lateinit var binding: ActivityLoginBinding
+ private val viewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_login)
+ binding.loginUserModel = viewModel
+ binding.lifecycleOwner = this
+ binding.activity = this
+ }
+
+ override fun onPermissionsGranted() {
+ }
+
+ override fun onPermissionsDenied() {
+ }
+
+ /**
+ * 处理登录按钮
+ */
+ fun onClickLoginButton() {
+ val intent = Intent(this@LoginActivity, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/LoginViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/LoginViewModel.kt
new file mode 100644
index 00000000..29efc8fc
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/LoginViewModel.kt
@@ -0,0 +1,23 @@
+package com.navinfo.omqs.ui.activity
+
+import android.view.View
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import com.navinfo.omqs.model.LoginUser
+
+class LoginViewModel : ViewModel() {
+ val loginUser: MutableLiveData = MutableLiveData()
+
+ init {
+ loginUser.value = LoginUser(username = "admin", password = "123456")
+ }
+
+ /**
+ * 处理注册按钮
+ */
+ fun onClick(view: View) {
+ loginUser.value!!.username = "admin2"
+ loginUser.postValue(loginUser.value)
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/MainActivity.kt
new file mode 100644
index 00000000..94061fbc
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/MainActivity.kt
@@ -0,0 +1,45 @@
+package com.navinfo.omqs.ui.activity
+
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.core.view.WindowCompat
+import androidx.databinding.DataBindingUtil
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
+import androidx.lifecycle.LifecycleObserver
+import androidx.lifecycle.LifecycleOwner
+import com.navinfo.omqs.R
+import com.navinfo.omqs.databinding.ActivityMainBinding
+
+/**
+ * 地图主页面
+ */
+class MainActivity : BaseActivity() {
+
+ private lateinit var binding: ActivityMainBinding
+ private val viewModel by viewModels()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ WindowCompat.setDecorFitsSystemWindows(window, false)
+ super.onCreate(savedInstanceState)
+
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
+ //关联生命周期
+ binding.lifecycleOwner = this
+ //给xml转递对象
+ binding.mainActivity = this
+ //给xml传递viewModel对象
+ binding.viewModel = viewModel
+ //初始化地图
+ viewModel.initMap(this, binding.mapView.mainActivityMap)
+ //让viewModel监听activity生命周期
+ lifecycle.addObserver(viewModel)
+ }
+
+ /**
+ * 打开个人中菜单
+ */
+ fun openMenu() {
+ binding.mainActivityDrawer.open()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/MainViewModel.kt
new file mode 100644
index 00000000..242c9673
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/MainViewModel.kt
@@ -0,0 +1,53 @@
+package com.navinfo.omqs.ui.activity
+
+import android.app.Application
+import android.content.Context
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.DefaultLifecycleObserver
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.ViewModel
+import com.navinfo.collect.library.map.NIMapController
+import com.navinfo.collect.library.map.NIMapView
+
+class MainViewModel(val app: Application) : AndroidViewModel(app), DefaultLifecycleObserver {
+ /**
+ * 地图控制器
+ */
+ private lateinit var mapController: NIMapController
+
+ /**
+ * 初始化地图
+ */
+ fun initMap(context: Context, mapView: NIMapView) {
+ mapController = NIMapController(context = app, mapView = mapView)
+
+ }
+
+ override fun onStart(owner: LifecycleOwner) {
+ super.onStart(owner)
+ //开启定位
+ mapController.locationLayerHandler.startLocation()
+ }
+
+ override fun onPause(owner: LifecycleOwner) {
+ mapController.mMapView.onPause()
+ }
+
+ override fun onDestroy(owner: LifecycleOwner) {
+ mapController.mMapView.onDestroy()
+ //结束定位
+ mapController.locationLayerHandler.stopLocation()
+ }
+
+ override fun onResume(owner: LifecycleOwner) {
+ mapController.mMapView.onResume()
+ }
+
+ /**
+ * 点击我的位置,回到我的位置
+ */
+ fun onClickLocationButton() {
+ mapController.locationLayerHandler.animateToCurrentPosition()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/MapTestActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/MapTestActivity.kt
new file mode 100644
index 00000000..44918797
--- /dev/null
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/MapTestActivity.kt
@@ -0,0 +1,16 @@
+package com.navinfo.omqs.ui.activity
+
+import android.os.Bundle
+import com.navinfo.collect.library.map.NIMapController
+import com.navinfo.collect.library.map.NIMapView
+import com.navinfo.omqs.R
+
+class MapTestActivity: BaseActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_map_test)
+
+ val mapController = NIMapController(context = this, mapView = findViewById(R.id.main_activity_map1))
+ mapController.locationLayerHandler.startLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/PermissionsActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/PermissionsActivity.kt
similarity index 58%
rename from app/src/main/java/com/navinfo/omqs/ui/PermissionsActivity.kt
rename to app/src/main/java/com/navinfo/omqs/ui/activity/PermissionsActivity.kt
index a175c633..fa584a95 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/PermissionsActivity.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/PermissionsActivity.kt
@@ -1,9 +1,8 @@
-package com.navinfo.omqs.ui
+package com.navinfo.omqs.ui.activity
+import android.os.Build
import android.os.Bundle
-import android.os.PersistableBundle
import android.widget.Toast
-import androidx.appcompat.app.AppCompatActivity
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
@@ -11,18 +10,31 @@ import com.hjq.permissions.XXPermissions
/**
* 权限申请Activity
*/
-abstract class PermissionsActivity : AppCompatActivity() {
+open class PermissionsActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
-
+ val permissionList = mutableListOf()
+ if (applicationInfo.targetSdkVersion >= Build.VERSION_CODES.TIRAMISU) {
+ //文件读写
+// permissionList.add(Permission.READ_MEDIA_IMAGES)
+// permissionList.add(Permission.READ_MEDIA_AUDIO)
+// permissionList.add(Permission.READ_MEDIA_VIDEO)
+ permissionList.add(Permission.MANAGE_EXTERNAL_STORAGE)
+ } else {
+ //文件读写
+ permissionList.add(Permission.WRITE_EXTERNAL_STORAGE)
+ permissionList.add(Permission.READ_EXTERNAL_STORAGE)
+ permissionList.add(Permission.READ_MEDIA_VIDEO)
+ }
+ //定位权限
+ permissionList.add(Permission.ACCESS_FINE_LOCATION)
+ permissionList.add(Permission.ACCESS_COARSE_LOCATION)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ permissionList.add(Permission.ACCESS_BACKGROUND_LOCATION)
+ }
XXPermissions.with(this)
// 申请单个权限
-// .permission(Permission.WRITE_EXTERNAL_STORAGE)
-// .permission(Permission.READ_EXTERNAL_STORAGE)
-// .permission(Permission.READ_MEDIA_IMAGES)
-// .permission(Permission.READ_MEDIA_AUDIO)
-// .permission(Permission.READ_MEDIA_VIDEO)
- .permission(Permission.MANAGE_EXTERNAL_STORAGE)
+ .permission(permissionList)
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
@@ -39,6 +51,8 @@ abstract class PermissionsActivity : AppCompatActivity() {
.show()
onPermissionsGranted()
return
+ } else {
+ onPermissionsDenied()
}
// 在SD卡创建项目目录
}
@@ -55,11 +69,23 @@ abstract class PermissionsActivity : AppCompatActivity() {
XXPermissions.startPermissionActivity(this@PermissionsActivity, permissions)
onPermissionsDenied()
} else {
+ onPermissionsDenied()
}
}
})
}
- abstract fun onPermissionsGranted()
- abstract fun onPermissionsDenied()
+ /**
+ * 权限全部同意
+ */
+ open fun onPermissionsGranted() {
+
+ }
+
+ /**
+ * 权限
+ */
+ open fun onPermissionsDenied() {
+
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/FirstFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/FirstFragment.kt
similarity index 95%
rename from app/src/main/java/com/navinfo/omqs/FirstFragment.kt
rename to app/src/main/java/com/navinfo/omqs/ui/fragment/FirstFragment.kt
index 038ba3e0..ab8943a7 100644
--- a/app/src/main/java/com/navinfo/omqs/FirstFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/FirstFragment.kt
@@ -1,4 +1,4 @@
-package com.navinfo.omqs
+package com.navinfo.omqs.ui.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
+import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentFirstBinding
/**
diff --git a/app/src/main/java/com/navinfo/omqs/SecondFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/SecondFragment.kt
similarity index 93%
rename from app/src/main/java/com/navinfo/omqs/SecondFragment.kt
rename to app/src/main/java/com/navinfo/omqs/ui/fragment/SecondFragment.kt
index 7e3e1b25..b9a3bffb 100644
--- a/app/src/main/java/com/navinfo/omqs/SecondFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/SecondFragment.kt
@@ -1,4 +1,4 @@
-package com.navinfo.omqs
+package com.navinfo.omqs.ui.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
+import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentSecondBinding
/**
@@ -22,7 +23,7 @@ class SecondFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
- ): View? {
+ ): View {
_binding = FragmentSecondBinding.inflate(inflater, container, false)
return binding.root
diff --git a/app/src/main/res/drawable/baseline_my_location_24.xml b/app/src/main/res/drawable/baseline_my_location_24.xml
new file mode 100644
index 00000000..5747dc82
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_my_location_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/baseline_person_24.xml b/app/src/main/res/drawable/baseline_person_24.xml
new file mode 100644
index 00000000..f96a32ae
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_person_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index a074df1d..f42901d3 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -1,9 +1,101 @@
-
+ tools:context=".ui.activity.LoginActivity">
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 928ac25a..73ea5e7b 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,34 +1,41 @@
-
+ tools:context=".ui.activity.MainActivity">
-
+
+
+
+
+
+
+
-
+ android:layout_height="match_parent"
+ app:mainActivity="@{mainActivity}"
+ app:viewModel="@{viewModel}"/>
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_map_test.xml b/app/src/main/res/layout/activity_map_test.xml
new file mode 100644
index 00000000..0d477f41
--- /dev/null
+++ b/app/src/main/res/layout/activity_map_test.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_first.xml b/app/src/main/res/layout/fragment_first.xml
index ddd95756..d7283fad 100644
--- a/app/src/main/res/layout/fragment_first.xml
+++ b/app/src/main/res/layout/fragment_first.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".FirstFragment">
+ tools:context=".ui.fragment.FirstFragment">
+ tools:context=".ui.fragment.SecondFragment">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml
new file mode 100644
index 00000000..30935119
--- /dev/null
+++ b/app/src/main/res/layout/nav_header_main.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml
new file mode 100644
index 00000000..b80a9585
--- /dev/null
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -0,0 +1,20 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 9693f9e4..5c0fb2ec 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -1,7 +1,7 @@
+ 请输入用户名
+ 请输入密码
+ 登录
+ 注册
+ imageDescription
+ Open navigation drawer
+ Close navigation drawer
+ Android Studio
+ android.studio@android.com
+ Navigation header
+
+ Home
+ Gallery
+ Slideshow
\ No newline at end of file
diff --git a/collect-library/build.gradle b/collect-library/build.gradle
index 7ea37c25..9cc1452d 100644
--- a/collect-library/build.gradle
+++ b/collect-library/build.gradle
@@ -56,7 +56,7 @@ android {
dependencies {
api fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
-
+ api files('libs/BaiduLBS_AndroidSDK_Lib.aar')
implementation "androidx.appcompat:appcompat:$appcompatVersion"
implementation "com.google.android.material:material:$materialVersion"
testImplementation 'junit:junit:4.13.2'
@@ -106,11 +106,10 @@ dependencies {
implementation "androidx.sqlite:sqlite:2.0.1"
implementation "androidx.room:room-runtime:2.1.0"
annotationProcessor "androidx.room:room-compiler:2.1.0"
- kapt 'android.arch.persistence.room:compiler:1.1.1' // compiler 需要用 room 的
kapt "androidx.room:room-compiler:2.1.0"
- androidTestImplementation "android.arch.persistence.room:testing:1.1.1"
- implementation "android.arch.lifecycle:extensions:1.1.1"
- kapt "android.arch.lifecycle:compiler:1.1.1"
+ androidTestImplementation 'androidx.room:room-testing:2.0.0'
+ implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
+ kapt 'androidx.lifecycle:lifecycle-compiler:2.0.0'
implementation 'com.tencent.wcdb:wcdb-android:1.0.0'
implementation "androidx.core:core-ktx:1.8.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
diff --git a/collect-library/libs/BaiduLBS_AndroidSDK_Lib.aar b/collect-library/libs/BaiduLBS_AndroidSDK_Lib.aar
new file mode 100644
index 00000000..18d4fe80
Binary files /dev/null and b/collect-library/libs/BaiduLBS_AndroidSDK_Lib.aar differ
diff --git a/collect-library/src/main/AndroidManifest.xml b/collect-library/src/main/AndroidManifest.xml
index 4aeba678..5f8fe9fa 100644
--- a/collect-library/src/main/AndroidManifest.xml
+++ b/collect-library/src/main/AndroidManifest.xml
@@ -8,13 +8,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/collect-library/src/main/java/com/navinfo/collect/BaseActivity.java b/collect-library/src/main/java/com/navinfo/collect/BaseActivity.java
index fcbb0385..3a992a65 100644
--- a/collect-library/src/main/java/com/navinfo/collect/BaseActivity.java
+++ b/collect-library/src/main/java/com/navinfo/collect/BaseActivity.java
@@ -1,111 +1,117 @@
-package com.navinfo.collect;
-
-import android.Manifest;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Environment;
-import android.provider.Settings;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.app.ActivityCompat;
-import androidx.core.content.PermissionChecker;
-
-/**
- * Created by linyiran on 6/16/22.
- */
-public abstract class BaseActivity extends AppCompatActivity {
- private static final int REQUEST_PERMISSION = 1;
-
- protected boolean allPermissionsGranted;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setLayout();
- requestPermission();
- onActivityCreated(savedInstanceState);
- }
-
- protected abstract void setLayout();
-
- protected abstract void onActivityCreated(Bundle savedInstanceState);
-
- private void requestPermission() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- String[] permissions = new String[]{
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.INTERNET,
- Manifest.permission.ACCESS_NETWORK_STATE,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CAMERA
- };
- allPermissionsGranted = true;
- for (String perm : permissions) {
- if ((PermissionChecker.checkSelfPermission(this, perm) != PermissionChecker.PERMISSION_GRANTED)) {
- allPermissionsGranted = false;
- break;
- }
- }
- if (!allPermissionsGranted) {
- ActivityCompat.requestPermissions(BaseActivity.this, permissions, REQUEST_PERMISSION);
- } else {
- requestAllFilesAccess();
- }
- } else {
- allPermissionsGranted = true;
- }
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
- @NonNull int[] grantResults) {
- if (requestCode == REQUEST_PERMISSION) {
- allPermissionsGranted = true;
- for (int grantRes : grantResults) {
- if (grantRes != PackageManager.PERMISSION_GRANTED) {
- allPermissionsGranted = false;
- break;
- }
- }
- if (allPermissionsGranted) {
- requestAllFilesAccess();
- }
- }
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- }
-
- /**
- * Android 11 跳转到设置获取SD卡根目录写入权限
- */
- private void requestAllFilesAccess() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
- allPermissionsGranted = false;
-
- AlertDialog.Builder alertBuilder = new AlertDialog.Builder(BaseActivity.this,
- androidx.appcompat.R.style.Theme_AppCompat_Light_Dialog_Alert);
- alertBuilder.setMessage("需授权访问SD卡文件");
- alertBuilder.setCancelable(false);
- alertBuilder.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- }
- });
- alertBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- }
- });
- alertBuilder.show();
- }
- }
-}
+//package com.navinfo.collect;
+//
+//import android.Manifest;
+//import android.content.DialogInterface;
+//import android.content.Intent;
+//import android.content.pm.PackageManager;
+//import android.os.Build;
+//import android.os.Bundle;
+//import android.os.Environment;
+//import android.provider.Settings;
+//
+//import androidx.annotation.NonNull;
+//import androidx.annotation.Nullable;
+//import androidx.appcompat.app.AlertDialog;
+//import androidx.appcompat.app.AppCompatActivity;
+//import androidx.core.app.ActivityCompat;
+//import androidx.core.content.PermissionChecker;
+//
+//import com.baidu.ai.edge.core.base.Consts;
+//
+//
+///**
+// * Created by linyiran on 6/16/22.
+// */
+//public abstract class BaseActivity extends AppCompatActivity {
+// private static final int REQUEST_PERMISSION = 1;
+//
+// protected boolean allPermissionsGranted;
+//
+// @Override
+// protected void onCreate(@Nullable Bundle savedInstanceState) {
+// super.onCreate(savedInstanceState);
+// setLayout();
+// requestPermission();
+// onActivityCreated(savedInstanceState);
+// }
+//
+// protected abstract void setLayout();
+//
+// protected abstract void onActivityCreated(Bundle savedInstanceState);
+//
+// private void requestPermission() {
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+// String[] permissions = new String[]{
+// Manifest.permission.WRITE_EXTERNAL_STORAGE,
+// Manifest.permission.INTERNET,
+// Manifest.permission.ACCESS_NETWORK_STATE,
+// Manifest.permission.READ_PHONE_STATE,
+// Manifest.permission.CAMERA
+// };
+// allPermissionsGranted = true;
+// for (String perm : permissions) {
+// if ((PermissionChecker.checkSelfPermission(this, perm) != PermissionChecker.PERMISSION_GRANTED)) {
+// allPermissionsGranted = false;
+// break;
+// }
+// }
+// if (!allPermissionsGranted) {
+// ActivityCompat.requestPermissions(BaseActivity.this, permissions, REQUEST_PERMISSION);
+// } else {
+// requestAllFilesAccess();
+// }
+// } else {
+// allPermissionsGranted = true;
+// }
+// }
+//
+// @Override
+// public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+// @NonNull int[] grantResults) {
+// if (requestCode == REQUEST_PERMISSION) {
+// allPermissionsGranted = true;
+// for (int grantRes : grantResults) {
+// if (grantRes != PackageManager.PERMISSION_GRANTED) {
+// allPermissionsGranted = false;
+// break;
+// }
+// }
+// if (allPermissionsGranted) {
+// requestAllFilesAccess();
+// }
+// }
+// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+// }
+//
+// /**
+// * Android 11 跳转到设置获取SD卡根目录写入权限
+// */
+// private void requestAllFilesAccess() {
+// if (!Consts.AUTH_REQUIRE_SDCARD) {
+// return;
+// }
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
+// allPermissionsGranted = false;
+//
+// AlertDialog.Builder alertBuilder = new AlertDialog.Builder(BaseActivity.this,
+// androidx.appcompat.R.style.Theme_AppCompat_Light_Dialog_Alert);
+// alertBuilder.setMessage("需授权访问SD卡文件");
+// alertBuilder.setCancelable(false);
+// alertBuilder.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
+// @Override
+// public void onClick(DialogInterface dialog, int which) {
+// Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
+// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+// startActivity(intent);
+// }
+// });
+// alertBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
+// @Override
+// public void onClick(DialogInterface dialog, int which) {
+// dialog.dismiss();
+// }
+// });
+// alertBuilder.show();
+// }
+// }
+//}
diff --git a/collect-library/src/main/java/com/navinfo/collect/FlutterBaseActivity.kt b/collect-library/src/main/java/com/navinfo/collect/FlutterBaseActivity.kt
new file mode 100644
index 00000000..865be3f1
--- /dev/null
+++ b/collect-library/src/main/java/com/navinfo/collect/FlutterBaseActivity.kt
@@ -0,0 +1,43 @@
+//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/RealmUtils.java b/collect-library/src/main/java/com/navinfo/collect/library/data/RealmUtils.java
index 6f82be74..c5da1a20 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/data/RealmUtils.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/data/RealmUtils.java
@@ -6,7 +6,6 @@ import android.util.Log;
import com.google.protobuf.GeneratedMessageV3;
import com.navinfo.collect.library.data.entity.GeometryFeatureEntity;
import com.navinfo.collect.library.data.entity.LayerEntity;
-import com.navinfo.collect.library.map.NILayerManager;
import com.navinfo.collect.library.utils.GeometryTools;
import com.navinfo.onemap.det.sdkpbf.proto.crowdsource.Hadlanelink;
import com.navinfo.onemap.det.sdkpbf.proto.crowdsource.Hadlanemarklink;
@@ -48,7 +47,7 @@ public class RealmUtils {
private static RealmUtils instance;
private Realm realm;
private RealmConfiguration realmConfiguration;
- private String defaultDir = NILayerManager.defaultDir;
+ private String defaultDir = "";//NILayerManager.defaultDir;
private String realmName;
private final String NAME = "name";
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/handler/DataCameraHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/handler/DataCameraHandler.kt
new file mode 100644
index 00000000..9c3e323d
--- /dev/null
+++ b/collect-library/src/main/java/com/navinfo/collect/library/data/handler/DataCameraHandler.kt
@@ -0,0 +1,223 @@
+//package com.navinfo.collect.library.data.handler
+//
+//import android.content.Context
+//import android.graphics.Bitmap
+//import android.graphics.BitmapFactory
+//import android.media.ExifInterface
+//import android.util.Log
+//import com.baidu.ai.edge.ui.util.ImageUtil
+//import com.baidu.ai.edge.ui.view.model.OcrViewResultModel
+//import com.navinfo.collect.FlutterBaseActivity
+//import com.navinfo.collect.library.data.dao.impl.MapLifeDataBase
+//import com.navinfo.ocr.OCRManager
+//import kotlinx.coroutines.Dispatchers
+//import kotlinx.coroutines.launch
+//import kotlinx.coroutines.withContext
+//import java.io.*
+//import java.util.*
+//
+//interface OnOCRBatchListener {
+// fun onProgress(total: Int, current: Int)
+// suspend fun onResult(list: List