From e0b6d687f67948aa04239f5bd50a418c4c966b6e Mon Sep 17 00:00:00 2001
From: qiji4215 <qiji4215@navinfo.com>
Date: Tue, 13 Jun 2023 17:00:02 +0800
Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=B8=83=E5=B1=80=E5=85=81?=
 =?UTF-8?q?=E8=AE=B8=E6=B0=B4=E5=B9=B3=E6=97=8B=E8=BD=AC2.=E4=BF=AE?=
 =?UTF-8?q?=E5=A4=8D=E4=B8=BB=E9=A1=B5=E8=AE=BF=E9=97=AE=E5=9B=BE=E5=B1=82?=
 =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=B4=A9=E6=BA=83=E9=97=AE=E9=A2=983.?=
 =?UTF-8?q?=E6=89=A9=E5=85=85=E8=BD=A8=E8=BF=B9=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/src/main/AndroidManifest.xml              |  3 -
 .../java/com/navinfo/omqs/OMQSApplication.kt  |  6 +-
 .../navinfo/omqs/ui/activity/BaseActivity.kt  |  7 +-
 .../ui/activity/console/ConsoleActivity.kt    |  5 +-
 .../omqs/ui/activity/map/MainViewModel.kt     | 19 +++---
 .../layermanager/LayerManagerViewModel.kt     | 10 ++-
 .../layermanager/LayermanagerFragment.kt      | 15 +++--
 .../res/layout/fragment_layer_manager.xml     | 66 ++++++++++---------
 .../library/data/dao/impl/TraceDataBase.java  | 17 ++++-
 .../library/data/entity/NiLocation.java       | 21 ++++++
 .../map/handler/LocationLayerHandler.kt       |  2 +
 11 files changed, 116 insertions(+), 55 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 184ccfd4..c1bdcd10 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,7 +49,6 @@
             android:exported="true"
             android:label="@string/app_name"
             android:launchMode="singleTask"
-            android:screenOrientation="landscape"
             android:theme="@style/Theme.OMQualityInspection">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -61,7 +60,6 @@
             android:name=".ui.activity.map.MainActivity"
             android:exported="false"
             android:launchMode="singleTask"
-            android:screenOrientation="landscape"
             android:theme="@style/Theme.OMQualityInspection" />
 
         <activity
@@ -69,7 +67,6 @@
             android:exported="true"
             android:label="@string/app_name"
             android:launchMode="singleTask"
-            android:screenOrientation="landscape"
             android:theme="@style/Theme.OMQualityInspection">
 
         </activity>
diff --git a/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt b/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt
index d6d09a80..07c6b4dc 100644
--- a/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt
+++ b/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt
@@ -1,6 +1,11 @@
 package com.navinfo.omqs
 
+import android.app.Activity
 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.ui.manager.TakePhotoManager
 import com.navinfo.omqs.util.NetUtils
@@ -23,5 +28,4 @@ class OMQSApplication : Application() {
         val hashBytes = messageDigest.digest(inputString.toByteArray())
         return hashBytes.joinToString("") { "%02x".format(it) };
     }
-
 }
