Merge branch 'master' of gitlab.navinfo.com:CollectVehicle/OneMapQS

 Conflicts:
	app/src/main/AndroidManifest.xml
	app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt
	app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerFragment.kt
This commit is contained in:
squallzhjch 2023-06-14 13:51:43 +08:00
commit 46fa06d1a8
9 changed files with 112 additions and 46 deletions

View File

@ -1,6 +1,11 @@
package com.navinfo.omqs package com.navinfo.omqs
import android.app.Activity
import android.app.Application import android.app.Application
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.view.Surface
import android.view.WindowManager
import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager
import com.navinfo.omqs.ui.manager.TakePhotoManager import com.navinfo.omqs.ui.manager.TakePhotoManager
import com.navinfo.omqs.util.NetUtils import com.navinfo.omqs.util.NetUtils
@ -23,5 +28,4 @@ class OMQSApplication : Application() {
val hashBytes = messageDigest.digest(inputString.toByteArray()) val hashBytes = messageDigest.digest(inputString.toByteArray())
return hashBytes.joinToString("") { "%02x".format(it) }; return hashBytes.joinToString("") { "%02x".format(it) };
} }
} }

View File

@ -13,10 +13,15 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
open class BaseActivity : AppCompatActivity() { open class BaseActivity : AppCompatActivity() {
private var loadingDialog: AlertDialog? = null private var loadingDialog: AlertDialog? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
} }
override fun onResume() {
super.onResume()
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
}
/** /**
* 显示loading dialog * 显示loading dialog
*/ */

View File

