diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
@@ -57,6 +57,9 @@
+
@@ -57,6 +57,9 @@
+
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 0bacdfb..ab45deb 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -6,13 +6,19 @@
import android.os.Message
import android.view.KeyEvent
import android.view.View
+import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityMainBinding
+import com.casic.br.ar.app.external.YoloStateConst
+import com.casic.br.ar.app.external.Yolov8ncnn
import com.casic.br.ar.app.service.WebSocketMessageService
import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import org.opencv.android.OpenCVLoader
class MainActivity : KotlinBaseActivity(), Handler.Callback {
@@ -21,6 +27,8 @@
lateinit var weakReferenceHandler: WeakReferenceHandler
}
+ private val yolov8ncnn by lazy { Yolov8ncnn() }
+
override fun handleMessage(msg: Message): Boolean {
when (msg.what) {
LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
@@ -53,6 +61,15 @@
override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(this)
+ //协程预加载算法模型
+ lifecycleScope.launch(Dispatchers.IO) {
+ yolov8ncnn.loadModel(assets, 2, 0)
+ yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
+ }
+
+ //初始化OpenCV
+ OpenCVLoader.initLocal()
+
startService(Intent(this, WebSocketMessageService::class.java))
}
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 0bacdfb..ab45deb 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -6,13 +6,19 @@
import android.os.Message
import android.view.KeyEvent
import android.view.View
+import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityMainBinding
+import com.casic.br.ar.app.external.YoloStateConst
+import com.casic.br.ar.app.external.Yolov8ncnn
import com.casic.br.ar.app.service.WebSocketMessageService
import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import org.opencv.android.OpenCVLoader
class MainActivity : KotlinBaseActivity(), Handler.Callback {
@@ -21,6 +27,8 @@
lateinit var weakReferenceHandler: WeakReferenceHandler
}
+ private val yolov8ncnn by lazy { Yolov8ncnn() }
+
override fun handleMessage(msg: Message): Boolean {
when (msg.what) {
LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
@@ -53,6 +61,15 @@
override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(this)
+ //协程预加载算法模型
+ lifecycleScope.launch(Dispatchers.IO) {
+ yolov8ncnn.loadModel(assets, 2, 0)
+ yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
+ }
+
+ //初始化OpenCV
+ OpenCVLoader.initLocal()
+
startService(Intent(this, WebSocketMessageService::class.java))
}
diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
new file mode 100644
index 0000000..bc223ba
--- /dev/null
+++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
@@ -0,0 +1,71 @@
+package com.casic.br.ar.app.view
+
+import android.os.Bundle
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.ar.app.R
+import com.casic.br.ar.app.databinding.ActivityPermissionBinding
+import com.casic.br.ar.app.utils.LocaleConstant
+import com.casic.br.ar.app.vm.UserViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import pub.devrel.easypermissions.EasyPermissions
+
+class PermissionActivity : KotlinBaseActivity(),
+ EasyPermissions.PermissionCallbacks {
+
+ private val kTag = "PermissionActivity"
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initEvent() {
+
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
+ EasyPermissions.requestPermissions(
+ this, resources.getString(R.string.app_name) + "需要获取必要权限",
+ LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
+ )
+ }
+
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserLoginState()
+ userViewModel.userStateResult.observe(this) {
+ if (it) {
+ navigatePageTo()
+ } else {
+ navigatePageTo()
+ }
+ finish()
+ }
+ }
+
+ override fun initViewBinding(): ActivityPermissionBinding {
+ return ActivityPermissionBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
+ window.decorView.systemUiVisibility = uiOptions
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int, permissions: Array, grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
+ }
+
+ override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
+
+ }
+
+ override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
+
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 0bacdfb..ab45deb 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -6,13 +6,19 @@
import android.os.Message
import android.view.KeyEvent
import android.view.View
+import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityMainBinding
+import com.casic.br.ar.app.external.YoloStateConst
+import com.casic.br.ar.app.external.Yolov8ncnn
import com.casic.br.ar.app.service.WebSocketMessageService
import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import org.opencv.android.OpenCVLoader
class MainActivity : KotlinBaseActivity(), Handler.Callback {
@@ -21,6 +27,8 @@
lateinit var weakReferenceHandler: WeakReferenceHandler
}
+ private val yolov8ncnn by lazy { Yolov8ncnn() }
+
override fun handleMessage(msg: Message): Boolean {
when (msg.what) {
LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
@@ -53,6 +61,15 @@
override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(this)
+ //协程预加载算法模型
+ lifecycleScope.launch(Dispatchers.IO) {
+ yolov8ncnn.loadModel(assets, 2, 0)
+ yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
+ }
+
+ //初始化OpenCV
+ OpenCVLoader.initLocal()
+
startService(Intent(this, WebSocketMessageService::class.java))
}
diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
new file mode 100644
index 0000000..bc223ba
--- /dev/null
+++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
@@ -0,0 +1,71 @@
+package com.casic.br.ar.app.view
+
+import android.os.Bundle
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.ar.app.R
+import com.casic.br.ar.app.databinding.ActivityPermissionBinding
+import com.casic.br.ar.app.utils.LocaleConstant
+import com.casic.br.ar.app.vm.UserViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import pub.devrel.easypermissions.EasyPermissions
+
+class PermissionActivity : KotlinBaseActivity(),
+ EasyPermissions.PermissionCallbacks {
+
+ private val kTag = "PermissionActivity"
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initEvent() {
+
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
+ EasyPermissions.requestPermissions(
+ this, resources.getString(R.string.app_name) + "需要获取必要权限",
+ LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
+ )
+ }
+
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserLoginState()
+ userViewModel.userStateResult.observe(this) {
+ if (it) {
+ navigatePageTo()
+ } else {
+ navigatePageTo()
+ }
+ finish()
+ }
+ }
+
+ override fun initViewBinding(): ActivityPermissionBinding {
+ return ActivityPermissionBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
+ window.decorView.systemUiVisibility = uiOptions
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int, permissions: Array, grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
+ }
+
+ override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
+
+ }
+
+ override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
index ab45003..746655e 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
@@ -2,20 +2,15 @@
import android.graphics.PixelFormat
import android.os.Bundle
-import android.util.Log
import android.view.SurfaceHolder
import android.view.View
import android.view.WindowManager
import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityStartCheckBinding
-import com.casic.br.ar.app.extensions.getSceneByTarget
import com.casic.br.ar.app.external.INativeCallback
import com.casic.br.ar.app.external.YoloResult
-import com.casic.br.ar.app.external.YoloStateConst
import com.casic.br.ar.app.external.Yolov8ncnn
-import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.opencv.core.Mat
@@ -26,15 +21,8 @@
private val kTag = "StartCheckActivity"
private val context = this
-
- /**
- * 需要和训练出来的模型里面类别顺序保持一致
- * */
- private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房")
private val yolov8ncnn by lazy { Yolov8ncnn() }
private val mat by lazy { Mat() }
- private val targetSet by lazy { HashSet() }
- private var isShowing = false
private var detectedScene = ""
override fun initOnCreate(savedInstanceState: Bundle?) {
@@ -74,52 +62,7 @@
}
override fun onClassify(possibles: FloatArray) {
- if (isShowing) {
- return
- }
- //找出最大值的下标
- var max = possibles[0]
- var maxIndex = 0
- possibles.forEachIndexed { index, fl ->
- if (fl > max) {
- max = fl
- maxIndex = index
- }
- }
-
- try {
- lifecycleScope.launch(Dispatchers.Main) {
- isShowing = true
- if (classArray[maxIndex] == classArray[2]) {
- //非居
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
- .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- //需要同时调用分割和检测模型
-
- }
-
- override fun onCancelClick() {
- isShowing = false
- }
- }).build().show()
- } else {
- if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) {
- //需要调用检测模型
- loadModelFromAssets(2)
- yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
- }
- }
- }
- } catch (e: ArrayIndexOutOfBoundsException) {
- e.printStackTrace()
- }
}
override fun onPartition(output: ArrayList) {
@@ -127,11 +70,6 @@
}
override fun onDetect(output: YoloResult) {
- //需要根据检测结果反推属于什么场景
- val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type]
-
- targetSet.add(label)
- detectedScene = label.getSceneByTarget()
lifecycleScope.launch(Dispatchers.Main) {
binding.titleView.text = detectedScene
}
@@ -148,14 +86,4 @@
super.onPause()
yolov8ncnn.closeCamera()
}
-
- /**
- * index对应 JNI 里面定义的数组角标
- * */
- private fun loadModelFromAssets(index: Int) {
- val result = yolov8ncnn.loadModel(assets, index, 0)
- if (!result) {
- Log.d(kTag, "reload: yolov8ncnn loadModel failed")
- }
- }
}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 0bacdfb..ab45deb 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -6,13 +6,19 @@
import android.os.Message
import android.view.KeyEvent
import android.view.View
+import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityMainBinding
+import com.casic.br.ar.app.external.YoloStateConst
+import com.casic.br.ar.app.external.Yolov8ncnn
import com.casic.br.ar.app.service.WebSocketMessageService
import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import org.opencv.android.OpenCVLoader
class MainActivity : KotlinBaseActivity(), Handler.Callback {
@@ -21,6 +27,8 @@
lateinit var weakReferenceHandler: WeakReferenceHandler
}
+ private val yolov8ncnn by lazy { Yolov8ncnn() }
+
override fun handleMessage(msg: Message): Boolean {
when (msg.what) {
LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
@@ -53,6 +61,15 @@
override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(this)
+ //协程预加载算法模型
+ lifecycleScope.launch(Dispatchers.IO) {
+ yolov8ncnn.loadModel(assets, 2, 0)
+ yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
+ }
+
+ //初始化OpenCV
+ OpenCVLoader.initLocal()
+
startService(Intent(this, WebSocketMessageService::class.java))
}
diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
new file mode 100644
index 0000000..bc223ba
--- /dev/null
+++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
@@ -0,0 +1,71 @@
+package com.casic.br.ar.app.view
+
+import android.os.Bundle
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.ar.app.R
+import com.casic.br.ar.app.databinding.ActivityPermissionBinding
+import com.casic.br.ar.app.utils.LocaleConstant
+import com.casic.br.ar.app.vm.UserViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import pub.devrel.easypermissions.EasyPermissions
+
+class PermissionActivity : KotlinBaseActivity(),
+ EasyPermissions.PermissionCallbacks {
+
+ private val kTag = "PermissionActivity"
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initEvent() {
+
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
+ EasyPermissions.requestPermissions(
+ this, resources.getString(R.string.app_name) + "需要获取必要权限",
+ LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
+ )
+ }
+
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserLoginState()
+ userViewModel.userStateResult.observe(this) {
+ if (it) {
+ navigatePageTo()
+ } else {
+ navigatePageTo()
+ }
+ finish()
+ }
+ }
+
+ override fun initViewBinding(): ActivityPermissionBinding {
+ return ActivityPermissionBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
+ window.decorView.systemUiVisibility = uiOptions
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int, permissions: Array, grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
+ }
+
+ override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
+
+ }
+
+ override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
index ab45003..746655e 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
@@ -2,20 +2,15 @@
import android.graphics.PixelFormat
import android.os.Bundle
-import android.util.Log
import android.view.SurfaceHolder
import android.view.View
import android.view.WindowManager
import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityStartCheckBinding
-import com.casic.br.ar.app.extensions.getSceneByTarget
import com.casic.br.ar.app.external.INativeCallback
import com.casic.br.ar.app.external.YoloResult
-import com.casic.br.ar.app.external.YoloStateConst
import com.casic.br.ar.app.external.Yolov8ncnn
-import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.opencv.core.Mat
@@ -26,15 +21,8 @@
private val kTag = "StartCheckActivity"
private val context = this
-
- /**
- * 需要和训练出来的模型里面类别顺序保持一致
- * */
- private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房")
private val yolov8ncnn by lazy { Yolov8ncnn() }
private val mat by lazy { Mat() }
- private val targetSet by lazy { HashSet() }
- private var isShowing = false
private var detectedScene = ""
override fun initOnCreate(savedInstanceState: Bundle?) {
@@ -74,52 +62,7 @@
}
override fun onClassify(possibles: FloatArray) {
- if (isShowing) {
- return
- }
- //找出最大值的下标
- var max = possibles[0]
- var maxIndex = 0
- possibles.forEachIndexed { index, fl ->
- if (fl > max) {
- max = fl
- maxIndex = index
- }
- }
-
- try {
- lifecycleScope.launch(Dispatchers.Main) {
- isShowing = true
- if (classArray[maxIndex] == classArray[2]) {
- //非居
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
- .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- //需要同时调用分割和检测模型
-
- }
-
- override fun onCancelClick() {
- isShowing = false
- }
- }).build().show()
- } else {
- if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) {
- //需要调用检测模型
- loadModelFromAssets(2)
- yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
- }
- }
- }
- } catch (e: ArrayIndexOutOfBoundsException) {
- e.printStackTrace()
- }
}
override fun onPartition(output: ArrayList) {
@@ -127,11 +70,6 @@
}
override fun onDetect(output: YoloResult) {
- //需要根据检测结果反推属于什么场景
- val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type]
-
- targetSet.add(label)
- detectedScene = label.getSceneByTarget()
lifecycleScope.launch(Dispatchers.Main) {
binding.titleView.text = detectedScene
}
@@ -148,14 +86,4 @@
super.onPause()
yolov8ncnn.closeCamera()
}
-
- /**
- * index对应 JNI 里面定义的数组角标
- * */
- private fun loadModelFromAssets(index: Int) {
- val result = yolov8ncnn.loadModel(assets, index, 0)
- if (!result) {
- Log.d(kTag, "reload: yolov8ncnn loadModel failed")
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
index 61bf8fd..918f630 100644
--- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
@@ -18,6 +18,7 @@
private val gson by lazy { Gson() }
val loginResult = MutableLiveData()
+ val userStateResult = MutableLiveData()
val outResult = MutableLiveData()
fun login(context: Context, sid: String, account: String, secretKey: String) = launch({
@@ -38,6 +39,12 @@
it.printStackTrace()
})
+ fun getUserLoginState() = launch({
+ val response = RetrofitServiceManager.getUserDetail()
+ val responseCode = response.getResponseCode()
+ userStateResult.value = responseCode == 200
+ })
+
fun loginOut(context: Context) = launch({
val response = RetrofitServiceManager.loginOut()
val responseCode = response.getResponseCode()
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 0bacdfb..ab45deb 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -6,13 +6,19 @@
import android.os.Message
import android.view.KeyEvent
import android.view.View
+import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityMainBinding
+import com.casic.br.ar.app.external.YoloStateConst
+import com.casic.br.ar.app.external.Yolov8ncnn
import com.casic.br.ar.app.service.WebSocketMessageService
import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import org.opencv.android.OpenCVLoader
class MainActivity : KotlinBaseActivity(), Handler.Callback {
@@ -21,6 +27,8 @@
lateinit var weakReferenceHandler: WeakReferenceHandler
}
+ private val yolov8ncnn by lazy { Yolov8ncnn() }
+
override fun handleMessage(msg: Message): Boolean {
when (msg.what) {
LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
@@ -53,6 +61,15 @@
override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(this)
+ //协程预加载算法模型
+ lifecycleScope.launch(Dispatchers.IO) {
+ yolov8ncnn.loadModel(assets, 2, 0)
+ yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
+ }
+
+ //初始化OpenCV
+ OpenCVLoader.initLocal()
+
startService(Intent(this, WebSocketMessageService::class.java))
}
diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
new file mode 100644
index 0000000..bc223ba
--- /dev/null
+++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
@@ -0,0 +1,71 @@
+package com.casic.br.ar.app.view
+
+import android.os.Bundle
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.ar.app.R
+import com.casic.br.ar.app.databinding.ActivityPermissionBinding
+import com.casic.br.ar.app.utils.LocaleConstant
+import com.casic.br.ar.app.vm.UserViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import pub.devrel.easypermissions.EasyPermissions
+
+class PermissionActivity : KotlinBaseActivity(),
+ EasyPermissions.PermissionCallbacks {
+
+ private val kTag = "PermissionActivity"
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initEvent() {
+
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
+ EasyPermissions.requestPermissions(
+ this, resources.getString(R.string.app_name) + "需要获取必要权限",
+ LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
+ )
+ }
+
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserLoginState()
+ userViewModel.userStateResult.observe(this) {
+ if (it) {
+ navigatePageTo()
+ } else {
+ navigatePageTo()
+ }
+ finish()
+ }
+ }
+
+ override fun initViewBinding(): ActivityPermissionBinding {
+ return ActivityPermissionBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
+ window.decorView.systemUiVisibility = uiOptions
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int, permissions: Array, grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
+ }
+
+ override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
+
+ }
+
+ override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
index ab45003..746655e 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
@@ -2,20 +2,15 @@
import android.graphics.PixelFormat
import android.os.Bundle
-import android.util.Log
import android.view.SurfaceHolder
import android.view.View
import android.view.WindowManager
import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityStartCheckBinding
-import com.casic.br.ar.app.extensions.getSceneByTarget
import com.casic.br.ar.app.external.INativeCallback
import com.casic.br.ar.app.external.YoloResult
-import com.casic.br.ar.app.external.YoloStateConst
import com.casic.br.ar.app.external.Yolov8ncnn
-import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.opencv.core.Mat
@@ -26,15 +21,8 @@
private val kTag = "StartCheckActivity"
private val context = this
-
- /**
- * 需要和训练出来的模型里面类别顺序保持一致
- * */
- private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房")
private val yolov8ncnn by lazy { Yolov8ncnn() }
private val mat by lazy { Mat() }
- private val targetSet by lazy { HashSet() }
- private var isShowing = false
private var detectedScene = ""
override fun initOnCreate(savedInstanceState: Bundle?) {
@@ -74,52 +62,7 @@
}
override fun onClassify(possibles: FloatArray) {
- if (isShowing) {
- return
- }
- //找出最大值的下标
- var max = possibles[0]
- var maxIndex = 0
- possibles.forEachIndexed { index, fl ->
- if (fl > max) {
- max = fl
- maxIndex = index
- }
- }
-
- try {
- lifecycleScope.launch(Dispatchers.Main) {
- isShowing = true
- if (classArray[maxIndex] == classArray[2]) {
- //非居
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
- .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- //需要同时调用分割和检测模型
-
- }
-
- override fun onCancelClick() {
- isShowing = false
- }
- }).build().show()
- } else {
- if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) {
- //需要调用检测模型
- loadModelFromAssets(2)
- yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
- }
- }
- }
- } catch (e: ArrayIndexOutOfBoundsException) {
- e.printStackTrace()
- }
}
override fun onPartition(output: ArrayList) {
@@ -127,11 +70,6 @@
}
override fun onDetect(output: YoloResult) {
- //需要根据检测结果反推属于什么场景
- val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type]
-
- targetSet.add(label)
- detectedScene = label.getSceneByTarget()
lifecycleScope.launch(Dispatchers.Main) {
binding.titleView.text = detectedScene
}
@@ -148,14 +86,4 @@
super.onPause()
yolov8ncnn.closeCamera()
}
-
- /**
- * index对应 JNI 里面定义的数组角标
- * */
- private fun loadModelFromAssets(index: Int) {
- val result = yolov8ncnn.loadModel(assets, index, 0)
- if (!result) {
- Log.d(kTag, "reload: yolov8ncnn loadModel failed")
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
index 61bf8fd..918f630 100644
--- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
@@ -18,6 +18,7 @@
private val gson by lazy { Gson() }
val loginResult = MutableLiveData()
+ val userStateResult = MutableLiveData()
val outResult = MutableLiveData()
fun login(context: Context, sid: String, account: String, secretKey: String) = launch({
@@ -38,6 +39,12 @@
it.printStackTrace()
})
+ fun getUserLoginState() = launch({
+ val response = RetrofitServiceManager.getUserDetail()
+ val responseCode = response.getResponseCode()
+ userStateResult.value = responseCode == 200
+ })
+
fun loginOut(context: Context) = launch({
val response = RetrofitServiceManager.loginOut()
val responseCode = response.getResponseCode()
diff --git a/app/src/main/res/layout/activity_check_history_detail.xml b/app/src/main/res/layout/activity_check_history_detail.xml
index 5e95a8b..a2b0a37 100644
--- a/app/src/main/res/layout/activity_check_history_detail.xml
+++ b/app/src/main/res/layout/activity_check_history_detail.xml
@@ -48,7 +48,7 @@
@@ -74,7 +74,7 @@
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 0bacdfb..ab45deb 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -6,13 +6,19 @@
import android.os.Message
import android.view.KeyEvent
import android.view.View
+import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityMainBinding
+import com.casic.br.ar.app.external.YoloStateConst
+import com.casic.br.ar.app.external.Yolov8ncnn
import com.casic.br.ar.app.service.WebSocketMessageService
import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import org.opencv.android.OpenCVLoader
class MainActivity : KotlinBaseActivity(), Handler.Callback {
@@ -21,6 +27,8 @@
lateinit var weakReferenceHandler: WeakReferenceHandler
}
+ private val yolov8ncnn by lazy { Yolov8ncnn() }
+
override fun handleMessage(msg: Message): Boolean {
when (msg.what) {
LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
@@ -53,6 +61,15 @@
override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(this)
+ //协程预加载算法模型
+ lifecycleScope.launch(Dispatchers.IO) {
+ yolov8ncnn.loadModel(assets, 2, 0)
+ yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
+ }
+
+ //初始化OpenCV
+ OpenCVLoader.initLocal()
+
startService(Intent(this, WebSocketMessageService::class.java))
}
diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
new file mode 100644
index 0000000..bc223ba
--- /dev/null
+++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
@@ -0,0 +1,71 @@
+package com.casic.br.ar.app.view
+
+import android.os.Bundle
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.ar.app.R
+import com.casic.br.ar.app.databinding.ActivityPermissionBinding
+import com.casic.br.ar.app.utils.LocaleConstant
+import com.casic.br.ar.app.vm.UserViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import pub.devrel.easypermissions.EasyPermissions
+
+class PermissionActivity : KotlinBaseActivity(),
+ EasyPermissions.PermissionCallbacks {
+
+ private val kTag = "PermissionActivity"
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initEvent() {
+
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
+ EasyPermissions.requestPermissions(
+ this, resources.getString(R.string.app_name) + "需要获取必要权限",
+ LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
+ )
+ }
+
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserLoginState()
+ userViewModel.userStateResult.observe(this) {
+ if (it) {
+ navigatePageTo()
+ } else {
+ navigatePageTo()
+ }
+ finish()
+ }
+ }
+
+ override fun initViewBinding(): ActivityPermissionBinding {
+ return ActivityPermissionBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
+ window.decorView.systemUiVisibility = uiOptions
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int, permissions: Array, grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
+ }
+
+ override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
+
+ }
+
+ override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
index ab45003..746655e 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
@@ -2,20 +2,15 @@
import android.graphics.PixelFormat
import android.os.Bundle
-import android.util.Log
import android.view.SurfaceHolder
import android.view.View
import android.view.WindowManager
import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityStartCheckBinding
-import com.casic.br.ar.app.extensions.getSceneByTarget
import com.casic.br.ar.app.external.INativeCallback
import com.casic.br.ar.app.external.YoloResult
-import com.casic.br.ar.app.external.YoloStateConst
import com.casic.br.ar.app.external.Yolov8ncnn
-import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.opencv.core.Mat
@@ -26,15 +21,8 @@
private val kTag = "StartCheckActivity"
private val context = this
-
- /**
- * 需要和训练出来的模型里面类别顺序保持一致
- * */
- private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房")
private val yolov8ncnn by lazy { Yolov8ncnn() }
private val mat by lazy { Mat() }
- private val targetSet by lazy { HashSet() }
- private var isShowing = false
private var detectedScene = ""
override fun initOnCreate(savedInstanceState: Bundle?) {
@@ -74,52 +62,7 @@
}
override fun onClassify(possibles: FloatArray) {
- if (isShowing) {
- return
- }
- //找出最大值的下标
- var max = possibles[0]
- var maxIndex = 0
- possibles.forEachIndexed { index, fl ->
- if (fl > max) {
- max = fl
- maxIndex = index
- }
- }
-
- try {
- lifecycleScope.launch(Dispatchers.Main) {
- isShowing = true
- if (classArray[maxIndex] == classArray[2]) {
- //非居
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
- .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- //需要同时调用分割和检测模型
-
- }
-
- override fun onCancelClick() {
- isShowing = false
- }
- }).build().show()
- } else {
- if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) {
- //需要调用检测模型
- loadModelFromAssets(2)
- yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
- }
- }
- }
- } catch (e: ArrayIndexOutOfBoundsException) {
- e.printStackTrace()
- }
}
override fun onPartition(output: ArrayList) {
@@ -127,11 +70,6 @@
}
override fun onDetect(output: YoloResult) {
- //需要根据检测结果反推属于什么场景
- val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type]
-
- targetSet.add(label)
- detectedScene = label.getSceneByTarget()
lifecycleScope.launch(Dispatchers.Main) {
binding.titleView.text = detectedScene
}
@@ -148,14 +86,4 @@
super.onPause()
yolov8ncnn.closeCamera()
}
-
- /**
- * index对应 JNI 里面定义的数组角标
- * */
- private fun loadModelFromAssets(index: Int) {
- val result = yolov8ncnn.loadModel(assets, index, 0)
- if (!result) {
- Log.d(kTag, "reload: yolov8ncnn loadModel failed")
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
index 61bf8fd..918f630 100644
--- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
@@ -18,6 +18,7 @@
private val gson by lazy { Gson() }
val loginResult = MutableLiveData()
+ val userStateResult = MutableLiveData()
val outResult = MutableLiveData()
fun login(context: Context, sid: String, account: String, secretKey: String) = launch({
@@ -38,6 +39,12 @@
it.printStackTrace()
})
+ fun getUserLoginState() = launch({
+ val response = RetrofitServiceManager.getUserDetail()
+ val responseCode = response.getResponseCode()
+ userStateResult.value = responseCode == 200
+ })
+
fun loginOut(context: Context) = launch({
val response = RetrofitServiceManager.loginOut()
val responseCode = response.getResponseCode()
diff --git a/app/src/main/res/layout/activity_check_history_detail.xml b/app/src/main/res/layout/activity_check_history_detail.xml
index 5e95a8b..a2b0a37 100644
--- a/app/src/main/res/layout/activity_check_history_detail.xml
+++ b/app/src/main/res/layout/activity_check_history_detail.xml
@@ -48,7 +48,7 @@
@@ -74,7 +74,7 @@
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index cf9506c..7a427f7 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -74,7 +74,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:fontFamily="sans-serif-black"
- android:text="巡查记录"
+ android:text="检查记录"
android:textColor="@color/white"
android:textSize="@dimen/sp_22" />
diff --git a/.gitignore b/.gitignore
index aa724b7..f8b794a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/sdk/build
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60684eb..84afa26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen"
android:usesCleartextTraffic="true">
@@ -57,6 +57,9 @@
+
(),
- EasyPermissions.PermissionCallbacks {
+class LoginActivity : KotlinBaseActivity() {
private val kTag = "LoginActivity"
- private val yolov8ncnn by lazy { Yolov8ncnn() }
private val context = this
private val qrManager by lazy {
QrManager.getInstance().init(QrConfigCreator.create(this))
@@ -43,25 +33,9 @@
private lateinit var userViewModel: UserViewModel
override fun initOnCreate(savedInstanceState: Bundle?) {
- if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
- EasyPermissions.requestPermissions(
- this, resources.getString(R.string.app_name) + "需要获取必要权限",
- LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
- )
- }
-
binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
- //协程预加载算法模型
- lifecycleScope.launch(Dispatchers.IO) {
- yolov8ncnn.loadModel(assets, 1, 0)
- yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY)
- }
-
- //初始化OpenCV
- OpenCVLoader.initLocal()
-
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
authenticateViewModel.keyModel.observe(this) { keyModel ->
if (keyModel.code == 200) {
@@ -151,21 +125,4 @@
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
window.decorView.systemUiVisibility = uiOptions
}
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- //先把定位隐私政策声明,后面会用到
-// MapsInitializer.updatePrivacyShow(this, true, true)
-// MapsInitializer.updatePrivacyAgree(this, true)
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 0bacdfb..ab45deb 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -6,13 +6,19 @@
import android.os.Message
import android.view.KeyEvent
import android.view.View
+import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityMainBinding
+import com.casic.br.ar.app.external.YoloStateConst
+import com.casic.br.ar.app.external.Yolov8ncnn
import com.casic.br.ar.app.service.WebSocketMessageService
import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import org.opencv.android.OpenCVLoader
class MainActivity : KotlinBaseActivity(), Handler.Callback {
@@ -21,6 +27,8 @@
lateinit var weakReferenceHandler: WeakReferenceHandler
}
+ private val yolov8ncnn by lazy { Yolov8ncnn() }
+
override fun handleMessage(msg: Message): Boolean {
when (msg.what) {
LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
@@ -53,6 +61,15 @@
override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(this)
+ //协程预加载算法模型
+ lifecycleScope.launch(Dispatchers.IO) {
+ yolov8ncnn.loadModel(assets, 2, 0)
+ yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
+ }
+
+ //初始化OpenCV
+ OpenCVLoader.initLocal()
+
startService(Intent(this, WebSocketMessageService::class.java))
}
diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
new file mode 100644
index 0000000..bc223ba
--- /dev/null
+++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt
@@ -0,0 +1,71 @@
+package com.casic.br.ar.app.view
+
+import android.os.Bundle
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.ar.app.R
+import com.casic.br.ar.app.databinding.ActivityPermissionBinding
+import com.casic.br.ar.app.utils.LocaleConstant
+import com.casic.br.ar.app.vm.UserViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import pub.devrel.easypermissions.EasyPermissions
+
+class PermissionActivity : KotlinBaseActivity(),
+ EasyPermissions.PermissionCallbacks {
+
+ private val kTag = "PermissionActivity"
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initEvent() {
+
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
+ EasyPermissions.requestPermissions(
+ this, resources.getString(R.string.app_name) + "需要获取必要权限",
+ LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS
+ )
+ }
+
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserLoginState()
+ userViewModel.userStateResult.observe(this) {
+ if (it) {
+ navigatePageTo()
+ } else {
+ navigatePageTo()
+ }
+ finish()
+ }
+ }
+
+ override fun initViewBinding(): ActivityPermissionBinding {
+ return ActivityPermissionBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
+ window.decorView.systemUiVisibility = uiOptions
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int, permissions: Array, grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
+ }
+
+ override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
+
+ }
+
+ override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
index ab45003..746655e 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt
@@ -2,20 +2,15 @@
import android.graphics.PixelFormat
import android.os.Bundle
-import android.util.Log
import android.view.SurfaceHolder
import android.view.View
import android.view.WindowManager
import androidx.lifecycle.lifecycleScope
import com.casic.br.ar.app.databinding.ActivityStartCheckBinding
-import com.casic.br.ar.app.extensions.getSceneByTarget
import com.casic.br.ar.app.external.INativeCallback
import com.casic.br.ar.app.external.YoloResult
-import com.casic.br.ar.app.external.YoloStateConst
import com.casic.br.ar.app.external.Yolov8ncnn
-import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.opencv.core.Mat
@@ -26,15 +21,8 @@
private val kTag = "StartCheckActivity"
private val context = this
-
- /**
- * 需要和训练出来的模型里面类别顺序保持一致
- * */
- private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房")
private val yolov8ncnn by lazy { Yolov8ncnn() }
private val mat by lazy { Mat() }
- private val targetSet by lazy { HashSet() }
- private var isShowing = false
private var detectedScene = ""
override fun initOnCreate(savedInstanceState: Bundle?) {
@@ -74,52 +62,7 @@
}
override fun onClassify(possibles: FloatArray) {
- if (isShowing) {
- return
- }
- //找出最大值的下标
- var max = possibles[0]
- var maxIndex = 0
- possibles.forEachIndexed { index, fl ->
- if (fl > max) {
- max = fl
- maxIndex = index
- }
- }
-
- try {
- lifecycleScope.launch(Dispatchers.Main) {
- isShowing = true
- if (classArray[maxIndex] == classArray[2]) {
- //非居
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
- .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- //需要同时调用分割和检测模型
-
- }
-
- override fun onCancelClick() {
- isShowing = false
- }
- }).build().show()
- } else {
- if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) {
- //需要调用检测模型
- loadModelFromAssets(2)
- yolov8ncnn.updateYoloState(YoloStateConst.DETECT)
- }
- }
- }
- } catch (e: ArrayIndexOutOfBoundsException) {
- e.printStackTrace()
- }
}
override fun onPartition(output: ArrayList) {
@@ -127,11 +70,6 @@
}
override fun onDetect(output: YoloResult) {
- //需要根据检测结果反推属于什么场景
- val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type]
-
- targetSet.add(label)
- detectedScene = label.getSceneByTarget()
lifecycleScope.launch(Dispatchers.Main) {
binding.titleView.text = detectedScene
}
@@ -148,14 +86,4 @@
super.onPause()
yolov8ncnn.closeCamera()
}
-
- /**
- * index对应 JNI 里面定义的数组角标
- * */
- private fun loadModelFromAssets(index: Int) {
- val result = yolov8ncnn.loadModel(assets, index, 0)
- if (!result) {
- Log.d(kTag, "reload: yolov8ncnn loadModel failed")
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
index 61bf8fd..918f630 100644
--- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt
@@ -18,6 +18,7 @@
private val gson by lazy { Gson() }
val loginResult = MutableLiveData()
+ val userStateResult = MutableLiveData()
val outResult = MutableLiveData()
fun login(context: Context, sid: String, account: String, secretKey: String) = launch({
@@ -38,6 +39,12 @@
it.printStackTrace()
})
+ fun getUserLoginState() = launch({
+ val response = RetrofitServiceManager.getUserDetail()
+ val responseCode = response.getResponseCode()
+ userStateResult.value = responseCode == 200
+ })
+
fun loginOut(context: Context) = launch({
val response = RetrofitServiceManager.loginOut()
val responseCode = response.getResponseCode()
diff --git a/app/src/main/res/layout/activity_check_history_detail.xml b/app/src/main/res/layout/activity_check_history_detail.xml
index 5e95a8b..a2b0a37 100644
--- a/app/src/main/res/layout/activity_check_history_detail.xml
+++ b/app/src/main/res/layout/activity_check_history_detail.xml
@@ -48,7 +48,7 @@
@@ -74,7 +74,7 @@
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index cf9506c..7a427f7 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -74,7 +74,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:fontFamily="sans-serif-black"
- android:text="巡查记录"
+ android:text="检查记录"
android:textColor="@color/white"
android:textSize="@dimen/sp_22" />
diff --git a/app/src/main/res/layout/activity_permission.xml b/app/src/main/res/layout/activity_permission.xml
new file mode 100644
index 0000000..d432ee8
--- /dev/null
+++ b/app/src/main/res/layout/activity_permission.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file