diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
index 5a55f17..845b57b 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -37,12 +38,14 @@
private lateinit var groupViewModel: ProjectGroupViewModel
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceAdapter: DeviceListAdapter
+ private val context: Context = this@GroupDeviceActivity
private var dataBeans: MutableList = ArrayList()
private var pageIndex = 1
private var isRefresh = false
private var isLoadMore = false
private var order = 0
private var clickedPosition = 0
+ private var isDeleteAll = false
override fun initLayoutView(): Int = R.layout.activity_group_device
@@ -72,7 +75,7 @@
}
1 -> {
AlertControlDialog.Builder()
- .setContext(this@GroupDeviceActivity)
+ .setContext(context)
.setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
.setNegativeButton("容我想想")
@@ -90,11 +93,13 @@
ids.add(it.deviceId.toLong())
}
}
+ isDeleteAll = true
deviceViewModel.deleteDeviceById(ids)
}
}).build().show()
}
+ //TODO 批量删除待完善
}
}
})
@@ -161,11 +166,23 @@
deviceViewModel.deleteResult.observe(this, {
if (it.code == 200) {
- dataBeans.removeAt(clickedPosition)
- deviceAdapter.notifyItemRemoved(clickedPosition)
- deviceAdapter.notifyItemRangeChanged(
- clickedPosition, dataBeans.size - clickedPosition
- )
+ if (isDeleteAll) {
+ dataBeans.removeAll(dataBeans)
+ deviceAdapter.notifyItemMoved(0, dataBeans.size)
+ deviceAdapter.notifyItemRangeChanged(0, dataBeans.size)
+ } else {
+ dataBeans.removeAt(clickedPosition)
+ deviceAdapter.notifyItemRemoved(clickedPosition)
+ deviceAdapter.notifyItemRangeChanged(
+ clickedPosition, dataBeans.size - clickedPosition
+ )
+ }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("这里什么都没有") {
+ pageIndex = 1
+ obtainDeviceListByPage()
+ }
+ }
}
})
}
@@ -203,7 +220,7 @@
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看设备详情".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看设备详情".show(context)
return
}
navigatePageTo(
@@ -213,7 +230,7 @@
override fun onHistoryClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看历史数据".show(context)
return
}
navigatePageTo(
@@ -236,9 +253,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
@@ -277,9 +295,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
}).build().show()
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
index 5a55f17..845b57b 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -37,12 +38,14 @@
private lateinit var groupViewModel: ProjectGroupViewModel
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceAdapter: DeviceListAdapter
+ private val context: Context = this@GroupDeviceActivity
private var dataBeans: MutableList = ArrayList()
private var pageIndex = 1
private var isRefresh = false
private var isLoadMore = false
private var order = 0
private var clickedPosition = 0
+ private var isDeleteAll = false
override fun initLayoutView(): Int = R.layout.activity_group_device
@@ -72,7 +75,7 @@
}
1 -> {
AlertControlDialog.Builder()
- .setContext(this@GroupDeviceActivity)
+ .setContext(context)
.setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
.setNegativeButton("容我想想")
@@ -90,11 +93,13 @@
ids.add(it.deviceId.toLong())
}
}
+ isDeleteAll = true
deviceViewModel.deleteDeviceById(ids)
}
}).build().show()
}
+ //TODO 批量删除待完善
}
}
})
@@ -161,11 +166,23 @@
deviceViewModel.deleteResult.observe(this, {
if (it.code == 200) {
- dataBeans.removeAt(clickedPosition)
- deviceAdapter.notifyItemRemoved(clickedPosition)
- deviceAdapter.notifyItemRangeChanged(
- clickedPosition, dataBeans.size - clickedPosition
- )
+ if (isDeleteAll) {
+ dataBeans.removeAll(dataBeans)
+ deviceAdapter.notifyItemMoved(0, dataBeans.size)
+ deviceAdapter.notifyItemRangeChanged(0, dataBeans.size)
+ } else {
+ dataBeans.removeAt(clickedPosition)
+ deviceAdapter.notifyItemRemoved(clickedPosition)
+ deviceAdapter.notifyItemRangeChanged(
+ clickedPosition, dataBeans.size - clickedPosition
+ )
+ }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("这里什么都没有") {
+ pageIndex = 1
+ obtainDeviceListByPage()
+ }
+ }
}
})
}
@@ -203,7 +220,7 @@
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看设备详情".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看设备详情".show(context)
return
}
navigatePageTo(
@@ -213,7 +230,7 @@
override fun onHistoryClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看历史数据".show(context)
return
}
navigatePageTo(
@@ -236,9 +253,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
@@ -277,9 +295,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
}).build().show()
diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
index 7a6dc0e..c717fcd 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -58,7 +58,7 @@
0 -> {
//本年度
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, "$year-01-01", time.timestampToDate()
+ groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
1 -> {
@@ -71,7 +71,7 @@
else -> ""
}
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, startDate, time.timestampToDate()
+ groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
2 -> {
@@ -80,19 +80,19 @@
groupId,
devCode,
time.timestampToLastMonthDate(),
- time.timestampToDate()
+ time.timestampToCompleteDate()
)
}
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToLastWeekDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToLastWeekDate(), time.timestampToCompleteDate()
)
}
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
5 -> {
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
index 5a55f17..845b57b 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -37,12 +38,14 @@
private lateinit var groupViewModel: ProjectGroupViewModel
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceAdapter: DeviceListAdapter
+ private val context: Context = this@GroupDeviceActivity
private var dataBeans: MutableList = ArrayList()
private var pageIndex = 1
private var isRefresh = false
private var isLoadMore = false
private var order = 0
private var clickedPosition = 0
+ private var isDeleteAll = false
override fun initLayoutView(): Int = R.layout.activity_group_device
@@ -72,7 +75,7 @@
}
1 -> {
AlertControlDialog.Builder()
- .setContext(this@GroupDeviceActivity)
+ .setContext(context)
.setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
.setNegativeButton("容我想想")
@@ -90,11 +93,13 @@
ids.add(it.deviceId.toLong())
}
}
+ isDeleteAll = true
deviceViewModel.deleteDeviceById(ids)
}
}).build().show()
}
+ //TODO 批量删除待完善
}
}
})
@@ -161,11 +166,23 @@
deviceViewModel.deleteResult.observe(this, {
if (it.code == 200) {
- dataBeans.removeAt(clickedPosition)
- deviceAdapter.notifyItemRemoved(clickedPosition)
- deviceAdapter.notifyItemRangeChanged(
- clickedPosition, dataBeans.size - clickedPosition
- )
+ if (isDeleteAll) {
+ dataBeans.removeAll(dataBeans)
+ deviceAdapter.notifyItemMoved(0, dataBeans.size)
+ deviceAdapter.notifyItemRangeChanged(0, dataBeans.size)
+ } else {
+ dataBeans.removeAt(clickedPosition)
+ deviceAdapter.notifyItemRemoved(clickedPosition)
+ deviceAdapter.notifyItemRangeChanged(
+ clickedPosition, dataBeans.size - clickedPosition
+ )
+ }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("这里什么都没有") {
+ pageIndex = 1
+ obtainDeviceListByPage()
+ }
+ }
}
})
}
@@ -203,7 +220,7 @@
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看设备详情".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看设备详情".show(context)
return
}
navigatePageTo(
@@ -213,7 +230,7 @@
override fun onHistoryClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看历史数据".show(context)
return
}
navigatePageTo(
@@ -236,9 +253,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
@@ -277,9 +295,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
}).build().show()
diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
index 7a6dc0e..c717fcd 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -58,7 +58,7 @@
0 -> {
//本年度
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, "$year-01-01", time.timestampToDate()
+ groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
1 -> {
@@ -71,7 +71,7 @@
else -> ""
}
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, startDate, time.timestampToDate()
+ groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
2 -> {
@@ -80,19 +80,19 @@
groupId,
devCode,
time.timestampToLastMonthDate(),
- time.timestampToDate()
+ time.timestampToCompleteDate()
)
}
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToLastWeekDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToLastWeekDate(), time.timestampToCompleteDate()
)
}
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
5 -> {
diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
new file mode 100644
index 0000000..11830bc
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
@@ -0,0 +1,154 @@
+package com.casic.smarttube.view
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.content.Intent
+import android.graphics.Color
+import android.location.Location
+import android.os.Bundle
+import android.util.Log
+import android.view.animation.LinearInterpolator
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.Marker
+import com.amap.api.maps.model.MarkerOptions
+import com.amap.api.maps.model.MyLocationStyle
+import com.amap.api.maps.model.animation.RotateAnimation
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_select_location.*
+
+
+class SelectLocationActivity : KotlinBaseActivity() {
+
+ private val kTag = "SelectLocationActivity"
+ private lateinit var aMap: AMap
+ private lateinit var location: Location
+
+ override fun initLayoutView(): Int = R.layout.activity_select_location
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "选择设备实际位置"
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val locationStyle = MyLocationStyle()
+ //定位一次,且将视角移动到地图中心点
+ locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE)
+ //设置是否显示定位小蓝点
+ locationStyle.showMyLocation(true)
+ locationStyle.strokeColor(Color.TRANSPARENT)
+ locationStyle.strokeWidth(0f)
+ locationStyle.radiusFillColor(Color.TRANSPARENT)
+ aMap.myLocationStyle = locationStyle
+ aMap.isMyLocationEnabled = true
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ uiSettings.isRotateGesturesEnabled = false//不允许地图旋转
+ uiSettings.isMyLocationButtonEnabled = true//设置默认定位按钮是否显示
+ aMap.moveCamera(CameraUpdateFactory.zoomTo(15f))//改变地图的缩放级别
+ }
+
+ private var markerOption = MarkerOptions()
+
+ private fun markerAnimation() {
+ val animation =
+ RotateAnimation(markerOption.rotateAngle, markerOption.rotateAngle + 180, 0F, 0F, 0F)
+ val duration = 1000L
+ animation.setDuration(duration)
+ animation.setInterpolator(LinearInterpolator())
+
+// marker.setAnimation(animation)
+// marker.startAnimation()
+ }
+
+ private lateinit var animatorSet: AnimatorSet
+ private fun animTranslate() {
+ animatorSet = AnimatorSet()
+ animatorSet.playTogether(
+// ObjectAnimator.ofFloat(ivLocation, "scaleX", 1, 0.5f, 1).setDuration(300),
+// ObjectAnimator.ofFloat(ivLocation, "scaleY", 1, 0.5f, 1).setDuration(300)
+ )
+ animatorSet.start()
+ }
+
+ override fun initEvent() {
+ aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {
+ override fun onCameraChange(p0: CameraPosition?) {
+
+ }
+
+ override fun onCameraChangeFinish(cameraPosition: CameraPosition?) {
+ Log.d(kTag, cameraPosition.toString())
+ animTranslate()
+ }
+ })
+ //marker拖拽
+ aMap.setOnMarkerDragListener(object : AMap.OnMarkerDragListener {
+ override fun onMarkerDragStart(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDrag(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDragEnd(p0: Marker?) {
+ Log.d(kTag, "onMarkerDragEnd: " + p0!!.position.toString())
+ }
+ })
+ //定位之后就会触发此监听获取经纬度信息
+ aMap.setOnMyLocationChangeListener {
+ if (it != null) {
+ location = it
+ Log.d(kTag, "[${location.longitude},${location.latitude}]")
+ }
+ }
+
+ rightOperateView.setOnClickListener {
+ val intent = Intent()
+ intent.putExtra("longitude", location.longitude.toString())
+ intent.putExtra("latitude", location.latitude.toString())
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+
+ /**地图相关*********/
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mapView.onCreate(savedInstanceState)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onDestroy() {
+ mapView.onDestroy()
+ super.onDestroy()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
index 5a55f17..845b57b 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -37,12 +38,14 @@
private lateinit var groupViewModel: ProjectGroupViewModel
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceAdapter: DeviceListAdapter
+ private val context: Context = this@GroupDeviceActivity
private var dataBeans: MutableList = ArrayList()
private var pageIndex = 1
private var isRefresh = false
private var isLoadMore = false
private var order = 0
private var clickedPosition = 0
+ private var isDeleteAll = false
override fun initLayoutView(): Int = R.layout.activity_group_device
@@ -72,7 +75,7 @@
}
1 -> {
AlertControlDialog.Builder()
- .setContext(this@GroupDeviceActivity)
+ .setContext(context)
.setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
.setNegativeButton("容我想想")
@@ -90,11 +93,13 @@
ids.add(it.deviceId.toLong())
}
}
+ isDeleteAll = true
deviceViewModel.deleteDeviceById(ids)
}
}).build().show()
}
+ //TODO 批量删除待完善
}
}
})
@@ -161,11 +166,23 @@
deviceViewModel.deleteResult.observe(this, {
if (it.code == 200) {
- dataBeans.removeAt(clickedPosition)
- deviceAdapter.notifyItemRemoved(clickedPosition)
- deviceAdapter.notifyItemRangeChanged(
- clickedPosition, dataBeans.size - clickedPosition
- )
+ if (isDeleteAll) {
+ dataBeans.removeAll(dataBeans)
+ deviceAdapter.notifyItemMoved(0, dataBeans.size)
+ deviceAdapter.notifyItemRangeChanged(0, dataBeans.size)
+ } else {
+ dataBeans.removeAt(clickedPosition)
+ deviceAdapter.notifyItemRemoved(clickedPosition)
+ deviceAdapter.notifyItemRangeChanged(
+ clickedPosition, dataBeans.size - clickedPosition
+ )
+ }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("这里什么都没有") {
+ pageIndex = 1
+ obtainDeviceListByPage()
+ }
+ }
}
})
}
@@ -203,7 +220,7 @@
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看设备详情".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看设备详情".show(context)
return
}
navigatePageTo(
@@ -213,7 +230,7 @@
override fun onHistoryClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看历史数据".show(context)
return
}
navigatePageTo(
@@ -236,9 +253,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
@@ -277,9 +295,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
}).build().show()
diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
index 7a6dc0e..c717fcd 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -58,7 +58,7 @@
0 -> {
//本年度
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, "$year-01-01", time.timestampToDate()
+ groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
1 -> {
@@ -71,7 +71,7 @@
else -> ""
}
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, startDate, time.timestampToDate()
+ groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
2 -> {
@@ -80,19 +80,19 @@
groupId,
devCode,
time.timestampToLastMonthDate(),
- time.timestampToDate()
+ time.timestampToCompleteDate()
)
}
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToLastWeekDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToLastWeekDate(), time.timestampToCompleteDate()
)
}
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
5 -> {
diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
new file mode 100644
index 0000000..11830bc
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
@@ -0,0 +1,154 @@
+package com.casic.smarttube.view
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.content.Intent
+import android.graphics.Color
+import android.location.Location
+import android.os.Bundle
+import android.util.Log
+import android.view.animation.LinearInterpolator
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.Marker
+import com.amap.api.maps.model.MarkerOptions
+import com.amap.api.maps.model.MyLocationStyle
+import com.amap.api.maps.model.animation.RotateAnimation
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_select_location.*
+
+
+class SelectLocationActivity : KotlinBaseActivity() {
+
+ private val kTag = "SelectLocationActivity"
+ private lateinit var aMap: AMap
+ private lateinit var location: Location
+
+ override fun initLayoutView(): Int = R.layout.activity_select_location
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "选择设备实际位置"
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val locationStyle = MyLocationStyle()
+ //定位一次,且将视角移动到地图中心点
+ locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE)
+ //设置是否显示定位小蓝点
+ locationStyle.showMyLocation(true)
+ locationStyle.strokeColor(Color.TRANSPARENT)
+ locationStyle.strokeWidth(0f)
+ locationStyle.radiusFillColor(Color.TRANSPARENT)
+ aMap.myLocationStyle = locationStyle
+ aMap.isMyLocationEnabled = true
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ uiSettings.isRotateGesturesEnabled = false//不允许地图旋转
+ uiSettings.isMyLocationButtonEnabled = true//设置默认定位按钮是否显示
+ aMap.moveCamera(CameraUpdateFactory.zoomTo(15f))//改变地图的缩放级别
+ }
+
+ private var markerOption = MarkerOptions()
+
+ private fun markerAnimation() {
+ val animation =
+ RotateAnimation(markerOption.rotateAngle, markerOption.rotateAngle + 180, 0F, 0F, 0F)
+ val duration = 1000L
+ animation.setDuration(duration)
+ animation.setInterpolator(LinearInterpolator())
+
+// marker.setAnimation(animation)
+// marker.startAnimation()
+ }
+
+ private lateinit var animatorSet: AnimatorSet
+ private fun animTranslate() {
+ animatorSet = AnimatorSet()
+ animatorSet.playTogether(
+// ObjectAnimator.ofFloat(ivLocation, "scaleX", 1, 0.5f, 1).setDuration(300),
+// ObjectAnimator.ofFloat(ivLocation, "scaleY", 1, 0.5f, 1).setDuration(300)
+ )
+ animatorSet.start()
+ }
+
+ override fun initEvent() {
+ aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {
+ override fun onCameraChange(p0: CameraPosition?) {
+
+ }
+
+ override fun onCameraChangeFinish(cameraPosition: CameraPosition?) {
+ Log.d(kTag, cameraPosition.toString())
+ animTranslate()
+ }
+ })
+ //marker拖拽
+ aMap.setOnMarkerDragListener(object : AMap.OnMarkerDragListener {
+ override fun onMarkerDragStart(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDrag(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDragEnd(p0: Marker?) {
+ Log.d(kTag, "onMarkerDragEnd: " + p0!!.position.toString())
+ }
+ })
+ //定位之后就会触发此监听获取经纬度信息
+ aMap.setOnMyLocationChangeListener {
+ if (it != null) {
+ location = it
+ Log.d(kTag, "[${location.longitude},${location.latitude}]")
+ }
+ }
+
+ rightOperateView.setOnClickListener {
+ val intent = Intent()
+ intent.putExtra("longitude", location.longitude.toString())
+ intent.putExtra("latitude", location.latitude.toString())
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+
+ /**地图相关*********/
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mapView.onCreate(savedInstanceState)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onDestroy() {
+ mapView.onDestroy()
+ super.onDestroy()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
index 4e47f09..fc2ad5d 100644
--- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
+++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
@@ -119,7 +119,7 @@
val textValue = if (type == Type.ALL) {
millSeconds.timestampToTime()
} else {
- millSeconds.timestampToDate()
+ millSeconds.timestampToCompleteDate()
}
endDateView.setText(textValue)
}.build().show(fragmentManager, "DateSelectDialog")
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
index 5a55f17..845b57b 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -37,12 +38,14 @@
private lateinit var groupViewModel: ProjectGroupViewModel
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceAdapter: DeviceListAdapter
+ private val context: Context = this@GroupDeviceActivity
private var dataBeans: MutableList = ArrayList()
private var pageIndex = 1
private var isRefresh = false
private var isLoadMore = false
private var order = 0
private var clickedPosition = 0
+ private var isDeleteAll = false
override fun initLayoutView(): Int = R.layout.activity_group_device
@@ -72,7 +75,7 @@
}
1 -> {
AlertControlDialog.Builder()
- .setContext(this@GroupDeviceActivity)
+ .setContext(context)
.setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
.setNegativeButton("容我想想")
@@ -90,11 +93,13 @@
ids.add(it.deviceId.toLong())
}
}
+ isDeleteAll = true
deviceViewModel.deleteDeviceById(ids)
}
}).build().show()
}
+ //TODO 批量删除待完善
}
}
})
@@ -161,11 +166,23 @@
deviceViewModel.deleteResult.observe(this, {
if (it.code == 200) {
- dataBeans.removeAt(clickedPosition)
- deviceAdapter.notifyItemRemoved(clickedPosition)
- deviceAdapter.notifyItemRangeChanged(
- clickedPosition, dataBeans.size - clickedPosition
- )
+ if (isDeleteAll) {
+ dataBeans.removeAll(dataBeans)
+ deviceAdapter.notifyItemMoved(0, dataBeans.size)
+ deviceAdapter.notifyItemRangeChanged(0, dataBeans.size)
+ } else {
+ dataBeans.removeAt(clickedPosition)
+ deviceAdapter.notifyItemRemoved(clickedPosition)
+ deviceAdapter.notifyItemRangeChanged(
+ clickedPosition, dataBeans.size - clickedPosition
+ )
+ }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("这里什么都没有") {
+ pageIndex = 1
+ obtainDeviceListByPage()
+ }
+ }
}
})
}
@@ -203,7 +220,7 @@
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看设备详情".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看设备详情".show(context)
return
}
navigatePageTo(
@@ -213,7 +230,7 @@
override fun onHistoryClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看历史数据".show(context)
return
}
navigatePageTo(
@@ -236,9 +253,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
@@ -277,9 +295,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
}).build().show()
diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
index 7a6dc0e..c717fcd 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -58,7 +58,7 @@
0 -> {
//本年度
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, "$year-01-01", time.timestampToDate()
+ groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
1 -> {
@@ -71,7 +71,7 @@
else -> ""
}
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, startDate, time.timestampToDate()
+ groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
2 -> {
@@ -80,19 +80,19 @@
groupId,
devCode,
time.timestampToLastMonthDate(),
- time.timestampToDate()
+ time.timestampToCompleteDate()
)
}
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToLastWeekDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToLastWeekDate(), time.timestampToCompleteDate()
)
}
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
5 -> {
diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
new file mode 100644
index 0000000..11830bc
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
@@ -0,0 +1,154 @@
+package com.casic.smarttube.view
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.content.Intent
+import android.graphics.Color
+import android.location.Location
+import android.os.Bundle
+import android.util.Log
+import android.view.animation.LinearInterpolator
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.Marker
+import com.amap.api.maps.model.MarkerOptions
+import com.amap.api.maps.model.MyLocationStyle
+import com.amap.api.maps.model.animation.RotateAnimation
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_select_location.*
+
+
+class SelectLocationActivity : KotlinBaseActivity() {
+
+ private val kTag = "SelectLocationActivity"
+ private lateinit var aMap: AMap
+ private lateinit var location: Location
+
+ override fun initLayoutView(): Int = R.layout.activity_select_location
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "选择设备实际位置"
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val locationStyle = MyLocationStyle()
+ //定位一次,且将视角移动到地图中心点
+ locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE)
+ //设置是否显示定位小蓝点
+ locationStyle.showMyLocation(true)
+ locationStyle.strokeColor(Color.TRANSPARENT)
+ locationStyle.strokeWidth(0f)
+ locationStyle.radiusFillColor(Color.TRANSPARENT)
+ aMap.myLocationStyle = locationStyle
+ aMap.isMyLocationEnabled = true
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ uiSettings.isRotateGesturesEnabled = false//不允许地图旋转
+ uiSettings.isMyLocationButtonEnabled = true//设置默认定位按钮是否显示
+ aMap.moveCamera(CameraUpdateFactory.zoomTo(15f))//改变地图的缩放级别
+ }
+
+ private var markerOption = MarkerOptions()
+
+ private fun markerAnimation() {
+ val animation =
+ RotateAnimation(markerOption.rotateAngle, markerOption.rotateAngle + 180, 0F, 0F, 0F)
+ val duration = 1000L
+ animation.setDuration(duration)
+ animation.setInterpolator(LinearInterpolator())
+
+// marker.setAnimation(animation)
+// marker.startAnimation()
+ }
+
+ private lateinit var animatorSet: AnimatorSet
+ private fun animTranslate() {
+ animatorSet = AnimatorSet()
+ animatorSet.playTogether(
+// ObjectAnimator.ofFloat(ivLocation, "scaleX", 1, 0.5f, 1).setDuration(300),
+// ObjectAnimator.ofFloat(ivLocation, "scaleY", 1, 0.5f, 1).setDuration(300)
+ )
+ animatorSet.start()
+ }
+
+ override fun initEvent() {
+ aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {
+ override fun onCameraChange(p0: CameraPosition?) {
+
+ }
+
+ override fun onCameraChangeFinish(cameraPosition: CameraPosition?) {
+ Log.d(kTag, cameraPosition.toString())
+ animTranslate()
+ }
+ })
+ //marker拖拽
+ aMap.setOnMarkerDragListener(object : AMap.OnMarkerDragListener {
+ override fun onMarkerDragStart(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDrag(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDragEnd(p0: Marker?) {
+ Log.d(kTag, "onMarkerDragEnd: " + p0!!.position.toString())
+ }
+ })
+ //定位之后就会触发此监听获取经纬度信息
+ aMap.setOnMyLocationChangeListener {
+ if (it != null) {
+ location = it
+ Log.d(kTag, "[${location.longitude},${location.latitude}]")
+ }
+ }
+
+ rightOperateView.setOnClickListener {
+ val intent = Intent()
+ intent.putExtra("longitude", location.longitude.toString())
+ intent.putExtra("latitude", location.latitude.toString())
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+
+ /**地图相关*********/
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mapView.onCreate(savedInstanceState)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onDestroy() {
+ mapView.onDestroy()
+ super.onDestroy()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
index 4e47f09..fc2ad5d 100644
--- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
+++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
@@ -119,7 +119,7 @@
val textValue = if (type == Type.ALL) {
millSeconds.timestampToTime()
} else {
- millSeconds.timestampToDate()
+ millSeconds.timestampToCompleteDate()
}
endDateView.setText(textValue)
}.build().show(fragmentManager, "DateSelectDialog")
diff --git a/app/src/main/res/layout/activity_add_device.xml b/app/src/main/res/layout/activity_add_device.xml
index 3b2aa30..e0b4146 100644
--- a/app/src/main/res/layout/activity_add_device.xml
+++ b/app/src/main/res/layout/activity_add_device.xml
@@ -44,7 +44,7 @@
+ android:src="@drawable/ic_scanner" />
@@ -125,7 +125,7 @@
android:id="@+id/longitudeView"
style="@style/RelativeTextViewStyle"
android:layout_alignParentEnd="true"
- android:hint="请点击右边定位自动获取"
+ android:hint="请点击右边定位获取"
android:textColorHint="@color/hintTextColor" />
@@ -141,7 +141,7 @@
android:id="@+id/latitudeView"
style="@style/RelativeTextViewStyle"
android:layout_alignParentEnd="true"
- android:hint="请点击右边定位自动获取"
+ android:hint="请点击右边定位获取"
android:textColorHint="@color/hintTextColor" />
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
index 5a55f17..845b57b 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -37,12 +38,14 @@
private lateinit var groupViewModel: ProjectGroupViewModel
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceAdapter: DeviceListAdapter
+ private val context: Context = this@GroupDeviceActivity
private var dataBeans: MutableList = ArrayList()
private var pageIndex = 1
private var isRefresh = false
private var isLoadMore = false
private var order = 0
private var clickedPosition = 0
+ private var isDeleteAll = false
override fun initLayoutView(): Int = R.layout.activity_group_device
@@ -72,7 +75,7 @@
}
1 -> {
AlertControlDialog.Builder()
- .setContext(this@GroupDeviceActivity)
+ .setContext(context)
.setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
.setNegativeButton("容我想想")
@@ -90,11 +93,13 @@
ids.add(it.deviceId.toLong())
}
}
+ isDeleteAll = true
deviceViewModel.deleteDeviceById(ids)
}
}).build().show()
}
+ //TODO 批量删除待完善
}
}
})
@@ -161,11 +166,23 @@
deviceViewModel.deleteResult.observe(this, {
if (it.code == 200) {
- dataBeans.removeAt(clickedPosition)
- deviceAdapter.notifyItemRemoved(clickedPosition)
- deviceAdapter.notifyItemRangeChanged(
- clickedPosition, dataBeans.size - clickedPosition
- )
+ if (isDeleteAll) {
+ dataBeans.removeAll(dataBeans)
+ deviceAdapter.notifyItemMoved(0, dataBeans.size)
+ deviceAdapter.notifyItemRangeChanged(0, dataBeans.size)
+ } else {
+ dataBeans.removeAt(clickedPosition)
+ deviceAdapter.notifyItemRemoved(clickedPosition)
+ deviceAdapter.notifyItemRangeChanged(
+ clickedPosition, dataBeans.size - clickedPosition
+ )
+ }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("这里什么都没有") {
+ pageIndex = 1
+ obtainDeviceListByPage()
+ }
+ }
}
})
}
@@ -203,7 +220,7 @@
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看设备详情".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看设备详情".show(context)
return
}
navigatePageTo(
@@ -213,7 +230,7 @@
override fun onHistoryClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看历史数据".show(context)
return
}
navigatePageTo(
@@ -236,9 +253,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
@@ -277,9 +295,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
}).build().show()
diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
index 7a6dc0e..c717fcd 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -58,7 +58,7 @@
0 -> {
//本年度
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, "$year-01-01", time.timestampToDate()
+ groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
1 -> {
@@ -71,7 +71,7 @@
else -> ""
}
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, startDate, time.timestampToDate()
+ groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
2 -> {
@@ -80,19 +80,19 @@
groupId,
devCode,
time.timestampToLastMonthDate(),
- time.timestampToDate()
+ time.timestampToCompleteDate()
)
}
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToLastWeekDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToLastWeekDate(), time.timestampToCompleteDate()
)
}
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
5 -> {
diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
new file mode 100644
index 0000000..11830bc
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
@@ -0,0 +1,154 @@
+package com.casic.smarttube.view
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.content.Intent
+import android.graphics.Color
+import android.location.Location
+import android.os.Bundle
+import android.util.Log
+import android.view.animation.LinearInterpolator
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.Marker
+import com.amap.api.maps.model.MarkerOptions
+import com.amap.api.maps.model.MyLocationStyle
+import com.amap.api.maps.model.animation.RotateAnimation
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_select_location.*
+
+
+class SelectLocationActivity : KotlinBaseActivity() {
+
+ private val kTag = "SelectLocationActivity"
+ private lateinit var aMap: AMap
+ private lateinit var location: Location
+
+ override fun initLayoutView(): Int = R.layout.activity_select_location
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "选择设备实际位置"
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val locationStyle = MyLocationStyle()
+ //定位一次,且将视角移动到地图中心点
+ locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE)
+ //设置是否显示定位小蓝点
+ locationStyle.showMyLocation(true)
+ locationStyle.strokeColor(Color.TRANSPARENT)
+ locationStyle.strokeWidth(0f)
+ locationStyle.radiusFillColor(Color.TRANSPARENT)
+ aMap.myLocationStyle = locationStyle
+ aMap.isMyLocationEnabled = true
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ uiSettings.isRotateGesturesEnabled = false//不允许地图旋转
+ uiSettings.isMyLocationButtonEnabled = true//设置默认定位按钮是否显示
+ aMap.moveCamera(CameraUpdateFactory.zoomTo(15f))//改变地图的缩放级别
+ }
+
+ private var markerOption = MarkerOptions()
+
+ private fun markerAnimation() {
+ val animation =
+ RotateAnimation(markerOption.rotateAngle, markerOption.rotateAngle + 180, 0F, 0F, 0F)
+ val duration = 1000L
+ animation.setDuration(duration)
+ animation.setInterpolator(LinearInterpolator())
+
+// marker.setAnimation(animation)
+// marker.startAnimation()
+ }
+
+ private lateinit var animatorSet: AnimatorSet
+ private fun animTranslate() {
+ animatorSet = AnimatorSet()
+ animatorSet.playTogether(
+// ObjectAnimator.ofFloat(ivLocation, "scaleX", 1, 0.5f, 1).setDuration(300),
+// ObjectAnimator.ofFloat(ivLocation, "scaleY", 1, 0.5f, 1).setDuration(300)
+ )
+ animatorSet.start()
+ }
+
+ override fun initEvent() {
+ aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {
+ override fun onCameraChange(p0: CameraPosition?) {
+
+ }
+
+ override fun onCameraChangeFinish(cameraPosition: CameraPosition?) {
+ Log.d(kTag, cameraPosition.toString())
+ animTranslate()
+ }
+ })
+ //marker拖拽
+ aMap.setOnMarkerDragListener(object : AMap.OnMarkerDragListener {
+ override fun onMarkerDragStart(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDrag(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDragEnd(p0: Marker?) {
+ Log.d(kTag, "onMarkerDragEnd: " + p0!!.position.toString())
+ }
+ })
+ //定位之后就会触发此监听获取经纬度信息
+ aMap.setOnMyLocationChangeListener {
+ if (it != null) {
+ location = it
+ Log.d(kTag, "[${location.longitude},${location.latitude}]")
+ }
+ }
+
+ rightOperateView.setOnClickListener {
+ val intent = Intent()
+ intent.putExtra("longitude", location.longitude.toString())
+ intent.putExtra("latitude", location.latitude.toString())
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+
+ /**地图相关*********/
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mapView.onCreate(savedInstanceState)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onDestroy() {
+ mapView.onDestroy()
+ super.onDestroy()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
index 4e47f09..fc2ad5d 100644
--- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
+++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
@@ -119,7 +119,7 @@
val textValue = if (type == Type.ALL) {
millSeconds.timestampToTime()
} else {
- millSeconds.timestampToDate()
+ millSeconds.timestampToCompleteDate()
}
endDateView.setText(textValue)
}.build().show(fragmentManager, "DateSelectDialog")
diff --git a/app/src/main/res/layout/activity_add_device.xml b/app/src/main/res/layout/activity_add_device.xml
index 3b2aa30..e0b4146 100644
--- a/app/src/main/res/layout/activity_add_device.xml
+++ b/app/src/main/res/layout/activity_add_device.xml
@@ -44,7 +44,7 @@
+ android:src="@drawable/ic_scanner" />
@@ -125,7 +125,7 @@
android:id="@+id/longitudeView"
style="@style/RelativeTextViewStyle"
android:layout_alignParentEnd="true"
- android:hint="请点击右边定位自动获取"
+ android:hint="请点击右边定位获取"
android:textColorHint="@color/hintTextColor" />
@@ -141,7 +141,7 @@
android:id="@+id/latitudeView"
style="@style/RelativeTextViewStyle"
android:layout_alignParentEnd="true"
- android:hint="请点击右边定位自动获取"
+ android:hint="请点击右边定位获取"
android:textColorHint="@color/hintTextColor" />
diff --git a/app/src/main/res/layout/activity_select_location.xml b/app/src/main/res/layout/activity_select_location.xml
new file mode 100644
index 0000000..965b297
--- /dev/null
+++ b/app/src/main/res/layout/activity_select_location.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 4edb89e..0313bd0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,13 +69,13 @@
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
implementation 'com.qmuiteam:arch:0.3.1'
//MVVM+LiveData
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//Kotlin协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
@@ -97,7 +97,7 @@
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.google.code.gson:gson:2.9.0'
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//图表
@@ -106,4 +106,5 @@
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ implementation 'com.github.goyourfly:MultiSelectAdapter:3.8'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78c969d..e447cfa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
index cece989..560bf1a 100644
--- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
+++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt
@@ -106,16 +106,17 @@
pciDataView.text = rowsBean.pci
rsrpDataView.text = rowsBean.rsrp
strengthDataView.text = rowsBean.strength
- installDateView.text = String.format("更新时间:${rowsBean.installDate}")
+ installDateView.text = if (rowsBean.uptime.isNullOrBlank()) {
+ String.format("更新时间:未知")
+ } else {
+ String.format("更新时间:${rowsBean.uptime}")
+ }
-
- if (listener != null) {
- holder.itemView.setOnClickListener {
- listener!!.onClicked(position)
- }
- dataHistoryButton.setOnClickListener {
- listener!!.onHistoryClicked(position)
- }
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ dataHistoryButton.setOnClickListener {
+ listener?.onHistoryClicked(position)
}
}
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
index d8ee265..e006361 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt
@@ -19,7 +19,7 @@
val POPUP_IMAGES = intArrayOf(R.drawable.ic_menu_map, R.drawable.ic_satellite)
val POPUP_TITLES = arrayOf("标准地图", "卫星地图")
val DEVICE_OPERATE_IMAGES = intArrayOf(R.drawable.ic_order, R.drawable.ic_delete_white)
- val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "批量删除")
+ val DEVICE_OPERATE_TITLES = arrayOf("浓度排序", "全部删除")
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
index 372a521..cd5410d 100644
--- a/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/LocationHelper.kt
@@ -16,6 +16,7 @@
locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
locationOption.isNeedAddress = false //设置是否返回地址信息(默认返回地址信息)
//给定位客户端对象设置定位参数
+ locationOption.isOnceLocation = true
locationClient.setLocationOption(locationOption)
locationClient.setLocationListener {
if (it.errorCode == 0) {
diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
index b6b7d69..787b6db 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -8,6 +8,7 @@
import android.text.TextWatcher
import android.util.Log
import android.view.View
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import cn.bertsir.zbar.QrManager
import com.amap.api.location.AMapLocation
@@ -57,6 +58,14 @@
private val realPaths: ArrayList = ArrayList() //真实图片路径
private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
private var selectedImages = ArrayList()
+ private val selectLocationLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data = result.data!!
+ longitudeView.text = data.getStringExtra("longitude")
+ latitudeView.text = data.getStringExtra("latitude")
+ }
+ }
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -162,7 +171,9 @@
}).build().show()
}
+ //TODO 地图选点
locationImageView.setOnClickListener {
+// selectLocationLauncher.launch(Intent(this, SelectLocationActivity::class.java))
LoadingDialogHub.show(this, "定位中,请稍后...")
LocationHelper.obtainCurrentLocation(this,
object : LocationHelper.ILocationListener {
@@ -338,10 +349,10 @@
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
- val sum = (result.size * 500).toLong()
- object : CountDownTimer(sum, 500) {
+ val sum = (result.size * 1000).toLong()
+ object : CountDownTimer(sum, 1000) {
override fun onTick(millisUntilFinished: Long) {
- val i = millisUntilFinished / 500
+ val i = millisUntilFinished / 1000
val message = weakReferenceHandler.obtainMessage()
message.obj = result[i.toInt()]
message.what = 2022062501
diff --git a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
index 5a55f17..845b57b 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -37,12 +38,14 @@
private lateinit var groupViewModel: ProjectGroupViewModel
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceAdapter: DeviceListAdapter
+ private val context: Context = this@GroupDeviceActivity
private var dataBeans: MutableList = ArrayList()
private var pageIndex = 1
private var isRefresh = false
private var isLoadMore = false
private var order = 0
private var clickedPosition = 0
+ private var isDeleteAll = false
override fun initLayoutView(): Int = R.layout.activity_group_device
@@ -72,7 +75,7 @@
}
1 -> {
AlertControlDialog.Builder()
- .setContext(this@GroupDeviceActivity)
+ .setContext(context)
.setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
.setNegativeButton("容我想想")
@@ -90,11 +93,13 @@
ids.add(it.deviceId.toLong())
}
}
+ isDeleteAll = true
deviceViewModel.deleteDeviceById(ids)
}
}).build().show()
}
+ //TODO 批量删除待完善
}
}
})
@@ -161,11 +166,23 @@
deviceViewModel.deleteResult.observe(this, {
if (it.code == 200) {
- dataBeans.removeAt(clickedPosition)
- deviceAdapter.notifyItemRemoved(clickedPosition)
- deviceAdapter.notifyItemRangeChanged(
- clickedPosition, dataBeans.size - clickedPosition
- )
+ if (isDeleteAll) {
+ dataBeans.removeAll(dataBeans)
+ deviceAdapter.notifyItemMoved(0, dataBeans.size)
+ deviceAdapter.notifyItemRangeChanged(0, dataBeans.size)
+ } else {
+ dataBeans.removeAt(clickedPosition)
+ deviceAdapter.notifyItemRemoved(clickedPosition)
+ deviceAdapter.notifyItemRangeChanged(
+ clickedPosition, dataBeans.size - clickedPosition
+ )
+ }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("这里什么都没有") {
+ pageIndex = 1
+ obtainDeviceListByPage()
+ }
+ }
}
})
}
@@ -203,7 +220,7 @@
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看设备详情".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看设备详情".show(context)
return
}
navigatePageTo(
@@ -213,7 +230,7 @@
override fun onHistoryClicked(position: Int) {
if (dataBeans[position].devcode.isNullOrBlank()) {
- "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
+ "设备编号为空,无法查看历史数据".show(context)
return
}
navigatePageTo(
@@ -236,9 +253,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
@@ -277,9 +295,10 @@
//删除数据库里对应的数据
val deviceId = dataBeans[clickedPosition].deviceId
if (deviceId.isNullOrBlank()) {
- "管盯ID错误,不可删除,请检查数据源".show(this@GroupDeviceActivity)
+ "管盯ID错误,不可删除,请检查数据源".show(context)
return
}
+ isDeleteAll = false
deviceViewModel.deleteDeviceById(arrayListOf(deviceId.toLong()))
}
}).build().show()
diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
index 7a6dc0e..c717fcd 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -58,7 +58,7 @@
0 -> {
//本年度
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, "$year-01-01", time.timestampToDate()
+ groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
1 -> {
@@ -71,7 +71,7 @@
else -> ""
}
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, startDate, time.timestampToDate()
+ groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
2 -> {
@@ -80,19 +80,19 @@
groupId,
devCode,
time.timestampToLastMonthDate(),
- time.timestampToDate()
+ time.timestampToCompleteDate()
)
}
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToLastWeekDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToLastWeekDate(), time.timestampToCompleteDate()
)
}
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
- groupId, devCode, time.timestampToDate(), time.timestampToDate()
+ groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
5 -> {
diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
new file mode 100644
index 0000000..11830bc
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt
@@ -0,0 +1,154 @@
+package com.casic.smarttube.view
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.content.Intent
+import android.graphics.Color
+import android.location.Location
+import android.os.Bundle
+import android.util.Log
+import android.view.animation.LinearInterpolator
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.Marker
+import com.amap.api.maps.model.MarkerOptions
+import com.amap.api.maps.model.MyLocationStyle
+import com.amap.api.maps.model.animation.RotateAnimation
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_select_location.*
+
+
+class SelectLocationActivity : KotlinBaseActivity() {
+
+ private val kTag = "SelectLocationActivity"
+ private lateinit var aMap: AMap
+ private lateinit var location: Location
+
+ override fun initLayoutView(): Int = R.layout.activity_select_location
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "选择设备实际位置"
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val locationStyle = MyLocationStyle()
+ //定位一次,且将视角移动到地图中心点
+ locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE)
+ //设置是否显示定位小蓝点
+ locationStyle.showMyLocation(true)
+ locationStyle.strokeColor(Color.TRANSPARENT)
+ locationStyle.strokeWidth(0f)
+ locationStyle.radiusFillColor(Color.TRANSPARENT)
+ aMap.myLocationStyle = locationStyle
+ aMap.isMyLocationEnabled = true
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ uiSettings.isRotateGesturesEnabled = false//不允许地图旋转
+ uiSettings.isMyLocationButtonEnabled = true//设置默认定位按钮是否显示
+ aMap.moveCamera(CameraUpdateFactory.zoomTo(15f))//改变地图的缩放级别
+ }
+
+ private var markerOption = MarkerOptions()
+
+ private fun markerAnimation() {
+ val animation =
+ RotateAnimation(markerOption.rotateAngle, markerOption.rotateAngle + 180, 0F, 0F, 0F)
+ val duration = 1000L
+ animation.setDuration(duration)
+ animation.setInterpolator(LinearInterpolator())
+
+// marker.setAnimation(animation)
+// marker.startAnimation()
+ }
+
+ private lateinit var animatorSet: AnimatorSet
+ private fun animTranslate() {
+ animatorSet = AnimatorSet()
+ animatorSet.playTogether(
+// ObjectAnimator.ofFloat(ivLocation, "scaleX", 1, 0.5f, 1).setDuration(300),
+// ObjectAnimator.ofFloat(ivLocation, "scaleY", 1, 0.5f, 1).setDuration(300)
+ )
+ animatorSet.start()
+ }
+
+ override fun initEvent() {
+ aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {
+ override fun onCameraChange(p0: CameraPosition?) {
+
+ }
+
+ override fun onCameraChangeFinish(cameraPosition: CameraPosition?) {
+ Log.d(kTag, cameraPosition.toString())
+ animTranslate()
+ }
+ })
+ //marker拖拽
+ aMap.setOnMarkerDragListener(object : AMap.OnMarkerDragListener {
+ override fun onMarkerDragStart(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDrag(p0: Marker?) {
+
+ }
+
+ override fun onMarkerDragEnd(p0: Marker?) {
+ Log.d(kTag, "onMarkerDragEnd: " + p0!!.position.toString())
+ }
+ })
+ //定位之后就会触发此监听获取经纬度信息
+ aMap.setOnMyLocationChangeListener {
+ if (it != null) {
+ location = it
+ Log.d(kTag, "[${location.longitude},${location.latitude}]")
+ }
+ }
+
+ rightOperateView.setOnClickListener {
+ val intent = Intent()
+ intent.putExtra("longitude", location.longitude.toString())
+ intent.putExtra("latitude", location.latitude.toString())
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+
+ /**地图相关*********/
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mapView.onCreate(savedInstanceState)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onDestroy() {
+ mapView.onDestroy()
+ super.onDestroy()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
index 4e47f09..fc2ad5d 100644
--- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
+++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt
@@ -119,7 +119,7 @@
val textValue = if (type == Type.ALL) {
millSeconds.timestampToTime()
} else {
- millSeconds.timestampToDate()
+ millSeconds.timestampToCompleteDate()
}
endDateView.setText(textValue)
}.build().show(fragmentManager, "DateSelectDialog")
diff --git a/app/src/main/res/layout/activity_add_device.xml b/app/src/main/res/layout/activity_add_device.xml
index 3b2aa30..e0b4146 100644
--- a/app/src/main/res/layout/activity_add_device.xml
+++ b/app/src/main/res/layout/activity_add_device.xml
@@ -44,7 +44,7 @@
+ android:src="@drawable/ic_scanner" />
@@ -125,7 +125,7 @@
android:id="@+id/longitudeView"
style="@style/RelativeTextViewStyle"
android:layout_alignParentEnd="true"
- android:hint="请点击右边定位自动获取"
+ android:hint="请点击右边定位获取"
android:textColorHint="@color/hintTextColor" />
@@ -141,7 +141,7 @@
android:id="@+id/latitudeView"
style="@style/RelativeTextViewStyle"
android:layout_alignParentEnd="true"
- android:hint="请点击右边定位自动获取"
+ android:hint="请点击右边定位获取"
android:textColorHint="@color/hintTextColor" />
diff --git a/app/src/main/res/layout/activity_select_location.xml b/app/src/main/res/layout/activity_select_location.xml
new file mode 100644
index 0000000..965b297
--- /dev/null
+++ b/app/src/main/res/layout/activity_select_location.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_device_rv.xml b/app/src/main/res/layout/item_device_rv.xml
index ac1f980..c2c6857 100644
--- a/app/src/main/res/layout/item_device_rv.xml
+++ b/app/src/main/res/layout/item_device_rv.xml
@@ -79,7 +79,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/dp_10"
- android:paddingVertical="@dimen/dp_3"
+ android:paddingVertical="@dimen/dp_5"
android:text="历史数据"
android:textColor="@color/mainThemeColor"
android:textSize="@dimen/sp_12"