@ -78,6 +78,9 @@ class MainViewModel @Inject constructor(
// var testPoint = GeoPoint(0, 0) // var testPoint = GeoPoint(0, 0)
//uuid标识用于记录轨迹组
val uuid = UUID.randomUUID().toString()
//语音窗体 //语音窗体
private var pop: PopupWindow? = null private var pop: PopupWindow? = null
@ -160,15 +163,9 @@ class MainViewModel @Inject constructor(
} }
private fun initLocation() { private fun initLocation() {
// mapController.locationLayerHandler.setNiLocationListener(NiLocationListener {
// addSaveTrace(it)
//
// })
//用于定位点存储到数据库 //用于定位点存储到数据库
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
mapController.locationLayerHandler.niLocationFlow.collect { location -> mapController.locationLayerHandler.niLocationFlow.collect { location ->
// location.longitude = testPoint.longitude
// location.latitude = testPoint.latitude
val geometry = GeometryTools.createGeometry( val geometry = GeometryTools.createGeometry(
GeoPoint( GeoPoint(
location.latitude, location.longitude location.latitude, location.longitude
@ -186,7 +183,13 @@ class MainViewModel @Inject constructor(
location.tiley = y location.tiley = y
} }
} }
Log.e("jingo", "定位点插入 ${Thread.currentThread().name}") Log.e("jingo", "定位点插入 ${location.longitude}")
location.groupId = uuid
try {
location.timeStamp = DateTimeUtil.getTime(location.time).toString()
}catch (e: Exception){
}
traceDataBase.niLocationDao.insert(location) traceDataBase.niLocationDao.insert(location)
mapController.mMapView.vtmMap.updateMap(true) mapController.mMapView.vtmMap.updateMap(true)
} }
@ -194,8 +197,6 @@ class MainViewModel @Inject constructor(
//用于定位点捕捉道路 //用于定位点捕捉道路
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
mapController.locationLayerHandler.niLocationFlow.collectLatest { location -> mapController.locationLayerHandler.niLocationFlow.collectLatest { location ->
// location.longitude = testPoint.longitude
// location.latitude = testPoint.latitude
if (!isSelectRoad()) captureLink(GeoPoint(location.latitude, location.longitude)) if (!isSelectRoad()) captureLink(GeoPoint(location.latitude, location.longitude))
} }
} }

View File

@ -4,6 +4,10 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentController
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.navinfo.omqs.databinding.FragmentLayerManagerBinding import com.navinfo.omqs.databinding.FragmentLayerManagerBinding
@ -38,11 +42,15 @@ class LayerManagerFragment(private var backListener: (() -> Unit?)? = null) : Ba
} }
} }
binding.imgConfirm.setOnClickListener {
viewModel.saveLayerConfigList(requireContext(),adapter.parentItems)
}
binding.imgBack.setOnClickListener { binding.imgBack.setOnClickListener {
backListener?.invoke() backListener?.invoke()
} }
binding.tvTitle.text = "图层设置"//findNavController().currentDestination?.label binding.tvTitle.text = "图层管理"//findNavController().currentDestination?.label
binding.imgConfirm.setOnClickListener { // 用户点击确认,重新设置当前的图层显隐控制 binding.imgConfirm.setOnClickListener { // 用户点击确认,重新设置当前的图层显隐控制
viewModel.saveLayerConfigList(adapter.parentItems) viewModel.saveLayerConfigList(adapter.parentItems)

View File

@ -1,5 +1,7 @@
package com.navinfo.omqs.ui.fragment.layermanager package com.navinfo.omqs.ui.fragment.layermanager
import android.content.Context
import android.widget.Toast
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.blankj.utilcode.util.FileIOUtils import com.blankj.utilcode.util.FileIOUtils
@ -10,7 +12,9 @@ import com.navinfo.omqs.Constant
import com.navinfo.omqs.bean.ImportConfig import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.tools.LayerConfigUtils import com.navinfo.omqs.tools.LayerConfigUtils
import com.navinfo.omqs.util.FlowEventBus import com.navinfo.omqs.util.FlowEventBus
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File import java.io.File
class LayerManagerViewModel(): ViewModel() { class LayerManagerViewModel(): ViewModel() {
@ -21,11 +25,15 @@ class LayerManagerViewModel(): ViewModel() {
return LayerConfigUtils.getLayerConfigList() return LayerConfigUtils.getLayerConfigList()
} }
fun saveLayerConfigList(listData: List<ImportConfig>) { fun saveLayerConfigList(context: Context, listData: List<ImportConfig>) {
SPStaticUtils.put(Constant.EVENT_LAYER_MANAGER_CHANGE, gson.toJson(listData)) SPStaticUtils.put(Constant.EVENT_LAYER_MANAGER_CHANGE, gson.toJson(listData))
// 发送新的配置数据 // 发送新的配置数据
viewModelScope.launch { viewModelScope.launch {
FlowEventBus.post(Constant.EVENT_LAYER_MANAGER_CHANGE, listData) FlowEventBus.post(Constant.EVENT_LAYER_MANAGER_CHANGE, listData)
withContext(Dispatchers.Main) {
Toast.makeText(context, "设置成功", Toast.LENGTH_SHORT)
.show()
}
} }
} }

View File

@ -1,64 +1,68 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/bg_left_pannel"
android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:background="@color/bg_left_pannel"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/title_layout" android:id="@+id/title_layout"
style="@style/left_pannel_title_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent">
style="@style/left_pannel_title_layout">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_back" android:id="@+id/img_back"
style="@style/btn_round"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/selector_bg_round_button" android:background="@drawable/selector_bg_round_button"
android:foreground="@drawable/ripple_btn_press" android:foreground="@drawable/ripple_btn_press"
android:src="@drawable/ic_baseline_keyboard_arrow_left_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"></androidx.appcompat.widget.AppCompatImageView>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_confirm"
style="@style/btn_round" style="@style/btn_round"
android:src="@drawable/ic_baseline_keyboard_arrow_left_24"></androidx.appcompat.widget.AppCompatImageView> android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/selector_bg_round_button"
android:foreground="@drawable/ripple_btn_press"
android:src="@drawable/ic_baseline_check_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"></androidx.appcompat.widget.AppCompatImageView>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="@dimen/left_pannel_title_font"
android:textColor="@color/highFontColor" android:textColor="@color/highFontColor"
android:textSize="@dimen/left_pannel_title_font"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"></androidx.appcompat.widget.AppCompatTextView>
app:layout_constraintBottom_toBottomOf="parent"></androidx.appcompat.widget.AppCompatTextView>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="5dp"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/selector_bg_round_button"
android:foreground="@drawable/ripple_btn_press"
style="@style/btn_round"
android:src="@drawable/ic_baseline_check_24"></androidx.appcompat.widget.AppCompatImageView>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
style="@style/default_card_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_constraintTop_toBottomOf="@id/title_layout" app:layout_constraintTop_toBottomOf="@id/title_layout">
style="@style/default_card_view">
<ExpandableListView <ExpandableListView
android:id="@+id/elv_layer_manager" android:id="@+id/elv_layer_manager"
android:divider="@android:drawable/divider_horizontal_dim_dark"
android:dividerHeight="0.1dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"
android:divider="@android:drawable/divider_horizontal_dim_dark"
android:dividerHeight="0.1dp" />
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
</LinearLayout> </LinearLayout>

View File

@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.room.Database; import androidx.room.Database;
import androidx.room.Room; import androidx.room.Room;
import androidx.room.RoomDatabase; import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import com.navinfo.collect.library.data.entity.NiLocation; import com.navinfo.collect.library.data.entity.NiLocation;
@ -18,7 +19,7 @@ import com.tencent.wcdb.repair.RecoverKit;
import com.tencent.wcdb.room.db.WCDBDatabase; import com.tencent.wcdb.room.db.WCDBDatabase;
import com.tencent.wcdb.room.db.WCDBOpenHelperFactory; import com.tencent.wcdb.room.db.WCDBOpenHelperFactory;
@Database(entities = { NiLocation.class},version = 1, exportSchema = false) @Database(entities = { NiLocation.class},version = 2, exportSchema = false)
public abstract class TraceDataBase extends RoomDatabase { public abstract class TraceDataBase extends RoomDatabase {
// marking the instance as volatile to ensure atomic access to the variable // marking the instance as volatile to ensure atomic access to the variable
/** /**
@ -63,7 +64,7 @@ public abstract class TraceDataBase extends RoomDatabase {
// Wipes and rebuilds instead of migrating if no Migration object. // Wipes and rebuilds instead of migrating if no Migration object.
// Migration is not part of this codelab. // Migration is not part of this codelab.
.fallbackToDestructiveMigration() .fallbackToDestructiveMigration()
.addCallback(sRoomDatabaseCallback) .addCallback(sRoomDatabaseCallback).addMigrations(MIGRATION_1_2)
.build(); .build();
} }
} }
@ -71,6 +72,18 @@ public abstract class TraceDataBase extends RoomDatabase {
return INSTANCE; return INSTANCE;
} }
/**
*扩充字段
*/
public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// 增加字段
database.execSQL("ALTER TABLE niLocation " + " ADD COLUMN groupId " + " TEXT");
database.execSQL("ALTER TABLE niLocation " + " ADD COLUMN timeStamp " + " TEXT");
}
};
/** /**
* Override the onOpen method to populate the database. * Override the onOpen method to populate the database.
* For this sample, we clear the database every time it is created or opened. * For this sample, we clear the database every time it is created or opened.

View File

@ -61,6 +61,11 @@ public class NiLocation extends Feature{
private int tilex; private int tilex;
@ColumnInfo(name = "tiley") @ColumnInfo(name = "tiley")
private int tiley; private int tiley;
@ColumnInfo(name = "groupId")
private String groupId;
@ColumnInfo(name = "timeStamp")
private String timeStamp;
private boolean isAccouracy; private boolean isAccouracy;
private boolean isSpeed; private boolean isSpeed;
private boolean isAltitude; private boolean isAltitude;
@ -297,4 +302,20 @@ public class NiLocation extends Feature{
public void setErrorCode(String errorCode) { public void setErrorCode(String errorCode) {
this.errorCode = errorCode; this.errorCode = errorCode;
} }
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
} }

View File

@ -11,6 +11,7 @@ import com.baidu.location.LocationClientOption
import com.baidu.location.LocationClientOption.LocationMode import com.baidu.location.LocationClientOption.LocationMode
import com.navinfo.collect.library.data.entity.NiLocation import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.map.NIMapView import com.navinfo.collect.library.map.NIMapView
import com.navinfo.collect.library.utils.DateUtils
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
@ -195,6 +196,7 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
niLocation.address = mCurrentLocation!!.addrStr niLocation.address = mCurrentLocation!!.addrStr
niLocation.street = mCurrentLocation!!.street niLocation.street = mCurrentLocation!!.street
niLocation.town = mCurrentLocation!!.town niLocation.town = mCurrentLocation!!.town
niLocation.speed = mCurrentLocation!!.speed
niLocation.streetNumber = mCurrentLocation!!.streetNumber niLocation.streetNumber = mCurrentLocation!!.streetNumber
niLocation.errorCode = mCurrentLocation!!.locType.toString() niLocation.errorCode = mCurrentLocation!!.locType.toString()
return niLocation return niLocation