\ No newline at end of file
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
index a1314579..7cd9155e 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt
@@ -13,10 +13,15 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
 open class BaseActivity : AppCompatActivity() {
     private var loadingDialog: AlertDialog? = null
     override fun onCreate(savedInstanceState: Bundle?) {
-        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏
         super.onCreate(savedInstanceState)
     }
 
+    override fun onResume() {
+        super.onResume()
+        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
+    }
+
+
     /**
      * 显示loading dialog
      */
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/console/ConsoleActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/console/ConsoleActivity.kt
index 589d33f2..4189b8c9 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/console/ConsoleActivity.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/console/ConsoleActivity.kt
@@ -1,6 +1,7 @@
 package com.navinfo.omqs.ui.activity.console
 
 import android.content.Intent
+import android.content.pm.ActivityInfo
 import android.os.Bundle
 import android.util.Log
 import android.view.View
@@ -199,7 +200,7 @@ class ConsoleActivity : BaseActivity(), OnClickListener {
                  * 图层设置
                  */
                 R.id.console_layer_setting_bg, R.id.console_layer_setting_icon_bg -> {
-/*                    if (sceneFlag) {
+                    if (sceneFlag) {
                         mFragment = LayermanagerFragment()
                         sceneFlag = false
                         TransitionManager.go(bScene, bTransition)
@@ -210,7 +211,7 @@ class ConsoleActivity : BaseActivity(), OnClickListener {
                                 .replace(fragmentId, mFragment!!).commit()
                         }
                         return
-                    }*/
+                    }
                 }
                 /**
                  * 测评结果列表
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
index 6b26f55d..c8f575ca 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
@@ -78,6 +78,9 @@ class MainViewModel @Inject constructor(
 
 //    var testPoint = GeoPoint(0, 0)
 
+    //uuid标识,用于记录轨迹组
+    val uuid = UUID.randomUUID().toString()
+
     //语音窗体
     private var pop: PopupWindow? = null
 
@@ -160,15 +163,9 @@ class MainViewModel @Inject constructor(
     }
 
     private fun initLocation() {
-        //        mapController.locationLayerHandler.setNiLocationListener(NiLocationListener {
-//            addSaveTrace(it)
-//
-//        })
         //用于定位点存储到数据库
         viewModelScope.launch(Dispatchers.Default) {
             mapController.locationLayerHandler.niLocationFlow.collect { location ->
-//                location.longitude = testPoint.longitude
-//                location.latitude = testPoint.latitude
                 val geometry = GeometryTools.createGeometry(
                     GeoPoint(
                         location.latitude, location.longitude
@@ -186,7 +183,13 @@ class MainViewModel @Inject constructor(
                         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)
                 mapController.mMapView.vtmMap.updateMap(true)
             }
@@ -194,8 +197,6 @@ class MainViewModel @Inject constructor(
         //用于定位点捕捉道路
         viewModelScope.launch(Dispatchers.Default) {
             mapController.locationLayerHandler.niLocationFlow.collectLatest { location ->
-//                location.longitude = testPoint.longitude
-//                location.latitude = testPoint.latitude
                 if (!isSelectRoad()) captureLink(GeoPoint(location.latitude, location.longitude))
             }
         }
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt
index 82861c12..c747c423 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt
@@ -1,5 +1,7 @@
 package com.navinfo.omqs.ui.fragment.layermanager
 
+import android.content.Context
+import android.widget.Toast
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 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.tools.LayerConfigUtils
 import com.navinfo.omqs.util.FlowEventBus
+import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 import java.io.File
 
 class LayerManagerViewModel(): ViewModel() {
@@ -21,11 +25,15 @@ class LayerManagerViewModel(): ViewModel() {
         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))
         // 发送新的配置数据
         viewModelScope.launch {
             FlowEventBus.post(Constant.EVENT_LAYER_MANAGER_CHANGE, listData)
+            withContext(Dispatchers.Main) {
+                Toast.makeText(context, "设置成功", Toast.LENGTH_SHORT)
+                    .show()
+            }
         }
     }
 
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt
index ba11a236..b37f0871 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt
@@ -4,7 +4,10 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 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.navigation.fragment.findNavController
 import com.blankj.utilcode.util.SPStaticUtils
@@ -30,7 +33,9 @@ class LayermanagerFragment : BaseFragment(){
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
+
         val adapter = LayerManagerExpandableListAdapter(requireContext(), viewModel.getLayerConfigList())
+
         binding.elvLayerManager.setAdapter(adapter)
         // 默认显示第一个父项下的子类
         binding.elvLayerManager.expandGroup(0)
@@ -43,15 +48,15 @@ class LayermanagerFragment : BaseFragment(){
             }
         }
 
+        binding.imgConfirm.setOnClickListener {
+            viewModel.saveLayerConfigList(requireContext(),adapter.parentItems)
+        }
+
         binding.imgBack.setOnClickListener {
             findNavController().navigateUp()
         }
 
-        binding.tvTitle.text = findNavController().currentDestination?.label
-
-        binding.imgConfirm.setOnClickListener {  // 用户点击确认,重新设置当前的图层显隐控制
-            viewModel.saveLayerConfigList(adapter.parentItems)
-        }
+        binding.tvTitle.text = "图层管理"
     }
 
     override fun onDestroyView() {
diff --git a/app/src/main/res/layout/fragment_layer_manager.xml b/app/src/main/res/layout/fragment_layer_manager.xml
index a70aafe6..78f91573 100644
--- a/app/src/main/res/layout/fragment_layer_manager.xml
+++ b/app/src/main/res/layout/fragment_layer_manager.xml
@@ -1,64 +1,68 @@
 <?xml version="1.0" encoding="utf-8"?>
 <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"
-    android:background="@color/bg_left_pannel"
-    android:orientation="vertical"
     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
         android:id="@+id/title_layout"
+        style="@style/left_pannel_title_layout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        app:layout_constraintTop_toTopOf="parent"
-        style="@style/left_pannel_title_layout">
+        app:layout_constraintTop_toTopOf="parent">
+
         <androidx.appcompat.widget.AppCompatImageView
             android:id="@+id/img_back"
+            style="@style/btn_round"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            app:layout_constraintLeft_toLeftOf="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"
+            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"
-            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
             android:id="@+id/tv_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textSize="@dimen/left_pannel_title_font"
             android:textColor="@color/highFontColor"
+            android:textSize="@dimen/left_pannel_title_font"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintRight_toRightOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            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>
+            app:layout_constraintTop_toTopOf="parent"></androidx.appcompat.widget.AppCompatTextView>
     </androidx.constraintlayout.widget.ConstraintLayout>
+
     <androidx.cardview.widget.CardView
+        style="@style/default_card_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        app:layout_constraintTop_toBottomOf="@id/title_layout"
-        style="@style/default_card_view">
+        app:layout_constraintTop_toBottomOf="@id/title_layout">
+
         <ExpandableListView
             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_height="match_parent"/>
+            android:layout_height="match_parent"
+            android:divider="@android:drawable/divider_horizontal_dim_dark"
+            android:dividerHeight="0.1dp" />
     </androidx.cardview.widget.CardView>
 </LinearLayout>
\ No newline at end of file
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java
index 99e861bd..ba6195d1 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java
@@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
 import androidx.room.Database;
 import androidx.room.Room;
 import androidx.room.RoomDatabase;
+import androidx.room.migration.Migration;
 import androidx.sqlite.db.SupportSQLiteDatabase;
 
 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.WCDBOpenHelperFactory;
 
-@Database(entities = { NiLocation.class},version = 1, exportSchema = false)
+@Database(entities = { NiLocation.class},version = 2, exportSchema = false)
 public abstract class TraceDataBase extends RoomDatabase {
     // 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.
                             // Migration is not part of this codelab.
                             .fallbackToDestructiveMigration()
-                            .addCallback(sRoomDatabaseCallback)
+                            .addCallback(sRoomDatabaseCallback).addMigrations(MIGRATION_1_2)
                             .build();
                 }
             }
@@ -71,6 +72,18 @@ public abstract class TraceDataBase extends RoomDatabase {
         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.
      * For this sample, we clear the database every time it is created or opened.
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java
index 1bffbcd3..21e3a1fc 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java
@@ -61,6 +61,11 @@ public class NiLocation extends Feature{
     private int tilex;
     @ColumnInfo(name = "tiley")
     private int tiley;
+    @ColumnInfo(name = "groupId")
+    private String groupId;
+    @ColumnInfo(name = "timeStamp")
+    private String timeStamp;
+
     private boolean isAccouracy;
     private boolean isSpeed;
     private boolean isAltitude;
@@ -297,4 +302,20 @@ public class NiLocation extends Feature{
     public void setErrorCode(String 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;
+    }
 }
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt
index 823510f8..851d095c 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt
@@ -11,6 +11,7 @@ import com.baidu.location.LocationClientOption
 import com.baidu.location.LocationClientOption.LocationMode
 import com.navinfo.collect.library.data.entity.NiLocation
 import com.navinfo.collect.library.map.NIMapView
+import com.navinfo.collect.library.utils.DateUtils
 import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.launch
 import org.oscim.core.GeoPoint
@@ -195,6 +196,7 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
             niLocation.address = mCurrentLocation!!.addrStr
             niLocation.street = mCurrentLocation!!.street
             niLocation.town = mCurrentLocation!!.town
+            niLocation.speed = mCurrentLocation!!.speed
             niLocation.streetNumber = mCurrentLocation!!.streetNumber
             niLocation.errorCode = mCurrentLocation!!.locType.toString()
             return niLocation