Commit 552c8ce0 authored by 马乐's avatar 马乐

1.完善单向可信数据源封装

parent 69f8a7a4
plugins { plugins {
id 'com.android.application' id 'com.android.application'
id 'org.jetbrains.kotlin.android' id 'org.jetbrains.kotlin.android'
// id 'kotlin-kapt' id 'com.google.dagger.hilt.android'
id 'kotlin-kapt'
} }
android { android {
...@@ -16,6 +17,15 @@ android { ...@@ -16,6 +17,15 @@ android {
versionName "1.0" versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField 'String','DEV_MAP_SOURCE_HOST','"http://192.168.9.152:9290/"'
buildConfigField 'String','TEST_MAP_SOURCE_HOST','"http://192.168.9.152:9290/"'
buildConfigField 'String','DEV_API_SERVER_HOST','"http://192.168.9.152:9290/"'
buildConfigField 'String','TEST_API_SERVER_HOST','"http://192.168.9.152:9290/"'
buildConfigField 'String','TEST_PLATFORM_ADDRESS','"http://192.168.9.152:9290/"'
buildConfigField 'String','DEV_PLATFORM_ADDRESS','"http://192.168.9.152:9290/"'
buildConfigField 'double','DEFAULT_LONGITUDE','119.7622539014'
buildConfigField 'double','DEFAULT_LATITUDE','49.3795031825'
} }
buildTypes { buildTypes {
...@@ -42,29 +52,45 @@ android { ...@@ -42,29 +52,45 @@ android {
dependencies { dependencies {
implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.core:core-ktx:1.10.0'
implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0' implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1' implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1' implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
implementation "androidx.room:room-runtime:2.5.0"
implementation "androidx.room:room-ktx:2.5.0"
implementation 'com.squareup.okhttp3:okhttp:4.10.0' implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.moshi:moshi-kotlin:1.14.0'
implementation 'com.mapbox.maps:android:10.11.0' implementation 'com.mapbox.maps:android:10.11.0'
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-geojson:6.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-sdk-geojson:6.9.0'
implementation 'io.netty:netty-buffer:4.1.87.Final' implementation 'io.netty:netty-buffer:4.1.87.Final'
implementation 'io.github.toggery:jt808-codec:2.0.3' implementation 'io.github.toggery:jt808-codec:2.0.3'
implementation 'com.blankj:utilcodex:1.31.1' implementation 'com.blankj:utilcodex:1.31.1'
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.7.20' implementation 'org.jetbrains.kotlin:kotlin-reflect:1.7.22'
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
implementation 'com.github.mik3y:usb-serial-for-android:3.5.1' implementation 'com.github.mik3y:usb-serial-for-android:3.5.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'io.github.razerdp:BasePopup:3.2.1' implementation 'io.github.razerdp:BasePopup:3.2.1'
// implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1' // implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1'
implementation 'com.google.android.exoplayer:exoplayer:2.17.1' implementation 'com.google.android.exoplayer:exoplayer:2.17.1'
implementation 'com.afollestad.material-dialogs:core:3.2.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.0-RC'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.0-RC'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
implementation "com.google.dagger:hilt-android:2.44"
kapt "com.google.dagger:hilt-compiler:2.44"
kapt "androidx.room:room-compiler:2.5.0"
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
} }
\ No newline at end of file
...@@ -16,12 +16,13 @@ ...@@ -16,12 +16,13 @@
<application <application
android:name=".MyApp" android:name=".AntiCollisionApp"
android:allowBackup="true" android:allowBackup="true"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules" android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/waytous_logo" android:icon="@mipmap/waytous_logo"
android:networkSecurityConfig="@xml/network_security_config"
android:label="@string/app_name" android:label="@string/app_name"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.HTAnticollision" android:theme="@style/Theme.HTAnticollision"
......
...@@ -5,13 +5,14 @@ import com.blankj.utilcode.util.LogUtils ...@@ -5,13 +5,14 @@ import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.SPStaticUtils import com.blankj.utilcode.util.SPStaticUtils
import com.blankj.utilcode.util.SPUtils import com.blankj.utilcode.util.SPUtils
import com.blankj.utilcode.util.Utils import com.blankj.utilcode.util.Utils
import dagger.hilt.android.HiltAndroidApp
import kotlin.properties.Delegates import kotlin.properties.Delegates
class MyApp: Application() { @HiltAndroidApp
class AntiCollisionApp: Application(){
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
instance = this
Utils.init(this) Utils.init(this)
LogUtils.getConfig().globalTag = "Waytous" LogUtils.getConfig().globalTag = "Waytous"
SPStaticUtils.setDefaultSPUtils(SPUtils.getInstance("settings")) SPStaticUtils.setDefaultSPUtils(SPUtils.getInstance("settings"))
...@@ -19,7 +20,7 @@ class MyApp: Application() { ...@@ -19,7 +20,7 @@ class MyApp: Application() {
companion object { companion object {
//情况一:声明可空的属性 //情况一:声明可空的属性
private var instance: MyApp by Delegates.notNull() private var instance: AntiCollisionApp by Delegates.notNull()
fun instance() = instance fun instance() = instance
} }
} }
\ No newline at end of file
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.waytous.anticollision
import android.os.Handler
import android.os.Looper
import java.util.concurrent.Executor
import java.util.concurrent.Executors
import javax.inject.Inject
import javax.inject.Singleton
/**
* Global executor pools for the whole application.
*
* Grouping tasks like this avoids the effects of task starvation (e.g. disk reads don't wait behind
* webservice requests).
*/
@Singleton
open class AppExecutors(
private val diskIO: Executor,
private val networkIO: Executor,
private val mainThread: Executor
) {
@Inject
constructor() : this(
Executors.newSingleThreadExecutor(),
Executors.newFixedThreadPool(3),
MainThreadExecutor()
)
fun diskIO(): Executor {
return diskIO
}
fun networkIO(): Executor {
return networkIO
}
fun mainThread(): Executor {
return mainThread
}
private class MainThreadExecutor : Executor {
private val mainThreadHandler = Handler(Looper.getMainLooper())
override fun execute(command: Runnable) {
mainThreadHandler.post(command)
}
}
}
package com.waytous.anticollision.api
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.waytous.anticollision.BuildConfig
import com.waytous.anticollision.bean.MapDataSource
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.http.GET
import retrofit2.http.Query
interface ApiService {
/**
* 获取障碍物图层数据
* @param version
* */
@GET("api/map/obstaclesversion")
suspend fun obstaclesVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取电子围栏图层数据
* @param version
* */
@GET("api/map/electronicFenceversion")
suspend fun electronicFenceVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取湿滑区域图层数据
* @param version
* */
@GET("api/map/wetAreaversion")
suspend fun wetAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取车道节点图层数据
* @param version
* */
@GET("api/map/lanenodeversion")
suspend fun laneNodeVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取车道图层数据
* @param version
* */
@GET("api/map/laneversion")
suspend fun laneVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取可行使区域图层数据
* @param version
* */
@GET("api/map/runableareaversion")
suspend fun runnableAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取卸载区图层数据
* @param version
* */
@GET("api/map/dumpareaversion")
suspend fun dumpAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取装载区图层数据
* @param version
* */
@GET("api/map/diggingworkareaversion")
suspend fun diggingWorkAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取挡墙图层数据
* @param version
* */
@GET("api/map/barricadeversion")
suspend fun barricadeVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取静态区域图层数据
* @param version
* */
@GET("api/map/stationareaversion")
suspend fun stationAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取静态区域图层数据
* @param version
* */
@GET("api/map/staticobjsversion")
suspend fun staticObjectsVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取停车位图层数据
* @param version
* */
@GET("api/map/parkspotversion")
suspend fun parkSpotVersion(@Query("version") version:String = "-1"): MapDataSource?
companion object {
private val BASE_URL by lazy {
if (BuildConfig.DEBUG) BuildConfig.TEST_MAP_SOURCE_HOST else BuildConfig.DEV_MAP_SOURCE_HOST
}
private val moshi: Moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
fun create(): ApiService {
val logger = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BASIC }
val client = OkHttpClient.Builder()
.addInterceptor(logger)
.build()
return Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(MoshiConverterFactory.create(moshi))
.build()
.create(ApiService::class.java)
}
}
}
\ No newline at end of file
package com.waytous.anticollision.api
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.waytous.anticollision.BuildConfig
import com.waytous.anticollision.bean.MapDataSource
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.http.GET
import retrofit2.http.Query
interface MapSourceService {
/**
* 获取障碍物图层数据
* @param version
* */
@GET("api/map/obstaclesversion")
suspend fun obstaclesVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取电子围栏图层数据
* @param version
* */
@GET("api/map/electronicFenceversion")
suspend fun electronicFenceVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取湿滑区域图层数据
* @param version
* */
@GET("api/map/wetAreaversion")
suspend fun wetAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取车道节点图层数据
* @param version
* */
@GET("api/map/lanenodeversion")
suspend fun laneNodeVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取车道图层数据
* @param version
* */
@GET("api/map/laneversion")
suspend fun laneVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取可行使区域图层数据
* @param version
* */
@GET("api/map/runableareaversion")
suspend fun runnableAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取卸载区图层数据
* @param version
* */
@GET("api/map/dumpareaversion")
suspend fun dumpAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取装载区图层数据
* @param version
* */
@GET("api/map/diggingworkareaversion")
suspend fun diggingWorkAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取挡墙图层数据
* @param version
* */
@GET("api/map/barricadeversion")
suspend fun barricadeVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取静态区域图层数据
* @param version
* */
@GET("api/map/stationareaversion")
suspend fun stationAreaVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取静态区域图层数据
* @param version
* */
@GET("api/map/staticobjsversion")
suspend fun staticObjectsVersion(@Query("version") version:String = "-1"): MapDataSource?
/**
* 获取停车位图层数据
* @param version
* */
@GET("api/map/parkspotversion")
suspend fun parkSpotVersion(@Query("version") version:String = "-1"): MapDataSource?
companion object {
private val BASE_URL by lazy {
if (BuildConfig.DEBUG) BuildConfig.TEST_MAP_SOURCE_HOST else BuildConfig.DEV_MAP_SOURCE_HOST
}
private val moshi: Moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
fun create(): MapSourceService {
val logger = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BASIC }
val client = OkHttpClient.Builder()
.addInterceptor(logger)
.build()
return Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(MoshiConverterFactory.create(moshi))
.build()
.create(MapSourceService::class.java)
}
}
}
\ No newline at end of file
package com.waytous.anticollision.bean
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.squareup.moshi.Json
/**
* 地图数据源
* @author male
* */
@Entity(tableName = "map_source")
data class MapDataSource(
/**数据源ID*/
@PrimaryKey
@ColumnInfo(name = "sourceId")
@Json(ignore = true)
var sourceId:String = "",
/**地图geojson数据*/
@ColumnInfo(name = "geojson")
@Json(name = "geojson")
val geojson: String = "",
/**地图geojson数据版本*/
@ColumnInfo(name = "version")
@Json(name = "version")
val version: Int = -1
)
\ No newline at end of file
package com.waytous.anticollision.bean
data class MapDataSourceWrapper(val mapDataSource: MapDataSource, val abort:Boolean)
\ No newline at end of file
package com.waytous.anticollision.database
import androidx.room.Database
import androidx.room.RoomDatabase
import com.waytous.anticollision.bean.MapDataSource
@Database(entities = [MapDataSource::class], version = 1, exportSchema = false)
abstract class AppDatabase: RoomDatabase() {
abstract fun mapDataSourceDao():MapDataDao
}
\ No newline at end of file
package com.waytous.anticollision.database
import androidx.room.*
import com.waytous.anticollision.bean.MapDataSource
@Dao
interface MapDataDao {
@Query("SELECT * FROM map_source WHERE sourceId = :sourceId")
suspend fun findById(sourceId:String):MapDataSource
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(vararg sources: MapDataSource)
@Delete
suspend fun deleteSource(source: MapDataSource)
}
\ No newline at end of file
package com.waytous.anticollision.location package com.waytous.anticollision.location
import com.mapbox.common.LifecycleMonitoringState
import com.mapbox.common.LifecycleObserver
import com.mapbox.common.LifecycleState
import com.mapbox.maps.plugin.locationcomponent.LocationConsumer import com.mapbox.maps.plugin.locationcomponent.LocationConsumer
import com.mapbox.maps.plugin.locationcomponent.LocationProvider import com.mapbox.maps.plugin.locationcomponent.LocationProvider
class MyLocationProvider:LocationProvider { class MyLocationProvider:LocationProvider,LifecycleObserver{
override fun registerLocationConsumer(locationConsumer: LocationConsumer) { override fun registerLocationConsumer(locationConsumer: LocationConsumer) {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
...@@ -11,4 +14,12 @@ class MyLocationProvider:LocationProvider { ...@@ -11,4 +14,12 @@ class MyLocationProvider:LocationProvider {
override fun unRegisterLocationConsumer(locationConsumer: LocationConsumer) { override fun unRegisterLocationConsumer(locationConsumer: LocationConsumer) {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
override fun onMonitoringStateChanged(state: LifecycleMonitoringState, error: String?) {
TODO("Not yet implemented")
}
override fun onLifecycleStateChanged(state: LifecycleState) {
TODO("Not yet implemented")
}
} }
\ No newline at end of file
This diff is collapsed.
...@@ -2,16 +2,22 @@ package com.waytous.anticollision.ui ...@@ -2,16 +2,22 @@ package com.waytous.anticollision.ui
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ColorUtils import com.blankj.utilcode.util.ColorUtils
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.waytous.anticollision.R import com.waytous.anticollision.R
import com.waytous.anticollision.databinding.ActivityMainBinding import com.waytous.anticollision.databinding.ActivityMainBinding
import com.waytous.anticollision.repository.MainRepository
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding private lateinit var binding: ActivityMainBinding
private val viewModel by lazy {
ViewModelProvider(this,MainViewModel.MainViewModelFactory(MainRepository(this)))[MainViewModel::class.java]
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
//设置下布局向上移动状态栏的高度 //设置下布局向上移动状态栏的高度
......
package com.waytous.anticollision.ui
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.CreationExtras
import com.mapbox.geojson.Point
import com.waytous.anticollision.repository.MainRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.*
import java.math.BigDecimal
import javax.inject.Inject
class MainViewModel @Inject constructor(private val mainRepository: MainRepository) : ViewModel() {
val zoom: MutableLiveData<BigDecimal> by lazy {
MutableLiveData(BigDecimal(16.0))
}
val center: MutableLiveData<Point> by lazy {
MutableLiveData(Point.fromLngLat(LONGITUDE, LATITUDE))
}
fun obstaclesSource() =
flowOf(mainRepository.localObstaclesVersion(), mainRepository.remoteObstaclesVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun electronicFenceSource() = flowOf(
mainRepository.localElectronicFenceVersion(),
mainRepository.remoteElectronicFenceVersion()
)
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun wetAreaSource() =
flowOf(mainRepository.localWetAreaVersion(), mainRepository.remoteWetAreaVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun laneNodeSource() =
flowOf(mainRepository.localLaneNodeVersion(), mainRepository.remoteLaneNodeVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun laneSource() = flowOf(mainRepository.localLaneVersion(), mainRepository.remoteLaneVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun runnableAreaSource() = flowOf(
mainRepository.localRunnableAreaVersion(),
mainRepository.remoteRunnableAreaVersion()
).flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun dumpAreaSource() =
flowOf(mainRepository.localDumpAreaVersion(), mainRepository.remoteDumpAreaVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun diggingWorkAreaSource() = flowOf(
mainRepository.localDiggingAreaVersion(),
mainRepository.remoteDiggingWorkAreaVersion()
).flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun barricadeSource() =
flowOf(mainRepository.localBarricadeVersion(), mainRepository.remoteBarricadeVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun stationAreaSource() =
flowOf(mainRepository.localStationAreaVersion(), mainRepository.remoteStationAreaVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun parkSpotSource() =
flowOf(mainRepository.localParkSpotVersion(), mainRepository.remoteParkSpotVersion())
.flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
fun staticObjectsSource() = flowOf(
mainRepository.localStaticObjectsVersion(),
mainRepository.remoteStaticObjectsVersion()
).flattenMerge()
.transformWhile {
emit(it.mapDataSource)
!it.abort
}.map {
it.geojson
}.flowOn(Dispatchers.IO)
.catch {
emit("")
}
companion object {
const val MY_MAP_BOX_STYLE = "asset://style.json"
const val DUMP_AREA_SOURCE = "dumpAreaSource"
const val DUMP_AREA_LAYER = "dumpAreaLayer"
const val DUMP_AREA_TEXT_LAYER = "dumpAreaTextLayer"
const val OBSTACLES_SOURCE = "obstaclesSource"
const val OBSTACLES_LAYER = "obstaclesLayer"
const val OBSTACLES_TEXT_LAYER = "obstaclesTextLayer"
const val ELECTRONIC_FENCE_SOURCE = "electronicFenceSource"
const val ELECTRONIC_FENCE_LAYER = "electronicFenceLayer"
const val ELECTRONIC_FENCE_TEXT_LAYER = "electronicFenceTextLayer"
const val WET_AREA_SOURCE = "wetAreaSource"
const val WET_AREA_LAYER = "wetAreaLayer"
const val WET_AREA_TEXT_LAYER = "wetAreaTextLayer"
const val LANE_NODE_SOURCE = "laneNodeSource"
const val LANE_NODE_LAYER = "laneNodeLayer"
const val LANE_NODE_TEXT_LAYER = "laneNodeTextLayer"
const val LANE_SOURCE = "laneSource"
const val LANE_LAYER = "laneLayer"
const val LANE_TEXT_LAYER = "laneTextLayer"
const val RUNNABLE_AREA_SOURCE = "runnableAreaSource"
const val RUNNABLE_AREA_LAYER = "runnableAreaLayer"
const val RUNNABLE_AREA_TEXT_LAYER = "runnableAreaTextLayer"
const val DIGGING_WORK_AREA_SOURCE = "diggingWorkAreaSource"
const val DIGGING_WORK_AREA_LAYER = "diggingWorkAreaLayer"
const val DIGGING_WORK_AREA_TEXT_LAYER = "diggingWorkAreaTextLayer"
const val BARRICADE_SOURCE = "barricadeSource"
const val BARRICADE_LAYER = "barricadeLayer"
const val BARRICADE_TEXT_LAYER = "barricadeTextLayer"
const val STATION_AREA_SOURCE = "stationAreaSource"
const val STATION_AREA_LAYER = "stationAreaLayer"
const val STATION_AREA_TEXT_LAYER = "stationAreaTextLayer"
const val STATIC_OBJECTS_SOURCE = "staticObjectsSource"
const val STATIC_OBJECTS_LAYER = "staticObjectsLayer"
const val STATIC_OBJECTS_TEXT_LAYER = "staticObjectsTextLayer"
const val PARK_SPOT_SOURCE = "parkSpotSource"
const val PARK_SPOT_LAYER = "parkSpotLayer"
const val PARK_SPOT_TEXT_LAYER = "parkSpotTextLayer"
const val LONGITUDE = 119.7622539014
const val LATITUDE = 49.3795031825
const val ZOOM = 16.0
}
class MainViewModelFactory(private val mainRepository: MainRepository) :
ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return MainViewModel(mainRepository) as T
}
}
}
\ No newline at end of file
This diff is collapsed.
...@@ -6,6 +6,7 @@ import android.view.View ...@@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.MaterialDialog
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
...@@ -23,13 +24,18 @@ class CollectFragment : Fragment() { ...@@ -23,13 +24,18 @@ class CollectFragment : Fragment() {
private val binding get() = _binding!! private val binding get() = _binding!!
private lateinit var dialogFaultCause:MaterialDialog
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
_binding = FragmentCollectBinding.inflate(inflater, container, false) _binding = FragmentCollectBinding.inflate(inflater, container, false)
context?:return binding.root context?:return binding.root
initTablayout() initTablayout()
MaterialDialog(context!!).show {
setContentView(R.layout.dialog_fault_cause_select)
}
return binding.root return binding.root
} }
......
...@@ -6,41 +6,56 @@ import android.view.Gravity ...@@ -6,41 +6,56 @@ import android.view.Gravity
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 androidx.fragment.app.Fragment import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.*
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import com.mapbox.geojson.Point
import com.mapbox.maps.CameraOptions
import com.mapbox.maps.MapView import com.mapbox.maps.MapView
import com.mapbox.maps.MapboxMap import com.mapbox.maps.MapboxMap
import com.mapbox.maps.Style import com.mapbox.maps.plugin.annotation.generated.PointAnnotation
import com.mapbox.maps.extension.observable.eventdata.MapLoadingErrorEventData import com.mapbox.maps.plugin.annotation.generated.PointAnnotationManager
import com.mapbox.maps.extension.style.sources.generated.geoJsonSource import com.mapbox.maps.plugin.attribution.attribution
import com.mapbox.maps.extension.style.style import com.mapbox.maps.plugin.compass.compass
import com.mapbox.maps.plugin.Plugin import com.mapbox.maps.plugin.logo.logo
import com.mapbox.maps.plugin.annotation.annotations import com.mapbox.maps.viewannotation.ViewAnnotationManager
import com.mapbox.maps.plugin.annotation.generated.CircleAnnotationOptions
import com.mapbox.maps.plugin.annotation.generated.createCircleAnnotationManager
import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadErrorListener
import com.mapbox.maps.plugin.logo.LogoPlugin
import com.waytous.anticollision.R import com.waytous.anticollision.R
import com.waytous.anticollision.databinding.FragmentHomeBinding import com.waytous.anticollision.databinding.FragmentHomeBinding
import com.waytous.anticollision.repository.MainRepository
import com.waytous.anticollision.ui.BaseFragment
import com.waytous.anticollision.ui.MainViewModel
import com.waytous.anticollision.ui.view.MoreFeaturesPopup import com.waytous.anticollision.ui.view.MoreFeaturesPopup
import com.waytous.anticollision.ui.view.WorkStatusEditPopup import com.waytous.anticollision.ui.view.WorkStatusEditPopup
import com.waytous.anticollision.utils.setTextSize import com.waytous.anticollision.utils.setTextSize
import kotlinx.coroutines.launch
class HomeFragment : Fragment() { class HomeFragment : BaseFragment() {
private var _binding: FragmentHomeBinding? = null private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private lateinit var mapView: MapView
private lateinit var mapBox:MapboxMap private lateinit var mapBox:MapboxMap
private lateinit var viewAnnotationManager: ViewAnnotationManager
private lateinit var pointAnnotationManager: PointAnnotationManager
private lateinit var pointAnnotation: PointAnnotation
private lateinit var moreFeaturesPopup: MoreFeaturesPopup private lateinit var moreFeaturesPopup: MoreFeaturesPopup
private lateinit var workStatusEditPopup: WorkStatusEditPopup private lateinit var workStatusEditPopup: WorkStatusEditPopup
private val mapModel: MainViewModel by viewModels{
MainViewModel.MainViewModelFactory(MainRepository(requireContext()))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
...@@ -48,7 +63,6 @@ class HomeFragment : Fragment() { ...@@ -48,7 +63,6 @@ class HomeFragment : Fragment() {
): View { ): View {
val homeViewModel = val homeViewModel =
ViewModelProvider(this)[HomeViewModel::class.java] ViewModelProvider(this)[HomeViewModel::class.java]
_binding = FragmentHomeBinding.inflate(inflater, container, false) _binding = FragmentHomeBinding.inflate(inflater, container, false)
context?:return binding.root context?:return binding.root
workStatusEditPopup = WorkStatusEditPopup(context).also { workStatusEditPopup = WorkStatusEditPopup(context).also {
...@@ -62,27 +76,13 @@ class HomeFragment : Fragment() { ...@@ -62,27 +76,13 @@ class HomeFragment : Fragment() {
it.maskOffsetY = 20 it.maskOffsetY = 20
it.setBackgroundColor(R.color.color_99000000) it.setBackgroundColor(R.color.color_99000000)
} }
val mapView: MapView = binding.defaultMapLayout.mapView mapView = binding.root.findViewById<MapView?>(R.id.mapView).also {
val logoPlugin = mapView.getPlugin<LogoPlugin>(Plugin.MAPBOX_LOGO_PLUGIN_ID) it.logo.enabled = false
logoPlugin?.enabled = false it.compass.enabled = false
mapBox = mapView.getMapboxMap().also { it.attribution.enabled = false
logoPlugin?.enabled = false
} }
mapBox.setCamera( viewAnnotationManager = mapView.viewAnnotationManager
CameraOptions.Builder() updateMapBox(mapView)
.center(
Point.fromLngLat(
LATITUDE,
LONGITUDE
))
.zoom(ZOOM).build()
)
mapView.getMapboxMap().addOnMapLoadErrorListener(object :OnMapLoadErrorListener{
override fun onMapLoadError(eventData: MapLoadingErrorEventData) {
LogUtils.e("OnMapLoadErrorListener:${eventData.message}")
}
})
mapView.addRendererSetupErrorListener { mapView.addRendererSetupErrorListener {
error -> LogUtils.e("RendererSetupErrorListener:${error}") error -> LogUtils.e("RendererSetupErrorListener:${error}")
} }
...@@ -94,9 +94,27 @@ class HomeFragment : Fragment() { ...@@ -94,9 +94,27 @@ class HomeFragment : Fragment() {
binding.defaultToggleMore.setOnClickListener { binding.defaultToggleMore.setOnClickListener {
moreFeaturesPopup.showPopupWindow(binding.defaultToggleMore) moreFeaturesPopup.showPopupWindow(binding.defaultToggleMore)
} }
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED){
mapModel.obstaclesSource().collect{binding.defaultMapLayout.addObstaclesSource(it)}
mapModel.runnableAreaSource().collect{binding.defaultMapLayout.addRunnableAreaSource(it)}
mapModel.laneSource().collect{binding.defaultMapLayout.addLaneSource(it)}
mapModel.laneNodeSource().collect{binding.defaultMapLayout.addLaneNodeSource(it)}
mapModel.staticObjectsSource().collect{binding.defaultMapLayout.addStaticObjectsSource(it)}
mapModel.diggingWorkAreaSource().collect{binding.defaultMapLayout.addDiggingWorkAreaSource(it)}
mapModel.barricadeSource().collect{binding.defaultMapLayout.addBarricadeSource(it)}
mapModel.stationAreaSource().collect{binding.defaultMapLayout.addStationAreaSource(it)}
mapModel.parkSpotSource().collect{binding.defaultMapLayout.addParkSpotSource(it)}
mapModel.electronicFenceSource().collect{binding.defaultMapLayout.addElectronicFenceSource(it)}
mapModel.wetAreaSource().collect{binding.defaultMapLayout.addWetAreaSource(it)}
mapModel.dumpAreaSource().collect{binding.defaultMapLayout.addDumpAreaSource(it)}
}
}
return binding.root return binding.root
} }
private fun setTodayCarriedNum(num:Int){ private fun setTodayCarriedNum(num:Int){
val templateString = getString(R.string.today_carried_text, num) val templateString = getString(R.string.today_carried_text, num)
val spannableString = SpannableString(templateString) val spannableString = SpannableString(templateString)
...@@ -114,10 +132,4 @@ class HomeFragment : Fragment() { ...@@ -114,10 +132,4 @@ class HomeFragment : Fragment() {
_binding = null _binding = null
} }
companion object {
private const val GEOJSON_SOURCE_ID = "tile"
private const val LATITUDE = 108.926593
private const val LONGITUDE = 34.213389
private const val ZOOM = 14.0
}
} }
\ No newline at end of file
...@@ -15,6 +15,8 @@ import androidx.core.content.ContextCompat ...@@ -15,6 +15,8 @@ import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.DrawableCompat import androidx.core.graphics.drawable.DrawableCompat
const val databaseName = "anti_collision.db"
/** /**
* 连接状态 * 连接状态
* */ * */
......
...@@ -2,7 +2,7 @@ package com.waytous.anticollision.utils ...@@ -2,7 +2,7 @@ package com.waytous.anticollision.utils
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import com.waytous.anticollision.MyApp import com.waytous.anticollision.AntiCollisionApp
import kotlin.properties.ReadWriteProperty import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
...@@ -10,7 +10,7 @@ class PreferenceDelegate<T>(private val name: String, private val default: T, pr ...@@ -10,7 +10,7 @@ class PreferenceDelegate<T>(private val name: String, private val default: T, pr
: ReadWriteProperty<Any?, T> { : ReadWriteProperty<Any?, T> {
private val prefs: SharedPreferences = private val prefs: SharedPreferences =
MyApp.instance().applicationContext.getSharedPreferences(prefName, Context.MODE_PRIVATE) AntiCollisionApp.instance().applicationContext.getSharedPreferences(prefName, Context.MODE_PRIVATE)
@Synchronized @Synchronized
override fun getValue(thisRef: Any?, property: KProperty<*>): T { override fun getValue(thisRef: Any?, property: KProperty<*>): T {
......
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="67dp"
android:height="6dp"
android:viewportWidth="67"
android:viewportHeight="6">
<path
android:pathData="M67,6l-67,0l0,-6l2,0l0,4l63,0l0,-4l2,0l0,6z"
android:fillColor="#dcdcdc"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="67dp"
android:height="6dp"
android:viewportWidth="67"
android:viewportHeight="6">
<path
android:pathData="M67,6l-67,0l0,-6l2,0l0,4l63,0l0,-4l2,0l0,6z"
android:fillColor="#2c2c2c"/>
</vector>
...@@ -15,10 +15,11 @@ ...@@ -15,10 +15,11 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/> app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView <CheckedTextView
android:id="@+id/itemFaultEngine" android:id="@+id/itemFaultEngine"
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:text="@string/fault_cause_engine" android:text="@string/fault_cause_engine"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_engine" android:drawableTop="@drawable/background_fault_cause_item_engine"
android:layout_marginTop="77dp" android:layout_marginTop="77dp"
android:layout_marginStart="44dp" android:layout_marginStart="44dp"
...@@ -29,6 +30,7 @@ ...@@ -29,6 +30,7 @@
android:id="@+id/itemFaultMechanical" android:id="@+id/itemFaultMechanical"
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:text="@string/fault_cause_mechanical" android:text="@string/fault_cause_mechanical"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_mechanical" android:drawableTop="@drawable/background_fault_cause_item_mechanical"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
app:layout_constraintTop_toTopOf="@id/itemFaultEngine" app:layout_constraintTop_toTopOf="@id/itemFaultEngine"
...@@ -39,6 +41,7 @@ ...@@ -39,6 +41,7 @@
android:id="@+id/itemFaultHydraulicSystem" android:id="@+id/itemFaultHydraulicSystem"
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:text="@string/fault_cause_hydraulic_system" android:text="@string/fault_cause_hydraulic_system"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_hydraulic_system" android:drawableTop="@drawable/background_fault_cause_item_hydraulic_system"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
app:layout_constraintTop_toTopOf="@id/itemFaultMechanical" app:layout_constraintTop_toTopOf="@id/itemFaultMechanical"
...@@ -51,6 +54,7 @@ ...@@ -51,6 +54,7 @@
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:layout_marginEnd="44dp" android:layout_marginEnd="44dp"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_electrical" android:drawableTop="@drawable/background_fault_cause_item_electrical"
android:text="@string/fault_cause_electrical" android:text="@string/fault_cause_electrical"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
...@@ -61,6 +65,7 @@ ...@@ -61,6 +65,7 @@
android:id="@+id/itemFaultEdgeReduction" android:id="@+id/itemFaultEdgeReduction"
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:layout_marginTop="28dp" android:layout_marginTop="28dp"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_edge_reduction" android:drawableTop="@drawable/background_fault_cause_item_edge_reduction"
android:text="@string/fault_cause_edge_reduction" android:text="@string/fault_cause_edge_reduction"
app:layout_constraintEnd_toEndOf="@+id/itemFaultEngine" app:layout_constraintEnd_toEndOf="@+id/itemFaultEngine"
...@@ -70,6 +75,7 @@ ...@@ -70,6 +75,7 @@
android:id="@+id/itemFaultTire" android:id="@+id/itemFaultTire"
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_tire" android:drawableTop="@drawable/background_fault_cause_item_tire"
android:text="@string/fault_cause_tire" android:text="@string/fault_cause_tire"
app:layout_constraintTop_toTopOf="@id/itemFaultEdgeReduction" app:layout_constraintTop_toTopOf="@id/itemFaultEdgeReduction"
...@@ -79,6 +85,7 @@ ...@@ -79,6 +85,7 @@
android:id="@+id/itemFaultEquipmentMaintenance" android:id="@+id/itemFaultEquipmentMaintenance"
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_equipment_maintenance" android:drawableTop="@drawable/background_fault_cause_item_equipment_maintenance"
android:text="@string/fault_cause_equipment_maintenance" android:text="@string/fault_cause_equipment_maintenance"
app:layout_constraintTop_toTopOf="@id/itemFaultTire" app:layout_constraintTop_toTopOf="@id/itemFaultTire"
...@@ -88,6 +95,7 @@ ...@@ -88,6 +95,7 @@
android:id="@+id/itemFaultOtherInputs" android:id="@+id/itemFaultOtherInputs"
style="@style/FaultCauseTextStyle" style="@style/FaultCauseTextStyle"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:background="@drawable/background_fault_cause_item"
android:drawableTop="@drawable/background_fault_cause_item_other_inputs" android:drawableTop="@drawable/background_fault_cause_item_other_inputs"
android:text="@string/fault_cause_other_inputs" android:text="@string/fault_cause_other_inputs"
app:layout_constraintTop_toTopOf="@id/itemFaultEquipmentMaintenance" app:layout_constraintTop_toTopOf="@id/itemFaultEquipmentMaintenance"
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.BaseFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
\ No newline at end of file
...@@ -282,9 +282,8 @@ ...@@ -282,9 +282,8 @@
app:layout_constraintTop_toTopOf="@id/defaultToggleMore" app:layout_constraintTop_toTopOf="@id/defaultToggleMore"
app:layout_constraintEnd_toEndOf="@id/defaultMapLayout" /> app:layout_constraintEnd_toEndOf="@id/defaultMapLayout" />
<include <com.waytous.anticollision.ui.MapBoxLayout
android:id="@+id/defaultMapLayout" android:id="@+id/defaultMapLayout"
layout="@layout/layout_map_box"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
......
This diff is collapsed.
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mobile_navigation" android:id="@+id/mobile_navigation"
app:startDestination="@id/navigation_video_Home"> app:startDestination="@id/navigation_home">
<fragment <fragment
android:id="@+id/navigation_home" android:id="@+id/navigation_home"
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
<color name="white">#FFFFFFFF</color> <color name="white">#FFFFFFFF</color>
<color name="half_white">#80FFFFFF</color> <color name="half_white">#80FFFFFF</color>
<color name="color_ff333333">#ff333333</color> <color name="color_ff333333">#ff333333</color>
<color name="color_ff666666">#ff666666</color>
<color name="color_80333333">#80333333</color> <color name="color_80333333">#80333333</color>
<color name="color_0052D8">#ff0052d8</color> <color name="color_0052D8">#ff0052d8</color>
<color name="status_bg_color">#ebefefef</color> <color name="status_bg_color">#ebefefef</color>
...@@ -31,4 +32,5 @@ ...@@ -31,4 +32,5 @@
<color name="color_4d3c3c3c">#4d3c3c3c</color> <color name="color_4d3c3c3c">#4d3c3c3c</color>
<color name="color_1a000000">#1a000000</color> <color name="color_1a000000">#1a000000</color>
<color name="color_ff3684F9">#ff3684F9</color> <color name="color_ff3684F9">#ff3684F9</color>
<color name="color_green">#00ff00</color>
</resources> </resources>
\ No newline at end of file
This diff is collapsed.
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
<string name="fault_cause_equipment_maintenance">设备保养</string> <string name="fault_cause_equipment_maintenance">设备保养</string>
<string name="fault_cause_other_inputs">其他录入</string> <string name="fault_cause_other_inputs">其他录入</string>
<string name="pls_input_cause">请输入原因说明</string> <string name="pls_input_cause">请输入原因说明</string>
<string name="collect_data_text">采集状态:%1s 采集点数:%2d 速度:%3dKM/h 当前位置:%4f,%5f 高程:%6fm</string>
<string name="confirm">确定</string> <string name="confirm">确定</string>
<string name="cancel">取消</string> <string name="cancel">取消</string>
......
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins { plugins {
id 'com.android.application' version '7.3.1' apply false id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.3.1' apply false id 'com.android.library' version '7.4.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.20' apply false id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
id 'com.google.dagger.hilt.android' version '2.44' apply false
} }
\ No newline at end of file
...@@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 ...@@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Android operating system, and which are packaged with your app's APK # Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn # https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the # Enables namespacing of each library's R class so that its R class includes only the
......
#Thu Feb 16 11:06:04 CST 2023 #Thu May 04 15:47:53 CST 2023
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment