diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
index 072953f..f036a78 100644
--- a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.graphics.Color
+import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.model.LatLng
@@ -10,6 +11,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityDeviceDetailBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.toSignalImage
import com.casic.smarttube.model.DeviceDetailModel
@@ -25,51 +27,39 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_device_detail.densityView
-import kotlinx.android.synthetic.main.activity_device_detail.descriptionView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView
-import kotlinx.android.synthetic.main.activity_device_detail.imageGridView
-import kotlinx.android.synthetic.main.activity_device_detail.lastDataView
-import kotlinx.android.synthetic.main.activity_device_detail.leftBackView
-import kotlinx.android.synthetic.main.activity_device_detail.locationView
-import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView
-import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView
-import kotlinx.android.synthetic.main.activity_device_detail.signalImageView
-import kotlinx.android.synthetic.main.activity_device_detail.titleView
-class DeviceDetailActivity : KotlinBaseActivity() {
+class DeviceDetailActivity : KotlinBaseActivity() {
private val kTag = "DeviceDetailActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceModel: DeviceDetailModel.DataModel
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_device_detail
+ override fun initViewBinding(): ActivityDeviceDetailBinding {
+ return ActivityDeviceDetailBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备详情"
- leftBackView.setOnClickListener { finish() }
+ binding.titleView.text = "设备详情"
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
deviceViewModel.obtainDeviceDetail(params[0], params[1])
deviceViewModel.deviceDetailModel.observe(this) {
if (it.code == 200) {
val device = it.data
this.deviceModel = device
- deviceCodeView.text = device.devcode
- deviceNameView.text = device.deviceName
- projectGroupView.text = String.format("项目${device.groupId}")
+ binding.deviceCodeView.text = device.devcode
+ binding.deviceNameView.text = device.deviceName
+ binding.projectGroupView.text = String.format("项目${device.groupId}")
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -81,7 +71,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text = result?.regeocodeAddress?.formatAddress
+ binding.locationView.text = result?.regeocodeAddress?.formatAddress
}
}
@@ -90,12 +80,12 @@
}
})
}
- descriptionView.text = device.descn
+ binding.descriptionView.text = device.descn
if (device.photos.toString().isBlank()) {
- imageGridView.visibility = View.GONE
+ binding.imageGridView.visibility = View.GONE
} else {
- imageGridView.visibility = View.VISIBLE
+ binding.imageGridView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
val imageArray = device.photos.toString().split(",")
@@ -104,10 +94,9 @@
urls.add(path.combineImagePath())
}
}
- val imageAdapter = ReadOnlyImageAdapter(this)
- imageAdapter.setImageList(urls)
- imageGridView.adapter = imageAdapter
- imageGridView.setOnItemClickListener { _, _, position, _ ->
+ val imageAdapter = ReadOnlyImageAdapter(this, urls)
+ binding.imageGridView.adapter = imageAdapter
+ binding.imageGridView.setOnItemClickListener { _, _, position, _ ->
if (urls[position].isEmpty()) {
"图片加载失败,无法查看大图".show(this)
} else {
@@ -119,18 +108,18 @@
val value = device.stregnth.toDouble().toInt()
val level = "$value%"
val ppm = "${value * 500}ppm"
- densityView.text = "$level(相当于$ppm)"
+ binding.densityView.text = "$level(相当于$ppm)"
- lastDataView.text = device.uptime
+ binding.lastDataView.text = device.uptime
if (device.onlineState == "0") {
- deviceStateView.text = "离线"
- deviceStateView.setTextColor(Color.RED)
+ binding.deviceStateView.text = "离线"
+ binding.deviceStateView.setTextColor(Color.RED)
} else {
- deviceStateView.text = "在线"
- deviceStateView.setTextColor(Color.GREEN)
+ binding.deviceStateView.text = "在线"
+ binding.deviceStateView.setTextColor(Color.GREEN)
}
- signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
- deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
+ binding.signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
+ binding.deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
"0%"
} else {
device.cell + "%"
@@ -149,7 +138,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
val lat = deviceModel.latGaode.toString()
val lng = deviceModel.lngGaode.toString()
if (lat.isBlank() || lng.isBlank()) {
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
index 072953f..f036a78 100644
--- a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.graphics.Color
+import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.model.LatLng
@@ -10,6 +11,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityDeviceDetailBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.toSignalImage
import com.casic.smarttube.model.DeviceDetailModel
@@ -25,51 +27,39 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_device_detail.densityView
-import kotlinx.android.synthetic.main.activity_device_detail.descriptionView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView
-import kotlinx.android.synthetic.main.activity_device_detail.imageGridView
-import kotlinx.android.synthetic.main.activity_device_detail.lastDataView
-import kotlinx.android.synthetic.main.activity_device_detail.leftBackView
-import kotlinx.android.synthetic.main.activity_device_detail.locationView
-import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView
-import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView
-import kotlinx.android.synthetic.main.activity_device_detail.signalImageView
-import kotlinx.android.synthetic.main.activity_device_detail.titleView
-class DeviceDetailActivity : KotlinBaseActivity() {
+class DeviceDetailActivity : KotlinBaseActivity() {
private val kTag = "DeviceDetailActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceModel: DeviceDetailModel.DataModel
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_device_detail
+ override fun initViewBinding(): ActivityDeviceDetailBinding {
+ return ActivityDeviceDetailBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备详情"
- leftBackView.setOnClickListener { finish() }
+ binding.titleView.text = "设备详情"
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
deviceViewModel.obtainDeviceDetail(params[0], params[1])
deviceViewModel.deviceDetailModel.observe(this) {
if (it.code == 200) {
val device = it.data
this.deviceModel = device
- deviceCodeView.text = device.devcode
- deviceNameView.text = device.deviceName
- projectGroupView.text = String.format("项目${device.groupId}")
+ binding.deviceCodeView.text = device.devcode
+ binding.deviceNameView.text = device.deviceName
+ binding.projectGroupView.text = String.format("项目${device.groupId}")
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -81,7 +71,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text = result?.regeocodeAddress?.formatAddress
+ binding.locationView.text = result?.regeocodeAddress?.formatAddress
}
}
@@ -90,12 +80,12 @@
}
})
}
- descriptionView.text = device.descn
+ binding.descriptionView.text = device.descn
if (device.photos.toString().isBlank()) {
- imageGridView.visibility = View.GONE
+ binding.imageGridView.visibility = View.GONE
} else {
- imageGridView.visibility = View.VISIBLE
+ binding.imageGridView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
val imageArray = device.photos.toString().split(",")
@@ -104,10 +94,9 @@
urls.add(path.combineImagePath())
}
}
- val imageAdapter = ReadOnlyImageAdapter(this)
- imageAdapter.setImageList(urls)
- imageGridView.adapter = imageAdapter
- imageGridView.setOnItemClickListener { _, _, position, _ ->
+ val imageAdapter = ReadOnlyImageAdapter(this, urls)
+ binding.imageGridView.adapter = imageAdapter
+ binding.imageGridView.setOnItemClickListener { _, _, position, _ ->
if (urls[position].isEmpty()) {
"图片加载失败,无法查看大图".show(this)
} else {
@@ -119,18 +108,18 @@
val value = device.stregnth.toDouble().toInt()
val level = "$value%"
val ppm = "${value * 500}ppm"
- densityView.text = "$level(相当于$ppm)"
+ binding.densityView.text = "$level(相当于$ppm)"
- lastDataView.text = device.uptime
+ binding.lastDataView.text = device.uptime
if (device.onlineState == "0") {
- deviceStateView.text = "离线"
- deviceStateView.setTextColor(Color.RED)
+ binding.deviceStateView.text = "离线"
+ binding.deviceStateView.setTextColor(Color.RED)
} else {
- deviceStateView.text = "在线"
- deviceStateView.setTextColor(Color.GREEN)
+ binding.deviceStateView.text = "在线"
+ binding.deviceStateView.setTextColor(Color.GREEN)
}
- signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
- deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
+ binding.signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
+ binding.deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
"0%"
} else {
device.cell + "%"
@@ -149,7 +138,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
val lat = deviceModel.latGaode.toString()
val lng = deviceModel.lngGaode.toString()
if (lat.isBlank() || lng.isBlank()) {
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 0ae8862..ba52ab8 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -8,6 +9,7 @@
import androidx.recyclerview.widget.RecyclerView
import com.casic.smarttube.R
import com.casic.smarttube.adapter.DeviceListAdapter
+import com.casic.smarttube.databinding.ActivityGroupDeviceBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.DeviceListModel
import com.casic.smarttube.utils.LoadingDialogHub
@@ -28,14 +30,8 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction
import com.qmuiteam.qmui.recyclerView.QMUISwipeAction
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceLayout
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceView
-import kotlinx.android.synthetic.main.activity_group_device.leftBackView
-import kotlinx.android.synthetic.main.activity_group_device.rightOptionView
-import kotlinx.android.synthetic.main.activity_group_device.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class GroupDeviceActivity : KotlinBaseActivity() {
+class GroupDeviceActivity : KotlinBaseActivity() {
private lateinit var groupId: String
private lateinit var weakReferenceHandler: WeakReferenceHandler
@@ -51,18 +47,19 @@
private var clickedPosition = 0
private var isDeleteAll = false
- override fun initLayoutView(): Int = R.layout.activity_group_device
+ override fun initViewBinding(): ActivityGroupDeviceBinding {
+ return ActivityGroupDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
- rightOptionView.setOnClickListener {
+ binding.leftBackView.setOnClickListener { finish() }
+ binding.rightOptionView.setOnClickListener {
//改为Popup
val easyPopupWindow = EasyPopupWindow(this)
easyPopupWindow.setPopupMenuItem(
- LocaleConstant.DEVICE_OPERATE_IMAGES,
- LocaleConstant.DEVICE_OPERATE_TITLES
+ LocaleConstant.DEVICE_OPERATE_IMAGES, LocaleConstant.DEVICE_OPERATE_TITLES
)
easyPopupWindow.setOnPopupWindowClickListener(object :
EasyPopupWindow.OnPopupWindowClickListener {
@@ -77,13 +74,11 @@
pageIndex = 1
obtainDeviceListByPage()
}
+
1 -> {
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertControlDialog.Builder().setContext(context).setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
+ .setNegativeButton("容我想想").setPositiveButton("已经想好")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -103,13 +98,11 @@
}
}).build().show()
}
+
2 -> {
- MultiSelectDialog.Builder()
- .setContext(this@GroupDeviceActivity)
- .setTitle("选择设备")
- .setDataSource(dataBeans)
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
+ MultiSelectDialog.Builder().setContext(this@GroupDeviceActivity)
+ .setTitle("选择设备").setDataSource(dataBeans)
+ .setNegativeButton("取消").setPositiveButton("选好了")
.setOnDialogButtonClickListener(object :
MultiSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(selectedModels: MutableList) {
@@ -126,21 +119,20 @@
override fun onCancelClick() {
}
- })
- .build().show()
+ }).build().show()
}
}
}
})
easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(rightOptionView, x, 0)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
}
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupId = intent.getStringExtra(Constant.INTENT_PARAM)!!
- titleView.text = String.format(groupId + "项目设备列表")
+ binding.titleView.text = String.format(groupId + "项目设备列表")
weakReferenceHandler = WeakReferenceHandler(callback)
groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -157,13 +149,13 @@
}
override fun initEvent() {
- groupDeviceLayout.setOnRefreshListener {
+ binding.groupDeviceLayout.setOnRefreshListener {
isRefresh = true
//刷新之后页码重置
pageIndex = 1
obtainDeviceListByPage()
}
- groupDeviceLayout.setOnLoadMoreListener {
+ binding.groupDeviceLayout.setOnLoadMoreListener {
isLoadMore = true
pageIndex++
obtainDeviceListByPage()
@@ -176,7 +168,7 @@
isRefresh -> {
dataBeans.clear()
dataBeans = dataRows!!
- groupDeviceLayout.finishRefresh()
+ binding.groupDeviceLayout.finishRefresh()
isRefresh = false
}
@@ -185,7 +177,7 @@
"到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
- groupDeviceLayout.finishLoadMore()
+ binding.groupDeviceLayout.finishLoadMore()
isLoadMore = false
}
@@ -211,7 +203,7 @@
)
}
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
@@ -230,15 +222,15 @@
deviceAdapter.notifyDataSetChanged()
} else {
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
deviceAdapter = DeviceListAdapter(this, dataBeans)
//绑定侧滑事件
- swipeAction.attachToRecyclerView(groupDeviceView)
+ swipeAction.attachToRecyclerView(binding.groupDeviceView)
val linearLayoutManager = object : LinearLayoutManager(this) {
override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
return RecyclerView.LayoutParams(
@@ -247,8 +239,8 @@
)
}
}
- groupDeviceView.layoutManager = linearLayoutManager
- groupDeviceView.adapter = deviceAdapter
+ binding.groupDeviceView.layoutManager = linearLayoutManager
+ binding.groupDeviceView.adapter = deviceAdapter
deviceAdapter.setOnItemClickListener(object :
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -311,13 +303,9 @@
})
private fun deleteItem(adapterPosition: Int) {
- AlertControlDialog.Builder()
- .setContext(this)
- .setTitle("提示")
- .setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(this).setTitle("提示")
+ .setMessage("删除后将无法恢复,是否继续?").setNegativeButton("容我想想")
+ .setPositiveButton("已经想好").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
index 072953f..f036a78 100644
--- a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.graphics.Color
+import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.model.LatLng
@@ -10,6 +11,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityDeviceDetailBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.toSignalImage
import com.casic.smarttube.model.DeviceDetailModel
@@ -25,51 +27,39 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_device_detail.densityView
-import kotlinx.android.synthetic.main.activity_device_detail.descriptionView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView
-import kotlinx.android.synthetic.main.activity_device_detail.imageGridView
-import kotlinx.android.synthetic.main.activity_device_detail.lastDataView
-import kotlinx.android.synthetic.main.activity_device_detail.leftBackView
-import kotlinx.android.synthetic.main.activity_device_detail.locationView
-import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView
-import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView
-import kotlinx.android.synthetic.main.activity_device_detail.signalImageView
-import kotlinx.android.synthetic.main.activity_device_detail.titleView
-class DeviceDetailActivity : KotlinBaseActivity() {
+class DeviceDetailActivity : KotlinBaseActivity() {
private val kTag = "DeviceDetailActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceModel: DeviceDetailModel.DataModel
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_device_detail
+ override fun initViewBinding(): ActivityDeviceDetailBinding {
+ return ActivityDeviceDetailBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备详情"
- leftBackView.setOnClickListener { finish() }
+ binding.titleView.text = "设备详情"
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
deviceViewModel.obtainDeviceDetail(params[0], params[1])
deviceViewModel.deviceDetailModel.observe(this) {
if (it.code == 200) {
val device = it.data
this.deviceModel = device
- deviceCodeView.text = device.devcode
- deviceNameView.text = device.deviceName
- projectGroupView.text = String.format("项目${device.groupId}")
+ binding.deviceCodeView.text = device.devcode
+ binding.deviceNameView.text = device.deviceName
+ binding.projectGroupView.text = String.format("项目${device.groupId}")
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -81,7 +71,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text = result?.regeocodeAddress?.formatAddress
+ binding.locationView.text = result?.regeocodeAddress?.formatAddress
}
}
@@ -90,12 +80,12 @@
}
})
}
- descriptionView.text = device.descn
+ binding.descriptionView.text = device.descn
if (device.photos.toString().isBlank()) {
- imageGridView.visibility = View.GONE
+ binding.imageGridView.visibility = View.GONE
} else {
- imageGridView.visibility = View.VISIBLE
+ binding.imageGridView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
val imageArray = device.photos.toString().split(",")
@@ -104,10 +94,9 @@
urls.add(path.combineImagePath())
}
}
- val imageAdapter = ReadOnlyImageAdapter(this)
- imageAdapter.setImageList(urls)
- imageGridView.adapter = imageAdapter
- imageGridView.setOnItemClickListener { _, _, position, _ ->
+ val imageAdapter = ReadOnlyImageAdapter(this, urls)
+ binding.imageGridView.adapter = imageAdapter
+ binding.imageGridView.setOnItemClickListener { _, _, position, _ ->
if (urls[position].isEmpty()) {
"图片加载失败,无法查看大图".show(this)
} else {
@@ -119,18 +108,18 @@
val value = device.stregnth.toDouble().toInt()
val level = "$value%"
val ppm = "${value * 500}ppm"
- densityView.text = "$level(相当于$ppm)"
+ binding.densityView.text = "$level(相当于$ppm)"
- lastDataView.text = device.uptime
+ binding.lastDataView.text = device.uptime
if (device.onlineState == "0") {
- deviceStateView.text = "离线"
- deviceStateView.setTextColor(Color.RED)
+ binding.deviceStateView.text = "离线"
+ binding.deviceStateView.setTextColor(Color.RED)
} else {
- deviceStateView.text = "在线"
- deviceStateView.setTextColor(Color.GREEN)
+ binding.deviceStateView.text = "在线"
+ binding.deviceStateView.setTextColor(Color.GREEN)
}
- signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
- deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
+ binding.signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
+ binding.deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
"0%"
} else {
device.cell + "%"
@@ -149,7 +138,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
val lat = deviceModel.latGaode.toString()
val lng = deviceModel.lngGaode.toString()
if (lat.isBlank() || lng.isBlank()) {
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 0ae8862..ba52ab8 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -8,6 +9,7 @@
import androidx.recyclerview.widget.RecyclerView
import com.casic.smarttube.R
import com.casic.smarttube.adapter.DeviceListAdapter
+import com.casic.smarttube.databinding.ActivityGroupDeviceBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.DeviceListModel
import com.casic.smarttube.utils.LoadingDialogHub
@@ -28,14 +30,8 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction
import com.qmuiteam.qmui.recyclerView.QMUISwipeAction
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceLayout
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceView
-import kotlinx.android.synthetic.main.activity_group_device.leftBackView
-import kotlinx.android.synthetic.main.activity_group_device.rightOptionView
-import kotlinx.android.synthetic.main.activity_group_device.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class GroupDeviceActivity : KotlinBaseActivity() {
+class GroupDeviceActivity : KotlinBaseActivity() {
private lateinit var groupId: String
private lateinit var weakReferenceHandler: WeakReferenceHandler
@@ -51,18 +47,19 @@
private var clickedPosition = 0
private var isDeleteAll = false
- override fun initLayoutView(): Int = R.layout.activity_group_device
+ override fun initViewBinding(): ActivityGroupDeviceBinding {
+ return ActivityGroupDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
- rightOptionView.setOnClickListener {
+ binding.leftBackView.setOnClickListener { finish() }
+ binding.rightOptionView.setOnClickListener {
//改为Popup
val easyPopupWindow = EasyPopupWindow(this)
easyPopupWindow.setPopupMenuItem(
- LocaleConstant.DEVICE_OPERATE_IMAGES,
- LocaleConstant.DEVICE_OPERATE_TITLES
+ LocaleConstant.DEVICE_OPERATE_IMAGES, LocaleConstant.DEVICE_OPERATE_TITLES
)
easyPopupWindow.setOnPopupWindowClickListener(object :
EasyPopupWindow.OnPopupWindowClickListener {
@@ -77,13 +74,11 @@
pageIndex = 1
obtainDeviceListByPage()
}
+
1 -> {
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertControlDialog.Builder().setContext(context).setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
+ .setNegativeButton("容我想想").setPositiveButton("已经想好")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -103,13 +98,11 @@
}
}).build().show()
}
+
2 -> {
- MultiSelectDialog.Builder()
- .setContext(this@GroupDeviceActivity)
- .setTitle("选择设备")
- .setDataSource(dataBeans)
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
+ MultiSelectDialog.Builder().setContext(this@GroupDeviceActivity)
+ .setTitle("选择设备").setDataSource(dataBeans)
+ .setNegativeButton("取消").setPositiveButton("选好了")
.setOnDialogButtonClickListener(object :
MultiSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(selectedModels: MutableList) {
@@ -126,21 +119,20 @@
override fun onCancelClick() {
}
- })
- .build().show()
+ }).build().show()
}
}
}
})
easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(rightOptionView, x, 0)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
}
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupId = intent.getStringExtra(Constant.INTENT_PARAM)!!
- titleView.text = String.format(groupId + "项目设备列表")
+ binding.titleView.text = String.format(groupId + "项目设备列表")
weakReferenceHandler = WeakReferenceHandler(callback)
groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -157,13 +149,13 @@
}
override fun initEvent() {
- groupDeviceLayout.setOnRefreshListener {
+ binding.groupDeviceLayout.setOnRefreshListener {
isRefresh = true
//刷新之后页码重置
pageIndex = 1
obtainDeviceListByPage()
}
- groupDeviceLayout.setOnLoadMoreListener {
+ binding.groupDeviceLayout.setOnLoadMoreListener {
isLoadMore = true
pageIndex++
obtainDeviceListByPage()
@@ -176,7 +168,7 @@
isRefresh -> {
dataBeans.clear()
dataBeans = dataRows!!
- groupDeviceLayout.finishRefresh()
+ binding.groupDeviceLayout.finishRefresh()
isRefresh = false
}
@@ -185,7 +177,7 @@
"到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
- groupDeviceLayout.finishLoadMore()
+ binding.groupDeviceLayout.finishLoadMore()
isLoadMore = false
}
@@ -211,7 +203,7 @@
)
}
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
@@ -230,15 +222,15 @@
deviceAdapter.notifyDataSetChanged()
} else {
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
deviceAdapter = DeviceListAdapter(this, dataBeans)
//绑定侧滑事件
- swipeAction.attachToRecyclerView(groupDeviceView)
+ swipeAction.attachToRecyclerView(binding.groupDeviceView)
val linearLayoutManager = object : LinearLayoutManager(this) {
override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
return RecyclerView.LayoutParams(
@@ -247,8 +239,8 @@
)
}
}
- groupDeviceView.layoutManager = linearLayoutManager
- groupDeviceView.adapter = deviceAdapter
+ binding.groupDeviceView.layoutManager = linearLayoutManager
+ binding.groupDeviceView.adapter = deviceAdapter
deviceAdapter.setOnItemClickListener(object :
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -311,13 +303,9 @@
})
private fun deleteItem(adapterPosition: Int) {
- AlertControlDialog.Builder()
- .setContext(this)
- .setTitle("提示")
- .setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(this).setTitle("提示")
+ .setMessage("删除后将无法恢复,是否继续?").setNegativeButton("容我想想")
+ .setPositiveButton("已经想好").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
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 71f438c..70e49f0 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -1,9 +1,11 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityHistoryDataBinding
import com.casic.smarttube.extensions.dateToMonthDay
import com.casic.smarttube.extensions.getQuarterOfYear
import com.casic.smarttube.utils.ChartViewHelper
@@ -22,27 +24,26 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_history_data.dataLineChart
-import kotlinx.android.synthetic.main.activity_history_data.leftBackView
-import kotlinx.android.synthetic.main.activity_history_data.periodSpinner
import java.util.Calendar
-class HistoryDataActivity : KotlinBaseActivity() {
+class HistoryDataActivity : KotlinBaseActivity() {
private val kTag = "HistoryDataActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupId: String
private lateinit var devCode: String
- override fun initLayoutView(): Int = R.layout.activity_history_data
+ override fun initViewBinding(): ActivityHistoryDataBinding {
+ return ActivityHistoryDataBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
groupId = params[0]
devCode = params[1]
@@ -61,8 +62,8 @@
override fun initEvent() {
//默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ binding.periodSpinner.setSelection(3)
+ binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?, view: View?, position: Int, id: Long
) {
@@ -76,6 +77,7 @@
groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
+
1 -> {
//本季度
val startDate = when (time.getQuarterOfYear()) {
@@ -89,6 +91,7 @@
groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
+
2 -> {
//近30日
deviceViewModel.obtainDeviceHistoryData(
@@ -98,6 +101,7 @@
time.timestampToCompleteDate()
)
}
+
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
@@ -107,19 +111,18 @@
time.timestampToCompleteDate()
)
}
+
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
+
5 -> {
- DateSelectDialog.Builder()
- .setContext(this@HistoryDataActivity)
- .setTitle("选择日期")
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
- .setOnDialogButtonClickListener(object :
+ DateSelectDialog.Builder().setContext(this@HistoryDataActivity)
+ .setTitle("选择日期").setNegativeButton("取消")
+ .setPositiveButton("选好了").setOnDialogButtonClickListener(object :
DateSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(startDate: String, endDate: String) {
deviceViewModel.obtainDeviceHistoryData(
@@ -129,12 +132,10 @@
override fun onCancelClick() {
//选择取消就默认加载近7天的数据
- periodSpinner.setSelection(3)
+ binding.periodSpinner.setSelection(3)
}
- })
- .setFragmentManager(supportFragmentManager)
- .setCalendarType(Type.YEAR_MONTH_DAY)
- .build().show()
+ }).setFragmentManager(supportFragmentManager)
+ .setCalendarType(Type.YEAR_MONTH_DAY).build().show()
}
}
}
@@ -159,7 +160,9 @@
Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度")
)
}
- ChartViewHelper.setLineChartData(dataLineChart, xAxisLabels, strengthEntries)
+ ChartViewHelper.setLineChartData(
+ binding.dataLineChart, xAxisLabels, strengthEntries
+ )
}
}
}
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
index 072953f..f036a78 100644
--- a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.graphics.Color
+import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.model.LatLng
@@ -10,6 +11,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityDeviceDetailBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.toSignalImage
import com.casic.smarttube.model.DeviceDetailModel
@@ -25,51 +27,39 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_device_detail.densityView
-import kotlinx.android.synthetic.main.activity_device_detail.descriptionView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView
-import kotlinx.android.synthetic.main.activity_device_detail.imageGridView
-import kotlinx.android.synthetic.main.activity_device_detail.lastDataView
-import kotlinx.android.synthetic.main.activity_device_detail.leftBackView
-import kotlinx.android.synthetic.main.activity_device_detail.locationView
-import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView
-import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView
-import kotlinx.android.synthetic.main.activity_device_detail.signalImageView
-import kotlinx.android.synthetic.main.activity_device_detail.titleView
-class DeviceDetailActivity : KotlinBaseActivity() {
+class DeviceDetailActivity : KotlinBaseActivity() {
private val kTag = "DeviceDetailActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceModel: DeviceDetailModel.DataModel
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_device_detail
+ override fun initViewBinding(): ActivityDeviceDetailBinding {
+ return ActivityDeviceDetailBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备详情"
- leftBackView.setOnClickListener { finish() }
+ binding.titleView.text = "设备详情"
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
deviceViewModel.obtainDeviceDetail(params[0], params[1])
deviceViewModel.deviceDetailModel.observe(this) {
if (it.code == 200) {
val device = it.data
this.deviceModel = device
- deviceCodeView.text = device.devcode
- deviceNameView.text = device.deviceName
- projectGroupView.text = String.format("项目${device.groupId}")
+ binding.deviceCodeView.text = device.devcode
+ binding.deviceNameView.text = device.deviceName
+ binding.projectGroupView.text = String.format("项目${device.groupId}")
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -81,7 +71,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text = result?.regeocodeAddress?.formatAddress
+ binding.locationView.text = result?.regeocodeAddress?.formatAddress
}
}
@@ -90,12 +80,12 @@
}
})
}
- descriptionView.text = device.descn
+ binding.descriptionView.text = device.descn
if (device.photos.toString().isBlank()) {
- imageGridView.visibility = View.GONE
+ binding.imageGridView.visibility = View.GONE
} else {
- imageGridView.visibility = View.VISIBLE
+ binding.imageGridView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
val imageArray = device.photos.toString().split(",")
@@ -104,10 +94,9 @@
urls.add(path.combineImagePath())
}
}
- val imageAdapter = ReadOnlyImageAdapter(this)
- imageAdapter.setImageList(urls)
- imageGridView.adapter = imageAdapter
- imageGridView.setOnItemClickListener { _, _, position, _ ->
+ val imageAdapter = ReadOnlyImageAdapter(this, urls)
+ binding.imageGridView.adapter = imageAdapter
+ binding.imageGridView.setOnItemClickListener { _, _, position, _ ->
if (urls[position].isEmpty()) {
"图片加载失败,无法查看大图".show(this)
} else {
@@ -119,18 +108,18 @@
val value = device.stregnth.toDouble().toInt()
val level = "$value%"
val ppm = "${value * 500}ppm"
- densityView.text = "$level(相当于$ppm)"
+ binding.densityView.text = "$level(相当于$ppm)"
- lastDataView.text = device.uptime
+ binding.lastDataView.text = device.uptime
if (device.onlineState == "0") {
- deviceStateView.text = "离线"
- deviceStateView.setTextColor(Color.RED)
+ binding.deviceStateView.text = "离线"
+ binding.deviceStateView.setTextColor(Color.RED)
} else {
- deviceStateView.text = "在线"
- deviceStateView.setTextColor(Color.GREEN)
+ binding.deviceStateView.text = "在线"
+ binding.deviceStateView.setTextColor(Color.GREEN)
}
- signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
- deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
+ binding.signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
+ binding.deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
"0%"
} else {
device.cell + "%"
@@ -149,7 +138,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
val lat = deviceModel.latGaode.toString()
val lng = deviceModel.lngGaode.toString()
if (lat.isBlank() || lng.isBlank()) {
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 0ae8862..ba52ab8 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -8,6 +9,7 @@
import androidx.recyclerview.widget.RecyclerView
import com.casic.smarttube.R
import com.casic.smarttube.adapter.DeviceListAdapter
+import com.casic.smarttube.databinding.ActivityGroupDeviceBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.DeviceListModel
import com.casic.smarttube.utils.LoadingDialogHub
@@ -28,14 +30,8 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction
import com.qmuiteam.qmui.recyclerView.QMUISwipeAction
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceLayout
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceView
-import kotlinx.android.synthetic.main.activity_group_device.leftBackView
-import kotlinx.android.synthetic.main.activity_group_device.rightOptionView
-import kotlinx.android.synthetic.main.activity_group_device.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class GroupDeviceActivity : KotlinBaseActivity() {
+class GroupDeviceActivity : KotlinBaseActivity() {
private lateinit var groupId: String
private lateinit var weakReferenceHandler: WeakReferenceHandler
@@ -51,18 +47,19 @@
private var clickedPosition = 0
private var isDeleteAll = false
- override fun initLayoutView(): Int = R.layout.activity_group_device
+ override fun initViewBinding(): ActivityGroupDeviceBinding {
+ return ActivityGroupDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
- rightOptionView.setOnClickListener {
+ binding.leftBackView.setOnClickListener { finish() }
+ binding.rightOptionView.setOnClickListener {
//改为Popup
val easyPopupWindow = EasyPopupWindow(this)
easyPopupWindow.setPopupMenuItem(
- LocaleConstant.DEVICE_OPERATE_IMAGES,
- LocaleConstant.DEVICE_OPERATE_TITLES
+ LocaleConstant.DEVICE_OPERATE_IMAGES, LocaleConstant.DEVICE_OPERATE_TITLES
)
easyPopupWindow.setOnPopupWindowClickListener(object :
EasyPopupWindow.OnPopupWindowClickListener {
@@ -77,13 +74,11 @@
pageIndex = 1
obtainDeviceListByPage()
}
+
1 -> {
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertControlDialog.Builder().setContext(context).setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
+ .setNegativeButton("容我想想").setPositiveButton("已经想好")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -103,13 +98,11 @@
}
}).build().show()
}
+
2 -> {
- MultiSelectDialog.Builder()
- .setContext(this@GroupDeviceActivity)
- .setTitle("选择设备")
- .setDataSource(dataBeans)
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
+ MultiSelectDialog.Builder().setContext(this@GroupDeviceActivity)
+ .setTitle("选择设备").setDataSource(dataBeans)
+ .setNegativeButton("取消").setPositiveButton("选好了")
.setOnDialogButtonClickListener(object :
MultiSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(selectedModels: MutableList) {
@@ -126,21 +119,20 @@
override fun onCancelClick() {
}
- })
- .build().show()
+ }).build().show()
}
}
}
})
easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(rightOptionView, x, 0)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
}
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupId = intent.getStringExtra(Constant.INTENT_PARAM)!!
- titleView.text = String.format(groupId + "项目设备列表")
+ binding.titleView.text = String.format(groupId + "项目设备列表")
weakReferenceHandler = WeakReferenceHandler(callback)
groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -157,13 +149,13 @@
}
override fun initEvent() {
- groupDeviceLayout.setOnRefreshListener {
+ binding.groupDeviceLayout.setOnRefreshListener {
isRefresh = true
//刷新之后页码重置
pageIndex = 1
obtainDeviceListByPage()
}
- groupDeviceLayout.setOnLoadMoreListener {
+ binding.groupDeviceLayout.setOnLoadMoreListener {
isLoadMore = true
pageIndex++
obtainDeviceListByPage()
@@ -176,7 +168,7 @@
isRefresh -> {
dataBeans.clear()
dataBeans = dataRows!!
- groupDeviceLayout.finishRefresh()
+ binding.groupDeviceLayout.finishRefresh()
isRefresh = false
}
@@ -185,7 +177,7 @@
"到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
- groupDeviceLayout.finishLoadMore()
+ binding.groupDeviceLayout.finishLoadMore()
isLoadMore = false
}
@@ -211,7 +203,7 @@
)
}
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
@@ -230,15 +222,15 @@
deviceAdapter.notifyDataSetChanged()
} else {
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
deviceAdapter = DeviceListAdapter(this, dataBeans)
//绑定侧滑事件
- swipeAction.attachToRecyclerView(groupDeviceView)
+ swipeAction.attachToRecyclerView(binding.groupDeviceView)
val linearLayoutManager = object : LinearLayoutManager(this) {
override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
return RecyclerView.LayoutParams(
@@ -247,8 +239,8 @@
)
}
}
- groupDeviceView.layoutManager = linearLayoutManager
- groupDeviceView.adapter = deviceAdapter
+ binding.groupDeviceView.layoutManager = linearLayoutManager
+ binding.groupDeviceView.adapter = deviceAdapter
deviceAdapter.setOnItemClickListener(object :
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -311,13 +303,9 @@
})
private fun deleteItem(adapterPosition: Int) {
- AlertControlDialog.Builder()
- .setContext(this)
- .setTitle("提示")
- .setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(this).setTitle("提示")
+ .setMessage("删除后将无法恢复,是否继续?").setNegativeButton("容我想想")
+ .setPositiveButton("已经想好").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
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 71f438c..70e49f0 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -1,9 +1,11 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityHistoryDataBinding
import com.casic.smarttube.extensions.dateToMonthDay
import com.casic.smarttube.extensions.getQuarterOfYear
import com.casic.smarttube.utils.ChartViewHelper
@@ -22,27 +24,26 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_history_data.dataLineChart
-import kotlinx.android.synthetic.main.activity_history_data.leftBackView
-import kotlinx.android.synthetic.main.activity_history_data.periodSpinner
import java.util.Calendar
-class HistoryDataActivity : KotlinBaseActivity() {
+class HistoryDataActivity : KotlinBaseActivity() {
private val kTag = "HistoryDataActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupId: String
private lateinit var devCode: String
- override fun initLayoutView(): Int = R.layout.activity_history_data
+ override fun initViewBinding(): ActivityHistoryDataBinding {
+ return ActivityHistoryDataBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
groupId = params[0]
devCode = params[1]
@@ -61,8 +62,8 @@
override fun initEvent() {
//默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ binding.periodSpinner.setSelection(3)
+ binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?, view: View?, position: Int, id: Long
) {
@@ -76,6 +77,7 @@
groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
+
1 -> {
//本季度
val startDate = when (time.getQuarterOfYear()) {
@@ -89,6 +91,7 @@
groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
+
2 -> {
//近30日
deviceViewModel.obtainDeviceHistoryData(
@@ -98,6 +101,7 @@
time.timestampToCompleteDate()
)
}
+
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
@@ -107,19 +111,18 @@
time.timestampToCompleteDate()
)
}
+
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
+
5 -> {
- DateSelectDialog.Builder()
- .setContext(this@HistoryDataActivity)
- .setTitle("选择日期")
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
- .setOnDialogButtonClickListener(object :
+ DateSelectDialog.Builder().setContext(this@HistoryDataActivity)
+ .setTitle("选择日期").setNegativeButton("取消")
+ .setPositiveButton("选好了").setOnDialogButtonClickListener(object :
DateSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(startDate: String, endDate: String) {
deviceViewModel.obtainDeviceHistoryData(
@@ -129,12 +132,10 @@
override fun onCancelClick() {
//选择取消就默认加载近7天的数据
- periodSpinner.setSelection(3)
+ binding.periodSpinner.setSelection(3)
}
- })
- .setFragmentManager(supportFragmentManager)
- .setCalendarType(Type.YEAR_MONTH_DAY)
- .build().show()
+ }).setFragmentManager(supportFragmentManager)
+ .setCalendarType(Type.YEAR_MONTH_DAY).build().show()
}
}
}
@@ -159,7 +160,9 @@
Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度")
)
}
- ChartViewHelper.setLineChartData(dataLineChart, xAxisLabels, strengthEntries)
+ ChartViewHelper.setLineChartData(
+ binding.dataLineChart, xAxisLabels, strengthEntries
+ )
}
}
}
diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
index ebca433..f947b2c 100644
--- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
@@ -1,7 +1,8 @@
package com.casic.smarttube.view
+import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityLoginBinding
import com.casic.smarttube.utils.AuthenticationHelper
import com.casic.smarttube.utils.LoadingDialogHub
import com.casic.smarttube.utils.LocaleConstant
@@ -14,26 +15,29 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
-import kotlinx.android.synthetic.main.activity_login.loginButton
-import kotlinx.android.synthetic.main.activity_login.userNameView
-import kotlinx.android.synthetic.main.activity_login.userPasswordView
-class LoginActivity : KotlinBaseActivity() {
+class LoginActivity : KotlinBaseActivity() {
private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var loginViewModel: LoginViewModel
private lateinit var userViewModel: UserViewModel
- override fun initLayoutView(): Int = R.layout.activity_login
+ override fun initViewBinding(): ActivityLoginBinding {
+ return ActivityLoginBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(true).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
// 设置默认账号密码
- userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
+ binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ binding.userPasswordView.setText(
+ SaveKeyValues.getValue(
+ LocaleConstant.PASSWORD, ""
+ ) as String
+ )
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
@@ -50,9 +54,9 @@
}
override fun initEvent() {
- loginButton.setOnClickListener {
- val account = userNameView.text.toString().trim()
- val userPassword = userPasswordView.text.toString().trim()
+ binding.loginButton.setOnClickListener {
+ val account = binding.userNameView.text.toString().trim()
+ val userPassword = binding.userPasswordView.text.toString().trim()
if (account.isBlank()) {
"用户名不能为空".show(this)
return@setOnClickListener
@@ -74,8 +78,8 @@
AuthenticationHelper.savePublicKey(keyString)
val publicKey = RSAUtils.keyStrToPublicKey(keyString)
- val account = userNameView.text.toString()
- val userPassword = userPasswordView.text.toString()
+ val account = binding.userNameView.text.toString()
+ val userPassword = binding.userPasswordView.text.toString()
val dataByPublicKey =
RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!)
//登录并获取Token,POST请求
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
index 072953f..f036a78 100644
--- a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.graphics.Color
+import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.model.LatLng
@@ -10,6 +11,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityDeviceDetailBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.toSignalImage
import com.casic.smarttube.model.DeviceDetailModel
@@ -25,51 +27,39 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_device_detail.densityView
-import kotlinx.android.synthetic.main.activity_device_detail.descriptionView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView
-import kotlinx.android.synthetic.main.activity_device_detail.imageGridView
-import kotlinx.android.synthetic.main.activity_device_detail.lastDataView
-import kotlinx.android.synthetic.main.activity_device_detail.leftBackView
-import kotlinx.android.synthetic.main.activity_device_detail.locationView
-import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView
-import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView
-import kotlinx.android.synthetic.main.activity_device_detail.signalImageView
-import kotlinx.android.synthetic.main.activity_device_detail.titleView
-class DeviceDetailActivity : KotlinBaseActivity() {
+class DeviceDetailActivity : KotlinBaseActivity() {
private val kTag = "DeviceDetailActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceModel: DeviceDetailModel.DataModel
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_device_detail
+ override fun initViewBinding(): ActivityDeviceDetailBinding {
+ return ActivityDeviceDetailBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备详情"
- leftBackView.setOnClickListener { finish() }
+ binding.titleView.text = "设备详情"
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
deviceViewModel.obtainDeviceDetail(params[0], params[1])
deviceViewModel.deviceDetailModel.observe(this) {
if (it.code == 200) {
val device = it.data
this.deviceModel = device
- deviceCodeView.text = device.devcode
- deviceNameView.text = device.deviceName
- projectGroupView.text = String.format("项目${device.groupId}")
+ binding.deviceCodeView.text = device.devcode
+ binding.deviceNameView.text = device.deviceName
+ binding.projectGroupView.text = String.format("项目${device.groupId}")
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -81,7 +71,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text = result?.regeocodeAddress?.formatAddress
+ binding.locationView.text = result?.regeocodeAddress?.formatAddress
}
}
@@ -90,12 +80,12 @@
}
})
}
- descriptionView.text = device.descn
+ binding.descriptionView.text = device.descn
if (device.photos.toString().isBlank()) {
- imageGridView.visibility = View.GONE
+ binding.imageGridView.visibility = View.GONE
} else {
- imageGridView.visibility = View.VISIBLE
+ binding.imageGridView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
val imageArray = device.photos.toString().split(",")
@@ -104,10 +94,9 @@
urls.add(path.combineImagePath())
}
}
- val imageAdapter = ReadOnlyImageAdapter(this)
- imageAdapter.setImageList(urls)
- imageGridView.adapter = imageAdapter
- imageGridView.setOnItemClickListener { _, _, position, _ ->
+ val imageAdapter = ReadOnlyImageAdapter(this, urls)
+ binding.imageGridView.adapter = imageAdapter
+ binding.imageGridView.setOnItemClickListener { _, _, position, _ ->
if (urls[position].isEmpty()) {
"图片加载失败,无法查看大图".show(this)
} else {
@@ -119,18 +108,18 @@
val value = device.stregnth.toDouble().toInt()
val level = "$value%"
val ppm = "${value * 500}ppm"
- densityView.text = "$level(相当于$ppm)"
+ binding.densityView.text = "$level(相当于$ppm)"
- lastDataView.text = device.uptime
+ binding.lastDataView.text = device.uptime
if (device.onlineState == "0") {
- deviceStateView.text = "离线"
- deviceStateView.setTextColor(Color.RED)
+ binding.deviceStateView.text = "离线"
+ binding.deviceStateView.setTextColor(Color.RED)
} else {
- deviceStateView.text = "在线"
- deviceStateView.setTextColor(Color.GREEN)
+ binding.deviceStateView.text = "在线"
+ binding.deviceStateView.setTextColor(Color.GREEN)
}
- signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
- deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
+ binding.signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
+ binding.deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
"0%"
} else {
device.cell + "%"
@@ -149,7 +138,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
val lat = deviceModel.latGaode.toString()
val lng = deviceModel.lngGaode.toString()
if (lat.isBlank() || lng.isBlank()) {
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 0ae8862..ba52ab8 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -8,6 +9,7 @@
import androidx.recyclerview.widget.RecyclerView
import com.casic.smarttube.R
import com.casic.smarttube.adapter.DeviceListAdapter
+import com.casic.smarttube.databinding.ActivityGroupDeviceBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.DeviceListModel
import com.casic.smarttube.utils.LoadingDialogHub
@@ -28,14 +30,8 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction
import com.qmuiteam.qmui.recyclerView.QMUISwipeAction
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceLayout
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceView
-import kotlinx.android.synthetic.main.activity_group_device.leftBackView
-import kotlinx.android.synthetic.main.activity_group_device.rightOptionView
-import kotlinx.android.synthetic.main.activity_group_device.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class GroupDeviceActivity : KotlinBaseActivity() {
+class GroupDeviceActivity : KotlinBaseActivity() {
private lateinit var groupId: String
private lateinit var weakReferenceHandler: WeakReferenceHandler
@@ -51,18 +47,19 @@
private var clickedPosition = 0
private var isDeleteAll = false
- override fun initLayoutView(): Int = R.layout.activity_group_device
+ override fun initViewBinding(): ActivityGroupDeviceBinding {
+ return ActivityGroupDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
- rightOptionView.setOnClickListener {
+ binding.leftBackView.setOnClickListener { finish() }
+ binding.rightOptionView.setOnClickListener {
//改为Popup
val easyPopupWindow = EasyPopupWindow(this)
easyPopupWindow.setPopupMenuItem(
- LocaleConstant.DEVICE_OPERATE_IMAGES,
- LocaleConstant.DEVICE_OPERATE_TITLES
+ LocaleConstant.DEVICE_OPERATE_IMAGES, LocaleConstant.DEVICE_OPERATE_TITLES
)
easyPopupWindow.setOnPopupWindowClickListener(object :
EasyPopupWindow.OnPopupWindowClickListener {
@@ -77,13 +74,11 @@
pageIndex = 1
obtainDeviceListByPage()
}
+
1 -> {
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertControlDialog.Builder().setContext(context).setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
+ .setNegativeButton("容我想想").setPositiveButton("已经想好")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -103,13 +98,11 @@
}
}).build().show()
}
+
2 -> {
- MultiSelectDialog.Builder()
- .setContext(this@GroupDeviceActivity)
- .setTitle("选择设备")
- .setDataSource(dataBeans)
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
+ MultiSelectDialog.Builder().setContext(this@GroupDeviceActivity)
+ .setTitle("选择设备").setDataSource(dataBeans)
+ .setNegativeButton("取消").setPositiveButton("选好了")
.setOnDialogButtonClickListener(object :
MultiSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(selectedModels: MutableList) {
@@ -126,21 +119,20 @@
override fun onCancelClick() {
}
- })
- .build().show()
+ }).build().show()
}
}
}
})
easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(rightOptionView, x, 0)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
}
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupId = intent.getStringExtra(Constant.INTENT_PARAM)!!
- titleView.text = String.format(groupId + "项目设备列表")
+ binding.titleView.text = String.format(groupId + "项目设备列表")
weakReferenceHandler = WeakReferenceHandler(callback)
groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -157,13 +149,13 @@
}
override fun initEvent() {
- groupDeviceLayout.setOnRefreshListener {
+ binding.groupDeviceLayout.setOnRefreshListener {
isRefresh = true
//刷新之后页码重置
pageIndex = 1
obtainDeviceListByPage()
}
- groupDeviceLayout.setOnLoadMoreListener {
+ binding.groupDeviceLayout.setOnLoadMoreListener {
isLoadMore = true
pageIndex++
obtainDeviceListByPage()
@@ -176,7 +168,7 @@
isRefresh -> {
dataBeans.clear()
dataBeans = dataRows!!
- groupDeviceLayout.finishRefresh()
+ binding.groupDeviceLayout.finishRefresh()
isRefresh = false
}
@@ -185,7 +177,7 @@
"到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
- groupDeviceLayout.finishLoadMore()
+ binding.groupDeviceLayout.finishLoadMore()
isLoadMore = false
}
@@ -211,7 +203,7 @@
)
}
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
@@ -230,15 +222,15 @@
deviceAdapter.notifyDataSetChanged()
} else {
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
deviceAdapter = DeviceListAdapter(this, dataBeans)
//绑定侧滑事件
- swipeAction.attachToRecyclerView(groupDeviceView)
+ swipeAction.attachToRecyclerView(binding.groupDeviceView)
val linearLayoutManager = object : LinearLayoutManager(this) {
override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
return RecyclerView.LayoutParams(
@@ -247,8 +239,8 @@
)
}
}
- groupDeviceView.layoutManager = linearLayoutManager
- groupDeviceView.adapter = deviceAdapter
+ binding.groupDeviceView.layoutManager = linearLayoutManager
+ binding.groupDeviceView.adapter = deviceAdapter
deviceAdapter.setOnItemClickListener(object :
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -311,13 +303,9 @@
})
private fun deleteItem(adapterPosition: Int) {
- AlertControlDialog.Builder()
- .setContext(this)
- .setTitle("提示")
- .setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(this).setTitle("提示")
+ .setMessage("删除后将无法恢复,是否继续?").setNegativeButton("容我想想")
+ .setPositiveButton("已经想好").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
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 71f438c..70e49f0 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -1,9 +1,11 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityHistoryDataBinding
import com.casic.smarttube.extensions.dateToMonthDay
import com.casic.smarttube.extensions.getQuarterOfYear
import com.casic.smarttube.utils.ChartViewHelper
@@ -22,27 +24,26 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_history_data.dataLineChart
-import kotlinx.android.synthetic.main.activity_history_data.leftBackView
-import kotlinx.android.synthetic.main.activity_history_data.periodSpinner
import java.util.Calendar
-class HistoryDataActivity : KotlinBaseActivity() {
+class HistoryDataActivity : KotlinBaseActivity() {
private val kTag = "HistoryDataActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupId: String
private lateinit var devCode: String
- override fun initLayoutView(): Int = R.layout.activity_history_data
+ override fun initViewBinding(): ActivityHistoryDataBinding {
+ return ActivityHistoryDataBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
groupId = params[0]
devCode = params[1]
@@ -61,8 +62,8 @@
override fun initEvent() {
//默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ binding.periodSpinner.setSelection(3)
+ binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?, view: View?, position: Int, id: Long
) {
@@ -76,6 +77,7 @@
groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
+
1 -> {
//本季度
val startDate = when (time.getQuarterOfYear()) {
@@ -89,6 +91,7 @@
groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
+
2 -> {
//近30日
deviceViewModel.obtainDeviceHistoryData(
@@ -98,6 +101,7 @@
time.timestampToCompleteDate()
)
}
+
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
@@ -107,19 +111,18 @@
time.timestampToCompleteDate()
)
}
+
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
+
5 -> {
- DateSelectDialog.Builder()
- .setContext(this@HistoryDataActivity)
- .setTitle("选择日期")
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
- .setOnDialogButtonClickListener(object :
+ DateSelectDialog.Builder().setContext(this@HistoryDataActivity)
+ .setTitle("选择日期").setNegativeButton("取消")
+ .setPositiveButton("选好了").setOnDialogButtonClickListener(object :
DateSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(startDate: String, endDate: String) {
deviceViewModel.obtainDeviceHistoryData(
@@ -129,12 +132,10 @@
override fun onCancelClick() {
//选择取消就默认加载近7天的数据
- periodSpinner.setSelection(3)
+ binding.periodSpinner.setSelection(3)
}
- })
- .setFragmentManager(supportFragmentManager)
- .setCalendarType(Type.YEAR_MONTH_DAY)
- .build().show()
+ }).setFragmentManager(supportFragmentManager)
+ .setCalendarType(Type.YEAR_MONTH_DAY).build().show()
}
}
}
@@ -159,7 +160,9 @@
Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度")
)
}
- ChartViewHelper.setLineChartData(dataLineChart, xAxisLabels, strengthEntries)
+ ChartViewHelper.setLineChartData(
+ binding.dataLineChart, xAxisLabels, strengthEntries
+ )
}
}
}
diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
index ebca433..f947b2c 100644
--- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
@@ -1,7 +1,8 @@
package com.casic.smarttube.view
+import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityLoginBinding
import com.casic.smarttube.utils.AuthenticationHelper
import com.casic.smarttube.utils.LoadingDialogHub
import com.casic.smarttube.utils.LocaleConstant
@@ -14,26 +15,29 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
-import kotlinx.android.synthetic.main.activity_login.loginButton
-import kotlinx.android.synthetic.main.activity_login.userNameView
-import kotlinx.android.synthetic.main.activity_login.userPasswordView
-class LoginActivity : KotlinBaseActivity() {
+class LoginActivity : KotlinBaseActivity() {
private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var loginViewModel: LoginViewModel
private lateinit var userViewModel: UserViewModel
- override fun initLayoutView(): Int = R.layout.activity_login
+ override fun initViewBinding(): ActivityLoginBinding {
+ return ActivityLoginBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(true).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
// 设置默认账号密码
- userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
+ binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ binding.userPasswordView.setText(
+ SaveKeyValues.getValue(
+ LocaleConstant.PASSWORD, ""
+ ) as String
+ )
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
@@ -50,9 +54,9 @@
}
override fun initEvent() {
- loginButton.setOnClickListener {
- val account = userNameView.text.toString().trim()
- val userPassword = userPasswordView.text.toString().trim()
+ binding.loginButton.setOnClickListener {
+ val account = binding.userNameView.text.toString().trim()
+ val userPassword = binding.userPasswordView.text.toString().trim()
if (account.isBlank()) {
"用户名不能为空".show(this)
return@setOnClickListener
@@ -74,8 +78,8 @@
AuthenticationHelper.savePublicKey(keyString)
val publicKey = RSAUtils.keyStrToPublicKey(keyString)
- val account = userNameView.text.toString()
- val userPassword = userPasswordView.text.toString()
+ val account = binding.userNameView.text.toString()
+ val userPassword = binding.userPasswordView.text.toString()
val dataByPublicKey =
RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!)
//登录并获取Token,POST请求
diff --git a/app/src/main/java/com/casic/smarttube/view/MainActivity.kt b/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
index 4461757..575e1ee 100644
--- a/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,6 +8,7 @@
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityMainBinding
import com.casic.smarttube.fragment.HomePageFragment
import com.casic.smarttube.fragment.MinePageFragment
import com.casic.smarttube.fragment.OverviewFragment
@@ -15,9 +17,8 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_main.*
-class MainActivity : KotlinBaseActivity() {
+class MainActivity : KotlinBaseActivity() {
private var menuItem: MenuItem? = null
private var fragmentList: MutableList = ArrayList()
@@ -29,32 +30,36 @@
fragmentList.add(MinePageFragment())
}
- override fun initLayoutView(): Int = R.layout.activity_main
+ override fun initViewBinding(): ActivityMainBinding {
+ return ActivityMainBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
//保留icon原图颜色
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnItemSelectedListener { menuItem ->
+ binding.bottomNavigation.itemIconTintList = null
+ binding.bottomNavigation.setOnItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ binding.mainViewPager.currentItem = 0
}
+
R.id.nav_overview -> {
- mainViewPager.currentItem = 1
+ binding.mainViewPager.currentItem = 1
}
+
R.id.nav_mine -> {
- mainViewPager.currentItem = 2
+ binding.mainViewPager.currentItem = 2
}
}
false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentList, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentList.size //缓存页数
+ binding.mainViewPager.adapter = ViewPagerAdapter(fragmentList, supportFragmentManager)
+ binding.mainViewPager.offscreenPageLimit = fragmentList.size //缓存页数
}
override fun observeRequestState() {
@@ -62,7 +67,7 @@
}
override fun initEvent() {
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -77,9 +82,9 @@
if (menuItem != null) {
menuItem!!.isChecked = false
} else {
- bottomNavigation.menu.getItem(0).isChecked = false
+ binding.bottomNavigation.menu.getItem(0).isChecked = false
}
- menuItem = bottomNavigation.menu.getItem(position)
+ menuItem = binding.bottomNavigation.menu.getItem(position)
menuItem!!.isChecked = true
}
})
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
index 072953f..f036a78 100644
--- a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.graphics.Color
+import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.model.LatLng
@@ -10,6 +11,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityDeviceDetailBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.toSignalImage
import com.casic.smarttube.model.DeviceDetailModel
@@ -25,51 +27,39 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_device_detail.densityView
-import kotlinx.android.synthetic.main.activity_device_detail.descriptionView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView
-import kotlinx.android.synthetic.main.activity_device_detail.imageGridView
-import kotlinx.android.synthetic.main.activity_device_detail.lastDataView
-import kotlinx.android.synthetic.main.activity_device_detail.leftBackView
-import kotlinx.android.synthetic.main.activity_device_detail.locationView
-import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView
-import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView
-import kotlinx.android.synthetic.main.activity_device_detail.signalImageView
-import kotlinx.android.synthetic.main.activity_device_detail.titleView
-class DeviceDetailActivity : KotlinBaseActivity() {
+class DeviceDetailActivity : KotlinBaseActivity() {
private val kTag = "DeviceDetailActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceModel: DeviceDetailModel.DataModel
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_device_detail
+ override fun initViewBinding(): ActivityDeviceDetailBinding {
+ return ActivityDeviceDetailBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备详情"
- leftBackView.setOnClickListener { finish() }
+ binding.titleView.text = "设备详情"
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
deviceViewModel.obtainDeviceDetail(params[0], params[1])
deviceViewModel.deviceDetailModel.observe(this) {
if (it.code == 200) {
val device = it.data
this.deviceModel = device
- deviceCodeView.text = device.devcode
- deviceNameView.text = device.deviceName
- projectGroupView.text = String.format("项目${device.groupId}")
+ binding.deviceCodeView.text = device.devcode
+ binding.deviceNameView.text = device.deviceName
+ binding.projectGroupView.text = String.format("项目${device.groupId}")
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -81,7 +71,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text = result?.regeocodeAddress?.formatAddress
+ binding.locationView.text = result?.regeocodeAddress?.formatAddress
}
}
@@ -90,12 +80,12 @@
}
})
}
- descriptionView.text = device.descn
+ binding.descriptionView.text = device.descn
if (device.photos.toString().isBlank()) {
- imageGridView.visibility = View.GONE
+ binding.imageGridView.visibility = View.GONE
} else {
- imageGridView.visibility = View.VISIBLE
+ binding.imageGridView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
val imageArray = device.photos.toString().split(",")
@@ -104,10 +94,9 @@
urls.add(path.combineImagePath())
}
}
- val imageAdapter = ReadOnlyImageAdapter(this)
- imageAdapter.setImageList(urls)
- imageGridView.adapter = imageAdapter
- imageGridView.setOnItemClickListener { _, _, position, _ ->
+ val imageAdapter = ReadOnlyImageAdapter(this, urls)
+ binding.imageGridView.adapter = imageAdapter
+ binding.imageGridView.setOnItemClickListener { _, _, position, _ ->
if (urls[position].isEmpty()) {
"图片加载失败,无法查看大图".show(this)
} else {
@@ -119,18 +108,18 @@
val value = device.stregnth.toDouble().toInt()
val level = "$value%"
val ppm = "${value * 500}ppm"
- densityView.text = "$level(相当于$ppm)"
+ binding.densityView.text = "$level(相当于$ppm)"
- lastDataView.text = device.uptime
+ binding.lastDataView.text = device.uptime
if (device.onlineState == "0") {
- deviceStateView.text = "离线"
- deviceStateView.setTextColor(Color.RED)
+ binding.deviceStateView.text = "离线"
+ binding.deviceStateView.setTextColor(Color.RED)
} else {
- deviceStateView.text = "在线"
- deviceStateView.setTextColor(Color.GREEN)
+ binding.deviceStateView.text = "在线"
+ binding.deviceStateView.setTextColor(Color.GREEN)
}
- signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
- deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
+ binding.signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
+ binding.deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
"0%"
} else {
device.cell + "%"
@@ -149,7 +138,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
val lat = deviceModel.latGaode.toString()
val lng = deviceModel.lngGaode.toString()
if (lat.isBlank() || lng.isBlank()) {
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 0ae8862..ba52ab8 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -8,6 +9,7 @@
import androidx.recyclerview.widget.RecyclerView
import com.casic.smarttube.R
import com.casic.smarttube.adapter.DeviceListAdapter
+import com.casic.smarttube.databinding.ActivityGroupDeviceBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.DeviceListModel
import com.casic.smarttube.utils.LoadingDialogHub
@@ -28,14 +30,8 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction
import com.qmuiteam.qmui.recyclerView.QMUISwipeAction
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceLayout
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceView
-import kotlinx.android.synthetic.main.activity_group_device.leftBackView
-import kotlinx.android.synthetic.main.activity_group_device.rightOptionView
-import kotlinx.android.synthetic.main.activity_group_device.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class GroupDeviceActivity : KotlinBaseActivity() {
+class GroupDeviceActivity : KotlinBaseActivity() {
private lateinit var groupId: String
private lateinit var weakReferenceHandler: WeakReferenceHandler
@@ -51,18 +47,19 @@
private var clickedPosition = 0
private var isDeleteAll = false
- override fun initLayoutView(): Int = R.layout.activity_group_device
+ override fun initViewBinding(): ActivityGroupDeviceBinding {
+ return ActivityGroupDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
- rightOptionView.setOnClickListener {
+ binding.leftBackView.setOnClickListener { finish() }
+ binding.rightOptionView.setOnClickListener {
//改为Popup
val easyPopupWindow = EasyPopupWindow(this)
easyPopupWindow.setPopupMenuItem(
- LocaleConstant.DEVICE_OPERATE_IMAGES,
- LocaleConstant.DEVICE_OPERATE_TITLES
+ LocaleConstant.DEVICE_OPERATE_IMAGES, LocaleConstant.DEVICE_OPERATE_TITLES
)
easyPopupWindow.setOnPopupWindowClickListener(object :
EasyPopupWindow.OnPopupWindowClickListener {
@@ -77,13 +74,11 @@
pageIndex = 1
obtainDeviceListByPage()
}
+
1 -> {
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertControlDialog.Builder().setContext(context).setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
+ .setNegativeButton("容我想想").setPositiveButton("已经想好")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -103,13 +98,11 @@
}
}).build().show()
}
+
2 -> {
- MultiSelectDialog.Builder()
- .setContext(this@GroupDeviceActivity)
- .setTitle("选择设备")
- .setDataSource(dataBeans)
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
+ MultiSelectDialog.Builder().setContext(this@GroupDeviceActivity)
+ .setTitle("选择设备").setDataSource(dataBeans)
+ .setNegativeButton("取消").setPositiveButton("选好了")
.setOnDialogButtonClickListener(object :
MultiSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(selectedModels: MutableList) {
@@ -126,21 +119,20 @@
override fun onCancelClick() {
}
- })
- .build().show()
+ }).build().show()
}
}
}
})
easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(rightOptionView, x, 0)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
}
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupId = intent.getStringExtra(Constant.INTENT_PARAM)!!
- titleView.text = String.format(groupId + "项目设备列表")
+ binding.titleView.text = String.format(groupId + "项目设备列表")
weakReferenceHandler = WeakReferenceHandler(callback)
groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -157,13 +149,13 @@
}
override fun initEvent() {
- groupDeviceLayout.setOnRefreshListener {
+ binding.groupDeviceLayout.setOnRefreshListener {
isRefresh = true
//刷新之后页码重置
pageIndex = 1
obtainDeviceListByPage()
}
- groupDeviceLayout.setOnLoadMoreListener {
+ binding.groupDeviceLayout.setOnLoadMoreListener {
isLoadMore = true
pageIndex++
obtainDeviceListByPage()
@@ -176,7 +168,7 @@
isRefresh -> {
dataBeans.clear()
dataBeans = dataRows!!
- groupDeviceLayout.finishRefresh()
+ binding.groupDeviceLayout.finishRefresh()
isRefresh = false
}
@@ -185,7 +177,7 @@
"到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
- groupDeviceLayout.finishLoadMore()
+ binding.groupDeviceLayout.finishLoadMore()
isLoadMore = false
}
@@ -211,7 +203,7 @@
)
}
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
@@ -230,15 +222,15 @@
deviceAdapter.notifyDataSetChanged()
} else {
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
deviceAdapter = DeviceListAdapter(this, dataBeans)
//绑定侧滑事件
- swipeAction.attachToRecyclerView(groupDeviceView)
+ swipeAction.attachToRecyclerView(binding.groupDeviceView)
val linearLayoutManager = object : LinearLayoutManager(this) {
override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
return RecyclerView.LayoutParams(
@@ -247,8 +239,8 @@
)
}
}
- groupDeviceView.layoutManager = linearLayoutManager
- groupDeviceView.adapter = deviceAdapter
+ binding.groupDeviceView.layoutManager = linearLayoutManager
+ binding.groupDeviceView.adapter = deviceAdapter
deviceAdapter.setOnItemClickListener(object :
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -311,13 +303,9 @@
})
private fun deleteItem(adapterPosition: Int) {
- AlertControlDialog.Builder()
- .setContext(this)
- .setTitle("提示")
- .setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(this).setTitle("提示")
+ .setMessage("删除后将无法恢复,是否继续?").setNegativeButton("容我想想")
+ .setPositiveButton("已经想好").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
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 71f438c..70e49f0 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -1,9 +1,11 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityHistoryDataBinding
import com.casic.smarttube.extensions.dateToMonthDay
import com.casic.smarttube.extensions.getQuarterOfYear
import com.casic.smarttube.utils.ChartViewHelper
@@ -22,27 +24,26 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_history_data.dataLineChart
-import kotlinx.android.synthetic.main.activity_history_data.leftBackView
-import kotlinx.android.synthetic.main.activity_history_data.periodSpinner
import java.util.Calendar
-class HistoryDataActivity : KotlinBaseActivity() {
+class HistoryDataActivity : KotlinBaseActivity() {
private val kTag = "HistoryDataActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupId: String
private lateinit var devCode: String
- override fun initLayoutView(): Int = R.layout.activity_history_data
+ override fun initViewBinding(): ActivityHistoryDataBinding {
+ return ActivityHistoryDataBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
groupId = params[0]
devCode = params[1]
@@ -61,8 +62,8 @@
override fun initEvent() {
//默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ binding.periodSpinner.setSelection(3)
+ binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?, view: View?, position: Int, id: Long
) {
@@ -76,6 +77,7 @@
groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
+
1 -> {
//本季度
val startDate = when (time.getQuarterOfYear()) {
@@ -89,6 +91,7 @@
groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
+
2 -> {
//近30日
deviceViewModel.obtainDeviceHistoryData(
@@ -98,6 +101,7 @@
time.timestampToCompleteDate()
)
}
+
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
@@ -107,19 +111,18 @@
time.timestampToCompleteDate()
)
}
+
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
+
5 -> {
- DateSelectDialog.Builder()
- .setContext(this@HistoryDataActivity)
- .setTitle("选择日期")
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
- .setOnDialogButtonClickListener(object :
+ DateSelectDialog.Builder().setContext(this@HistoryDataActivity)
+ .setTitle("选择日期").setNegativeButton("取消")
+ .setPositiveButton("选好了").setOnDialogButtonClickListener(object :
DateSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(startDate: String, endDate: String) {
deviceViewModel.obtainDeviceHistoryData(
@@ -129,12 +132,10 @@
override fun onCancelClick() {
//选择取消就默认加载近7天的数据
- periodSpinner.setSelection(3)
+ binding.periodSpinner.setSelection(3)
}
- })
- .setFragmentManager(supportFragmentManager)
- .setCalendarType(Type.YEAR_MONTH_DAY)
- .build().show()
+ }).setFragmentManager(supportFragmentManager)
+ .setCalendarType(Type.YEAR_MONTH_DAY).build().show()
}
}
}
@@ -159,7 +160,9 @@
Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度")
)
}
- ChartViewHelper.setLineChartData(dataLineChart, xAxisLabels, strengthEntries)
+ ChartViewHelper.setLineChartData(
+ binding.dataLineChart, xAxisLabels, strengthEntries
+ )
}
}
}
diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
index ebca433..f947b2c 100644
--- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
@@ -1,7 +1,8 @@
package com.casic.smarttube.view
+import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityLoginBinding
import com.casic.smarttube.utils.AuthenticationHelper
import com.casic.smarttube.utils.LoadingDialogHub
import com.casic.smarttube.utils.LocaleConstant
@@ -14,26 +15,29 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
-import kotlinx.android.synthetic.main.activity_login.loginButton
-import kotlinx.android.synthetic.main.activity_login.userNameView
-import kotlinx.android.synthetic.main.activity_login.userPasswordView
-class LoginActivity : KotlinBaseActivity() {
+class LoginActivity : KotlinBaseActivity() {
private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var loginViewModel: LoginViewModel
private lateinit var userViewModel: UserViewModel
- override fun initLayoutView(): Int = R.layout.activity_login
+ override fun initViewBinding(): ActivityLoginBinding {
+ return ActivityLoginBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(true).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
// 设置默认账号密码
- userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
+ binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ binding.userPasswordView.setText(
+ SaveKeyValues.getValue(
+ LocaleConstant.PASSWORD, ""
+ ) as String
+ )
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
@@ -50,9 +54,9 @@
}
override fun initEvent() {
- loginButton.setOnClickListener {
- val account = userNameView.text.toString().trim()
- val userPassword = userPasswordView.text.toString().trim()
+ binding.loginButton.setOnClickListener {
+ val account = binding.userNameView.text.toString().trim()
+ val userPassword = binding.userPasswordView.text.toString().trim()
if (account.isBlank()) {
"用户名不能为空".show(this)
return@setOnClickListener
@@ -74,8 +78,8 @@
AuthenticationHelper.savePublicKey(keyString)
val publicKey = RSAUtils.keyStrToPublicKey(keyString)
- val account = userNameView.text.toString()
- val userPassword = userPasswordView.text.toString()
+ val account = binding.userNameView.text.toString()
+ val userPassword = binding.userPasswordView.text.toString()
val dataByPublicKey =
RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!)
//登录并获取Token,POST请求
diff --git a/app/src/main/java/com/casic/smarttube/view/MainActivity.kt b/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
index 4461757..575e1ee 100644
--- a/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,6 +8,7 @@
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityMainBinding
import com.casic.smarttube.fragment.HomePageFragment
import com.casic.smarttube.fragment.MinePageFragment
import com.casic.smarttube.fragment.OverviewFragment
@@ -15,9 +17,8 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_main.*
-class MainActivity : KotlinBaseActivity() {
+class MainActivity : KotlinBaseActivity() {
private var menuItem: MenuItem? = null
private var fragmentList: MutableList = ArrayList()
@@ -29,32 +30,36 @@
fragmentList.add(MinePageFragment())
}
- override fun initLayoutView(): Int = R.layout.activity_main
+ override fun initViewBinding(): ActivityMainBinding {
+ return ActivityMainBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
//保留icon原图颜色
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnItemSelectedListener { menuItem ->
+ binding.bottomNavigation.itemIconTintList = null
+ binding.bottomNavigation.setOnItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ binding.mainViewPager.currentItem = 0
}
+
R.id.nav_overview -> {
- mainViewPager.currentItem = 1
+ binding.mainViewPager.currentItem = 1
}
+
R.id.nav_mine -> {
- mainViewPager.currentItem = 2
+ binding.mainViewPager.currentItem = 2
}
}
false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentList, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentList.size //缓存页数
+ binding.mainViewPager.adapter = ViewPagerAdapter(fragmentList, supportFragmentManager)
+ binding.mainViewPager.offscreenPageLimit = fragmentList.size //缓存页数
}
override fun observeRequestState() {
@@ -62,7 +67,7 @@
}
override fun initEvent() {
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -77,9 +82,9 @@
if (menuItem != null) {
menuItem!!.isChecked = false
} else {
- bottomNavigation.menu.getItem(0).isChecked = false
+ binding.bottomNavigation.menu.getItem(0).isChecked = false
}
- menuItem = bottomNavigation.menu.getItem(position)
+ menuItem = binding.bottomNavigation.menu.getItem(position)
menuItem!!.isChecked = true
}
})
diff --git a/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt b/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt
index f00e0ca..908aade 100644
--- a/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt
@@ -15,6 +15,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityMapDeviceBriefBinding
import com.casic.smarttube.utils.LoadingDialogHub
import com.casic.smarttube.utils.RouteOnMap
import com.casic.smarttube.vm.DeviceViewModel
@@ -24,16 +25,8 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_map_device_brief.deviceCodeView
-import kotlinx.android.synthetic.main.activity_map_device_brief.deviceModelView
-import kotlinx.android.synthetic.main.activity_map_device_brief.deviceValueView
-import kotlinx.android.synthetic.main.activity_map_device_brief.locationView
-import kotlinx.android.synthetic.main.activity_map_device_brief.mapView
-import kotlinx.android.synthetic.main.activity_map_device_brief.updateTimeView
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
-class MapDeviceBriefActivity : KotlinBaseActivity() {
+class MapDeviceBriefActivity : KotlinBaseActivity() {
private val kTag = "MapDeviceBriefActivity"
private lateinit var deviceViewModel: DeviceViewModel
@@ -42,17 +35,19 @@
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_map_device_brief
+ override fun initViewBinding(): ActivityMapDeviceBriefBinding {
+ return ActivityMapDeviceBriefBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备最新数据地图展示"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "设备最新数据地图展示"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- aMap = mapView.map
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -80,22 +75,22 @@
if (it.code == 200) {
val device = it.data
- deviceCodeView.text = String.format("设备编号: ${device.devcode}")
- deviceModelView.text = String.format("设备模型: ${params[2]}")
+ binding.deviceCodeView.text = String.format("设备编号: ${device.devcode}")
+ binding.deviceModelView.text = String.format("设备模型: ${params[2]}")
//获取设备最新浓度信息
deviceViewModel.obtainTubeLastData(device.groupId, device.devcode)
deviceViewModel.lastDataModel.observe(this) { v ->
if (v.code == 200) {
- deviceValueView.text = String.format("最新浓度: ${v.data.strength}")
- updateTimeView.text = String.format("更新时间: ${v.data.uptime}")
+ binding.deviceValueView.text = String.format("最新浓度: ${v.data.strength}")
+ binding.updateTimeView.text = String.format("更新时间: ${v.data.uptime}")
} else {
- deviceValueView.text = String.format("最新浓度: 未知")
- updateTimeView.text = String.format("更新时间: 未知")
+ binding.deviceValueView.text = String.format("最新浓度: 未知")
+ binding.updateTimeView.text = String.format("更新时间: 未知")
}
}
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -108,7 +103,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text =
+ binding.locationView.text =
String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}")
}
}
@@ -123,8 +118,7 @@
aMap.animateCamera(newCameraPosition, 1500, object : AMap.CancelableCallback {
override fun onFinish() {
//添加Marker
- val markerOptions = MarkerOptions()
- .position(latLng)
+ val markerOptions = MarkerOptions().position(latLng)
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.well_location))
.draggable(false)
aMap.addMarker(markerOptions)
@@ -148,26 +142,26 @@
/**地图相关*********/
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- mapView.onCreate(savedInstanceState)
+ binding.mapView.onCreate(savedInstanceState)
}
override fun onResume() {
super.onResume()
- mapView.onResume()
+ binding.mapView.onResume()
}
override fun onPause() {
super.onPause()
- mapView.onPause()
+ binding.mapView.onPause()
}
override fun onDestroy() {
- mapView.onDestroy()
+ binding.mapView.onDestroy()
super.onDestroy()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList = ArrayList()
@@ -199,22 +200,33 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 16f)
}
- })
- return homeView
+ }
}
- private fun observeRequestState() {
- groupViewModel.loadState.observe(this, { state ->
- when (state) {
- LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
- else -> LoadingDialogHub.dismiss()
- }
- })
+ override fun initEvent() {
+ binding.rightOptionView.setOnClickListener {
+ easyPopupWindow.setOnPopupWindowClickListener(object :
+ EasyPopupWindow.OnPopupWindowClickListener {
+ override fun onPopupItemClicked(position: Int) {
+ when (position) {
+ 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
+ 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
+ }
+ }
+ })
+ easyPopupWindow.setBackgroundDrawable(null)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
+ }
+
+ binding.addDeviceButton.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun onResume() {
super.onResume()
- homeView.mapView.onResume()
+ binding.mapView.onResume()
//获取所有设备数据
deviceViewModel.obtainMapDeviceList()
@@ -222,16 +234,16 @@
groupViewModel.obtainProGroupList()
}
- private val callback = Handler.Callback {
- if (it.what == 2022090201) {
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022090201) {
if (isRefresh) {
groupListAdapter.notifyDataSetChanged()
} else {
groupListAdapter = GroupListAdapter(requireContext(), dataBeans)
- homeView.homeRecyclerView!!.addItemDecoration(
+ binding.homeRecyclerView.addItemDecoration(
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
)
- homeView.homeRecyclerView!!.adapter = groupListAdapter
+ binding.homeRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
GroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -241,12 +253,12 @@
})
}
}
- true
+ return true
}
private fun initMap(savedInstanceState: Bundle?) {
- homeView.mapView.onCreate(savedInstanceState)
- aMap = homeView.mapView.map
+ binding.mapView.onCreate(savedInstanceState)
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -322,10 +334,7 @@
if (!isInRange) {
clustersMarkers.add(
GaoDeClusterMarkerView(
- requireContext(),
- it,
- proj,
- LocaleConstant.RADIUS_SIZE
+ requireContext(), it, proj, LocaleConstant.RADIUS_SIZE
)
)//相距多少才聚合
}
@@ -363,9 +372,7 @@
//绑定数据
val clickedLatLng = marker?.position!!
for (device in deviceModels) {
- if (clickedLatLng.latitude == device.latGaode!!.toDouble()
- && clickedLatLng.longitude == device.lngGaode!!.toDouble()
- ) {
+ if (clickedLatLng.latitude == device.latGaode!!.toDouble() && clickedLatLng.longitude == device.lngGaode!!.toDouble()) {
deviceCodeView.text = String.format("设备编号: ${device.devcode}")
deviceModelView.text = String.format("设备模型: ${device.modelName}")
//获取设备最新浓度信息
@@ -395,8 +402,7 @@
val address = result?.regeocodeAddress?.formatAddress
val temp = StringBuilder()
if (address!!.length > 16) {
- temp.append(address.substring(0, 14))
- .append("\r\n")
+ temp.append(address.substring(0, 14)).append("\r\n")
.append(address.substring(16))
} else {
temp.append(address)
@@ -430,9 +436,7 @@
}
}
//查看聚合点,单独开页面导航过去
- BottomActionSheet.Builder()
- .setContext(requireContext())
- .setActionItemTitle(multiDevice)
+ BottomActionSheet.Builder().setContext(requireContext()).setActionItemTitle(multiDevice)
.setItemTextColor(Color.BLUE)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
@@ -455,12 +459,8 @@
override fun onInfoWindowClick(p0: Marker?) {
if (p0 != null) {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("操作提示")
- .setMessage("确定要前往吗")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("操作提示")
+ .setMessage("确定要前往吗").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -487,16 +487,16 @@
override fun onPause() {
super.onPause()
- homeView.mapView.onPause()
+ binding.mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- homeView.mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
- homeView.mapView.onDestroy()
+ binding.mapView.onDestroy()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
index a4e964c..cc35197 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt
@@ -4,11 +4,15 @@
import android.content.Intent
import android.net.Uri
import android.os.Build
+import android.os.Bundle
import android.os.CountDownTimer
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.FragmentMineBinding
import com.casic.smarttube.extensions.appendDownloadUrl
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.AuthenticationHelper
@@ -36,22 +40,10 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
-import kotlinx.android.synthetic.main.fragment_mine.aboutUsLayout
-import kotlinx.android.synthetic.main.fragment_mine.cacheSizeView
-import kotlinx.android.synthetic.main.fragment_mine.changePwdLayout
-import kotlinx.android.synthetic.main.fragment_mine.clearCacheLayout
-import kotlinx.android.synthetic.main.fragment_mine.loginOutButton
-import kotlinx.android.synthetic.main.fragment_mine.updateLogLayout
-import kotlinx.android.synthetic.main.fragment_mine.updateUserButton
-import kotlinx.android.synthetic.main.fragment_mine.updateVersionLayout
-import kotlinx.android.synthetic.main.fragment_mine.userDeptView
-import kotlinx.android.synthetic.main.fragment_mine.userImageView
-import kotlinx.android.synthetic.main.fragment_mine.userNameView
-import kotlinx.android.synthetic.main.fragment_mine.userPhoneView
import java.io.File
import java.nio.charset.StandardCharsets
-class MinePageFragment : KotlinBaseFragment() {
+class MinePageFragment : KotlinBaseFragment() {
private val kTag = "MinePageFragment"
private lateinit var userData: UserDetailModel.Data
@@ -60,13 +52,17 @@
private lateinit var versionViewModel: VersionViewModel
private lateinit var progressDialog: ProgressDialog
- override fun initLayoutView(): Int = R.layout.fragment_mine
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentMineBinding {
+ return FragmentMineBinding.inflate(inflater, container, false)
+ }
override fun setupTopBarLayout() {
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
versionViewModel = ViewModelProvider(this)[VersionViewModel::class.java]
@@ -98,8 +94,7 @@
versionViewModel.loadState.observe(this) {
when (it) {
is LoadState.Loading -> LoadingDialogHub.show(
- requireActivity(),
- "检查版本中,请稍后"
+ requireActivity(), "检查版本中,请稍后"
)
else -> LoadingDialogHub.dismiss()
@@ -108,49 +103,45 @@
}
override fun initEvent() {
- userImageView.setOnClickListener {
+ binding.userImageView.setOnClickListener {
"尽情期待~".show(requireContext())
}
- updateUserButton.setOnClickListener {
+ binding.updateUserButton.setOnClickListener {
LoadingDialogHub.show(requireActivity(), "同步中,请稍后...")
userViewModel.obtainUserDetail()
}
- changePwdLayout.setOnClickListener {
- ChangePasswordDialog.Builder()
- .setContext(requireContext())
+ binding.changePwdLayout.setOnClickListener {
+ ChangePasswordDialog.Builder().setContext(requireContext())
.setOnDialogButtonClickListener(object :
ChangePasswordDialog.OnDialogButtonClickListener {
override fun onConfirmClick(oldPwd: String, newPwd: String) {
- val publicKey =
- RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
+ val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!!
val oldPassKey = RSAUtils.encryptDataByPublicKey(
- oldPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
val newPassKey = RSAUtils.encryptDataByPublicKey(
- newPwd.toByteArray(StandardCharsets.UTF_8),
- publicKey
+ newPwd.toByteArray(StandardCharsets.UTF_8), publicKey
)
userViewModel.changePassword(oldPassKey, newPassKey)
}
}).build().show()
}
- aboutUsLayout.setOnClickListener {
+ binding.aboutUsLayout.setOnClickListener {
requireContext().navigatePageTo()
}
- updateVersionLayout.setOnClickListener {
+ binding.updateVersionLayout.setOnClickListener {
versionViewModel.updateVersion()
}
- updateLogLayout.setOnClickListener {
+ binding.updateLogLayout.setOnClickListener {
"尽情期待~".show(requireContext())
}
- clearCacheLayout.setOnClickListener {
+ binding.clearCacheLayout.setOnClickListener {
//删除缓存之后在设置缓存大小
LoadingDialogHub.show(requireActivity(), "清理中,请稍后")
File(requireContext().cacheDir.path).deleteFile()
@@ -161,18 +152,14 @@
override fun onFinish() {
LoadingDialogHub.dismiss()
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
}
}.start()
}
- loginOutButton.setOnClickListener {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("退出登录")
- .setMessage("确定要退出吗?")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ binding.loginOutButton.setOnClickListener {
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("退出登录")
+ .setMessage("确定要退出吗?").setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
@@ -203,13 +190,9 @@
if (BuildConfig.VERSION_NAME == it.version) {
"已是最新版本,无需更新".show(requireContext())
} else {
- AlertControlDialog.Builder()
- .setContext(requireContext())
- .setTitle("提示")
- .setMessage("有新版本,是否更新?")
- .setNegativeButton("稍后再说")
- .setPositiveButton("立即下载")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(requireContext()).setTitle("提示")
+ .setMessage("有新版本,是否更新?").setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onConfirmClick() {
downloadApk(it.downloadUrl)
@@ -244,7 +227,7 @@
updateUserInfo()
}
//缓存
- cacheSizeView.text = collectApplicationCache().formatFileSize()
+ binding.cacheSizeView.text = collectApplicationCache().formatFileSize()
super.onResume()
}
@@ -258,9 +241,9 @@
// R.color.mainThemeColor.convertColor(requireContext())
// )
// userImageView.setImageDrawable(roundDrawable)
- userNameView.text = userData.name
- userPhoneView.text = String.format("电话:${userData.phone}")
- userDeptView.text = String.format("部门:${userData.deptName}")
+ binding.userNameView.text = userData.name
+ binding.userPhoneView.text = String.format("电话:${userData.phone}")
+ binding.userDeptView.text = String.format("部门:${userData.deptName}")
}
private fun downloadApk(url: String?) {
@@ -275,7 +258,8 @@
* */
val downloadPath = url!!.appendDownloadUrl()
//开始下载
- downloadPath.downloadFile(requireContext().createDownloadFileDir().toString(),
+ downloadPath.downloadFile(
+ requireContext().createDownloadFileDir().toString(),
object : OnDownloadListener {
override fun onDownloadStart(totalBytes: Long) {
progressDialog.max = totalBytes.toInt()
diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
index b009850..c0afcc5 100644
--- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
+++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt
@@ -1,8 +1,11 @@
package com.casic.smarttube.fragment
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
import com.casic.smarttube.adapter.OverviewGroupListAdapter
+import com.casic.smarttube.databinding.FragmentOverviewBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.ProjectGroupModel
import com.casic.smarttube.view.GroupDeviceActivity
@@ -11,25 +14,25 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
-import kotlinx.android.synthetic.main.fragment_overview.groupRecyclerView
-import kotlinx.android.synthetic.main.fragment_overview.rightOptionView
-import kotlinx.android.synthetic.main.fragment_overview.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class OverviewFragment : KotlinBaseFragment() {
+class OverviewFragment : KotlinBaseFragment() {
private lateinit var groupViewModel: ProjectGroupViewModel
private var dataBeans: MutableList = ArrayList()
private lateinit var groupListAdapter: OverviewGroupListAdapter
private var clickedPosition = 0
- override fun initLayoutView(): Int = R.layout.fragment_overview
-
- override fun setupTopBarLayout() {
- titleView.text = "概览"
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentOverviewBinding {
+ return FragmentOverviewBinding.inflate(inflater, container, false)
}
- override fun initData() {
+ override fun setupTopBarLayout() {
+ binding.titleView.text = "概览"
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
}
@@ -43,7 +46,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
groupViewModel.obtainProGroupList()
"刷新数据中,请稍后".show(requireContext())
}
@@ -51,16 +54,16 @@
groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
if (it.data.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
groupViewModel.obtainProGroupList()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
dataBeans.clear()
dataBeans = it.data
groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data)
- groupRecyclerView!!.adapter = groupListAdapter
+ binding.groupRecyclerView.adapter = groupListAdapter
groupListAdapter.setOnItemClickListener(object :
OverviewGroupListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
diff --git a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
index e424721..7f036b0 100644
--- a/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
+++ b/app/src/main/java/com/casic/smarttube/utils/RouteOnMap.kt
@@ -4,8 +4,8 @@
import android.graphics.Color
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Poi
-import com.pengxh.kt.lite.extensions.showBusRouteOnMap
-import com.pengxh.kt.lite.extensions.showRouteOnMap
+import com.casic.smarttube.extensions.showBusRouteOnMap
+import com.casic.smarttube.extensions.showRouteOnMap
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
object RouteOnMap {
diff --git a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
index 65bba6f..598581a 100644
--- a/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AboutUsActivity.kt
@@ -1,27 +1,29 @@
package com.casic.smarttube.view
+import android.os.Bundle
import com.casic.smarttube.BuildConfig
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityAboutUsBinding
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_about_us.*
-import kotlinx.android.synthetic.main.include_base_title.*
-class AboutUsActivity : KotlinBaseActivity() {
+class AboutUsActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_about_us
+ override fun initViewBinding(): ActivityAboutUsBinding {
+ return ActivityAboutUsBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "关于我们"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "关于我们"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ binding.versionCodeView.text = String.format("版本信息:V${BuildConfig.VERSION_NAME}")
}
override fun observeRequestState() {
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 415f9dd..80b83bd 100644
--- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.text.Editable
@@ -15,6 +16,7 @@
import com.amap.api.location.AMapLocation
import com.casic.smarttube.R
import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.smarttube.databinding.ActivityAddDeviceBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.compressImage
import com.casic.smarttube.extensions.isNumber
@@ -47,24 +49,9 @@
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import kotlinx.android.synthetic.main.activity_add_device.addDeviceTimeView
-import kotlinx.android.synthetic.main.activity_add_device.addImageRecyclerView
-import kotlinx.android.synthetic.main.activity_add_device.collectIntervalView
-import kotlinx.android.synthetic.main.activity_add_device.deviceCodeView
-import kotlinx.android.synthetic.main.activity_add_device.deviceNameView
-import kotlinx.android.synthetic.main.activity_add_device.inputLengthView
-import kotlinx.android.synthetic.main.activity_add_device.latitudeView
-import kotlinx.android.synthetic.main.activity_add_device.locationImageView
-import kotlinx.android.synthetic.main.activity_add_device.longitudeView
-import kotlinx.android.synthetic.main.activity_add_device.ownerShipView
-import kotlinx.android.synthetic.main.activity_add_device.scannerView
-import kotlinx.android.synthetic.main.activity_add_device.sceneEditView
-import kotlinx.android.synthetic.main.activity_add_device.submitButton
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
import java.io.File
-class AddDeviceActivity : KotlinBaseActivity() {
+class AddDeviceActivity : KotlinBaseActivity() {
private val kTag = "AddDeviceActivity"
private lateinit var imageAdapter: EditableImageAdapter
@@ -81,21 +68,23 @@
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data!!
- longitudeView.text = data.getStringExtra("longitude")
- latitudeView.text = data.getStringExtra("latitude")
+ binding.longitudeView.text = data.getStringExtra("longitude")
+ binding.latitudeView.text = data.getStringExtra("latitude")
}
}
- override fun initLayoutView(): Int = R.layout.activity_add_device
+ override fun initViewBinding(): ActivityAddDeviceBinding {
+ return ActivityAddDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "添加设备"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "添加设备"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
weakReferenceHandler = WeakReferenceHandler(callback)
uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -119,17 +108,17 @@
override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
- scannerView.setOnClickListener {
+ binding.scannerView.setOnClickListener {
manager.startScan(this) {
if (it.content.isNumber()) {
- deviceCodeView.setText(it.content)
+ binding.deviceCodeView.setText(it.content)
} else {
"设备编号错误,请检查标签".show(context)
}
}
}
- ownerShipView.setOnClickListener {
+ binding.ownerShipView.setOnClickListener {
groupViewModel.obtainGroupList()
}
groupViewModel.groupListModel.observe(this) {
@@ -147,19 +136,14 @@
groups.add("自定义")
}
if (groups.isNotEmpty()) {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(groups)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
if (groups[position] == "自定义") {
- AlertInputDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertInputDialog.Builder().setContext(context).setTitle("提示")
.setHintMessage("请输入该设备所属项目名,如:项目203")
- .setNegativeButton("取消")
- .setPositiveButton("确定")
+ .setNegativeButton("取消").setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertInputDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -167,12 +151,11 @@
}
override fun onConfirmClick(value: String) {
- ownerShipView.text = value
+ binding.ownerShipView.text = value
}
- })
- .build().show()
+ }).build().show()
} else {
- ownerShipView.text = groups[position]
+ binding.ownerShipView.text = groups[position]
}
}
}).build().show()
@@ -180,27 +163,22 @@
}
//默认频率1min
- collectIntervalView.text = frequency[0]
- collectIntervalView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ binding.collectIntervalView.text = frequency[0]
+ binding.collectIntervalView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- collectIntervalView.text = frequency[position]
+ binding.collectIntervalView.text = frequency[position]
}
}).build().show()
}
- locationImageView.setOnClickListener {
- BottomActionSheet.Builder()
- .setContext(context)
- .setItemTextColor(Color.BLUE)
+ binding.locationImageView.setOnClickListener {
+ BottomActionSheet.Builder().setContext(context).setItemTextColor(Color.BLUE)
.setActionItemTitle(arrayListOf("自动定位", "手动选点"))
- .setOnActionSheetListener(object :
- BottomActionSheet.OnActionSheetListener {
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
@@ -210,30 +188,32 @@
override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
LoadingDialogHub.dismiss()
if (aMapLocation == null) {
- longitudeView.text = "定位失败"
- latitudeView.text = "定位失败"
+ binding.longitudeView.text = "定位失败"
+ binding.latitudeView.text = "定位失败"
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.redTextColor.convertColor(context)
)
} else {
- longitudeView.text =
+ binding.longitudeView.text =
aMapLocation.longitude.toString()
- latitudeView.text = aMapLocation.latitude.toString()
+ binding.latitudeView.text =
+ aMapLocation.latitude.toString()
- longitudeView.setTextColor(
+ binding.longitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
- latitudeView.setTextColor(
+ binding.latitudeView.setTextColor(
R.color.mainTextColor.convertColor(context)
)
}
}
})
}
+
1 -> selectLocationLauncher.launch(
Intent(context, SelectLocationActivity::class.java)
)
@@ -243,7 +223,7 @@
}
imageAdapter = EditableImageAdapter(this, 3, 13f)
- addImageRecyclerView.adapter = imageAdapter
+ binding.addImageRecyclerView.adapter = imageAdapter
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -281,7 +261,7 @@
}
}
- sceneEditView.addTextChangedListener(object : TextWatcher {
+ binding.sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
@@ -292,31 +272,31 @@
override fun afterTextChanged(s: Editable?) {
val text = s.toString().trim()
- inputLengthView.text = String.format("${text.length}/100")
+ binding.inputLengthView.text = String.format("${text.length}/100")
if (text.length > 100) {
- inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.redTextColor.convertColor(context))
"现场情况字符不能超过100个字符".show(context)
} else {
- inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
+ binding.inputLengthView.setTextColor(R.color.subTextColor.convertColor(context))
}
}
})
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+ binding.addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- submitButton.setOnClickListener {
- val deviceCode = deviceCodeView.text.toString().trim()
+ binding.submitButton.setOnClickListener {
+ val deviceCode = binding.deviceCodeView.text.toString().trim()
if (deviceCode.isBlank()) {
"请输入设备编号".show(context)
return@setOnClickListener
}
- val ownerShip = ownerShipView.text.toString().trim()
+ val ownerShip = binding.ownerShipView.text.toString().trim()
if (ownerShip.isBlank()) {
"请输入设备所属项目".show(context)
return@setOnClickListener
}
- val longitude = longitudeView.text.toString().trim()
- val latitude = latitudeView.text.toString().trim()
+ val longitude = binding.longitudeView.text.toString().trim()
+ val latitude = binding.latitudeView.text.toString().trim()
if (longitude.isBlank() || latitude.isBlank()) {
"请先获取当前经纬度".show(context)
return@setOnClickListener
@@ -329,14 +309,14 @@
)
deviceViewModel.addDevice(
deviceCode,
- deviceNameView.text.toString(),
+ binding.deviceNameView.text.toString(),
ownerShip,
- collectIntervalView.text.toString(),
+ binding.collectIntervalView.text.toString(),
longitude,
latitude,
imagePaths.reformat(),
- sceneEditView.text.toString().trim(),
- addDeviceTimeView.text.toString(),
+ binding.sceneEditView.text.toString().trim(),
+ binding.addDeviceTimeView.text.toString(),
userData.id.toString(),
userData.deptId
)
@@ -345,16 +325,13 @@
}
private fun selectPicture() {
- BottomActionSheet.Builder()
- .setContext(this)
- .setItemTextColor(Color.BLUE)
+ BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE)
.setActionItemTitle(listOf("拍照", "相册"))
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
when (position) {
0 -> {
- PictureSelector.create(context)
- .openCamera(SelectMimeType.ofImage())
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
if (result == null) {
@@ -362,8 +339,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
analyticalSelectResults(result[0])
@@ -374,14 +350,11 @@
}
})
}
+
1 -> {
- PictureSelector.create(context)
- .openGallery(SelectMimeType.ofImage())
- .isGif(false)
- .isMaxSelectEnabledMask(true)
- .setFilterMinFileSize(100)
- .setMaxSelectNum(3)
- .isDisplayCamera(false)
+ PictureSelector.create(context).openGallery(SelectMimeType.ofImage())
+ .isGif(false).isMaxSelectEnabledMask(true).setFilterMinFileSize(100)
+ .setMaxSelectNum(3).isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
@@ -390,8 +363,7 @@
return
}
LoadingDialogHub.show(
- this@AddDeviceActivity,
- "图片上传中,请稍后..."
+ this@AddDeviceActivity, "图片上传中,请稍后..."
)
selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
index 3864f16..e4f19a4 100644
--- a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,19 +11,20 @@
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityBigImageBinding
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.photoview.PhotoView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.PageNavigationManager
-import kotlinx.android.synthetic.main.activity_big_image.*
-import java.util.*
-class BigImageActivity : KotlinBaseActivity() {
+class BigImageActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_big_image
+ override fun initViewBinding(): ActivityBigImageBinding {
+ return ActivityBigImageBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
PageNavigationManager.addActivity(this)
@@ -30,16 +32,16 @@
ImmersionBar.with(this).statusBarDarkFont(false).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
if (urls == null || urls.size == 0) {
return
}
- pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
- imagePagerView.adapter = BigImageAdapter(this, urls)
- imagePagerView.currentItem = index
- imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ binding.imagePagerView.adapter = BigImageAdapter(this, urls)
+ binding.imagePagerView.currentItem = index
+ binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -53,7 +55,8 @@
}
override fun onPageSelected(position: Int) {
- pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ binding.pageNumberView.text =
+ String.format("(" + (position + 1) + "/" + urls.size + ")")
}
})
}
@@ -63,7 +66,7 @@
}
override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
+ binding.leftBackView.setOnClickListener { this.finish() }
}
class BigImageAdapter(private var context: Context, imageList: ArrayList) :
diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
index 072953f..f036a78 100644
--- a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.graphics.Color
+import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.model.LatLng
@@ -10,6 +11,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityDeviceDetailBinding
import com.casic.smarttube.extensions.combineImagePath
import com.casic.smarttube.extensions.toSignalImage
import com.casic.smarttube.model.DeviceDetailModel
@@ -25,51 +27,39 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_device_detail.densityView
-import kotlinx.android.synthetic.main.activity_device_detail.descriptionView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView
-import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView
-import kotlinx.android.synthetic.main.activity_device_detail.imageGridView
-import kotlinx.android.synthetic.main.activity_device_detail.lastDataView
-import kotlinx.android.synthetic.main.activity_device_detail.leftBackView
-import kotlinx.android.synthetic.main.activity_device_detail.locationView
-import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView
-import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView
-import kotlinx.android.synthetic.main.activity_device_detail.signalImageView
-import kotlinx.android.synthetic.main.activity_device_detail.titleView
-class DeviceDetailActivity : KotlinBaseActivity() {
+class DeviceDetailActivity : KotlinBaseActivity() {
private val kTag = "DeviceDetailActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var deviceModel: DeviceDetailModel.DataModel
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_device_detail
+ override fun initViewBinding(): ActivityDeviceDetailBinding {
+ return ActivityDeviceDetailBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备详情"
- leftBackView.setOnClickListener { finish() }
+ binding.titleView.text = "设备详情"
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
deviceViewModel.obtainDeviceDetail(params[0], params[1])
deviceViewModel.deviceDetailModel.observe(this) {
if (it.code == 200) {
val device = it.data
this.deviceModel = device
- deviceCodeView.text = device.devcode
- deviceNameView.text = device.deviceName
- projectGroupView.text = String.format("项目${device.groupId}")
+ binding.deviceCodeView.text = device.devcode
+ binding.deviceNameView.text = device.deviceName
+ binding.projectGroupView.text = String.format("项目${device.groupId}")
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -81,7 +71,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text = result?.regeocodeAddress?.formatAddress
+ binding.locationView.text = result?.regeocodeAddress?.formatAddress
}
}
@@ -90,12 +80,12 @@
}
})
}
- descriptionView.text = device.descn
+ binding.descriptionView.text = device.descn
if (device.photos.toString().isBlank()) {
- imageGridView.visibility = View.GONE
+ binding.imageGridView.visibility = View.GONE
} else {
- imageGridView.visibility = View.VISIBLE
+ binding.imageGridView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
val imageArray = device.photos.toString().split(",")
@@ -104,10 +94,9 @@
urls.add(path.combineImagePath())
}
}
- val imageAdapter = ReadOnlyImageAdapter(this)
- imageAdapter.setImageList(urls)
- imageGridView.adapter = imageAdapter
- imageGridView.setOnItemClickListener { _, _, position, _ ->
+ val imageAdapter = ReadOnlyImageAdapter(this, urls)
+ binding.imageGridView.adapter = imageAdapter
+ binding.imageGridView.setOnItemClickListener { _, _, position, _ ->
if (urls[position].isEmpty()) {
"图片加载失败,无法查看大图".show(this)
} else {
@@ -119,18 +108,18 @@
val value = device.stregnth.toDouble().toInt()
val level = "$value%"
val ppm = "${value * 500}ppm"
- densityView.text = "$level(相当于$ppm)"
+ binding.densityView.text = "$level(相当于$ppm)"
- lastDataView.text = device.uptime
+ binding.lastDataView.text = device.uptime
if (device.onlineState == "0") {
- deviceStateView.text = "离线"
- deviceStateView.setTextColor(Color.RED)
+ binding.deviceStateView.text = "离线"
+ binding.deviceStateView.setTextColor(Color.RED)
} else {
- deviceStateView.text = "在线"
- deviceStateView.setTextColor(Color.GREEN)
+ binding.deviceStateView.text = "在线"
+ binding.deviceStateView.setTextColor(Color.GREEN)
}
- signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
- deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
+ binding.signalImageView.setBackgroundResource(device.rsrp.toSignalImage())
+ binding.deviceBatteryView.text = if (device.cell.isNullOrBlank()) {
"0%"
} else {
device.cell + "%"
@@ -149,7 +138,7 @@
}
override fun initEvent() {
- rightOptionView.setOnClickListener {
+ binding.rightOptionView.setOnClickListener {
val lat = deviceModel.latGaode.toString()
val lng = deviceModel.lngGaode.toString()
if (lat.isBlank() || lng.isBlank()) {
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 0ae8862..ba52ab8 100644
--- a/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/GroupDeviceActivity.kt
@@ -1,6 +1,7 @@
package com.casic.smarttube.view
import android.content.Context
+import android.os.Bundle
import android.os.Handler
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -8,6 +9,7 @@
import androidx.recyclerview.widget.RecyclerView
import com.casic.smarttube.R
import com.casic.smarttube.adapter.DeviceListAdapter
+import com.casic.smarttube.databinding.ActivityGroupDeviceBinding
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.DeviceListModel
import com.casic.smarttube.utils.LoadingDialogHub
@@ -28,14 +30,8 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction
import com.qmuiteam.qmui.recyclerView.QMUISwipeAction
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceLayout
-import kotlinx.android.synthetic.main.activity_group_device.groupDeviceView
-import kotlinx.android.synthetic.main.activity_group_device.leftBackView
-import kotlinx.android.synthetic.main.activity_group_device.rightOptionView
-import kotlinx.android.synthetic.main.activity_group_device.titleView
-import kotlinx.android.synthetic.main.include_empty_view.emptyView
-class GroupDeviceActivity : KotlinBaseActivity() {
+class GroupDeviceActivity : KotlinBaseActivity() {
private lateinit var groupId: String
private lateinit var weakReferenceHandler: WeakReferenceHandler
@@ -51,18 +47,19 @@
private var clickedPosition = 0
private var isDeleteAll = false
- override fun initLayoutView(): Int = R.layout.activity_group_device
+ override fun initViewBinding(): ActivityGroupDeviceBinding {
+ return ActivityGroupDeviceBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
- rightOptionView.setOnClickListener {
+ binding.leftBackView.setOnClickListener { finish() }
+ binding.rightOptionView.setOnClickListener {
//改为Popup
val easyPopupWindow = EasyPopupWindow(this)
easyPopupWindow.setPopupMenuItem(
- LocaleConstant.DEVICE_OPERATE_IMAGES,
- LocaleConstant.DEVICE_OPERATE_TITLES
+ LocaleConstant.DEVICE_OPERATE_IMAGES, LocaleConstant.DEVICE_OPERATE_TITLES
)
easyPopupWindow.setOnPopupWindowClickListener(object :
EasyPopupWindow.OnPopupWindowClickListener {
@@ -77,13 +74,11 @@
pageIndex = 1
obtainDeviceListByPage()
}
+
1 -> {
- AlertControlDialog.Builder()
- .setContext(context)
- .setTitle("提示")
+ AlertControlDialog.Builder().setContext(context).setTitle("提示")
.setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
+ .setNegativeButton("容我想想").setPositiveButton("已经想好")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
@@ -103,13 +98,11 @@
}
}).build().show()
}
+
2 -> {
- MultiSelectDialog.Builder()
- .setContext(this@GroupDeviceActivity)
- .setTitle("选择设备")
- .setDataSource(dataBeans)
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
+ MultiSelectDialog.Builder().setContext(this@GroupDeviceActivity)
+ .setTitle("选择设备").setDataSource(dataBeans)
+ .setNegativeButton("取消").setPositiveButton("选好了")
.setOnDialogButtonClickListener(object :
MultiSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(selectedModels: MutableList) {
@@ -126,21 +119,20 @@
override fun onCancelClick() {
}
- })
- .build().show()
+ }).build().show()
}
}
}
})
easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(rightOptionView, x, 0)
+ val x: Int = binding.rightOptionView.width - easyPopupWindow.width
+ easyPopupWindow.showAsDropDown(binding.rightOptionView, x, 0)
}
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
groupId = intent.getStringExtra(Constant.INTENT_PARAM)!!
- titleView.text = String.format(groupId + "项目设备列表")
+ binding.titleView.text = String.format(groupId + "项目设备列表")
weakReferenceHandler = WeakReferenceHandler(callback)
groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
@@ -157,13 +149,13 @@
}
override fun initEvent() {
- groupDeviceLayout.setOnRefreshListener {
+ binding.groupDeviceLayout.setOnRefreshListener {
isRefresh = true
//刷新之后页码重置
pageIndex = 1
obtainDeviceListByPage()
}
- groupDeviceLayout.setOnLoadMoreListener {
+ binding.groupDeviceLayout.setOnLoadMoreListener {
isLoadMore = true
pageIndex++
obtainDeviceListByPage()
@@ -176,7 +168,7 @@
isRefresh -> {
dataBeans.clear()
dataBeans = dataRows!!
- groupDeviceLayout.finishRefresh()
+ binding.groupDeviceLayout.finishRefresh()
isRefresh = false
}
@@ -185,7 +177,7 @@
"到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
- groupDeviceLayout.finishLoadMore()
+ binding.groupDeviceLayout.finishLoadMore()
isLoadMore = false
}
@@ -211,7 +203,7 @@
)
}
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
@@ -230,15 +222,15 @@
deviceAdapter.notifyDataSetChanged()
} else {
if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("这里什么都没有") {
+ binding.emptyInclude.emptyView.showEmptyPage("这里什么都没有") {
pageIndex = 1
obtainDeviceListByPage()
}
} else {
- emptyView!!.hide()
+ binding.emptyInclude.emptyView.hide()
deviceAdapter = DeviceListAdapter(this, dataBeans)
//绑定侧滑事件
- swipeAction.attachToRecyclerView(groupDeviceView)
+ swipeAction.attachToRecyclerView(binding.groupDeviceView)
val linearLayoutManager = object : LinearLayoutManager(this) {
override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
return RecyclerView.LayoutParams(
@@ -247,8 +239,8 @@
)
}
}
- groupDeviceView.layoutManager = linearLayoutManager
- groupDeviceView.adapter = deviceAdapter
+ binding.groupDeviceView.layoutManager = linearLayoutManager
+ binding.groupDeviceView.adapter = deviceAdapter
deviceAdapter.setOnItemClickListener(object :
DeviceListAdapter.OnItemClickListener {
override fun onClicked(position: Int) {
@@ -311,13 +303,9 @@
})
private fun deleteItem(adapterPosition: Int) {
- AlertControlDialog.Builder()
- .setContext(this)
- .setTitle("提示")
- .setMessage("删除后将无法恢复,是否继续?")
- .setNegativeButton("容我想想")
- .setPositiveButton("已经想好")
- .setOnDialogButtonClickListener(object :
+ AlertControlDialog.Builder().setContext(this).setTitle("提示")
+ .setMessage("删除后将无法恢复,是否继续?").setNegativeButton("容我想想")
+ .setPositiveButton("已经想好").setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
override fun onCancelClick() {
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 71f438c..70e49f0 100644
--- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt
@@ -1,9 +1,11 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import androidx.lifecycle.ViewModelProvider
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityHistoryDataBinding
import com.casic.smarttube.extensions.dateToMonthDay
import com.casic.smarttube.extensions.getQuarterOfYear
import com.casic.smarttube.utils.ChartViewHelper
@@ -22,27 +24,26 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_history_data.dataLineChart
-import kotlinx.android.synthetic.main.activity_history_data.leftBackView
-import kotlinx.android.synthetic.main.activity_history_data.periodSpinner
import java.util.Calendar
-class HistoryDataActivity : KotlinBaseActivity() {
+class HistoryDataActivity : KotlinBaseActivity() {
private val kTag = "HistoryDataActivity"
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupId: String
private lateinit var devCode: String
- override fun initLayoutView(): Int = R.layout.activity_history_data
+ override fun initViewBinding(): ActivityHistoryDataBinding {
+ return ActivityHistoryDataBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- leftBackView.setOnClickListener { finish() }
+ binding.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
groupId = params[0]
devCode = params[1]
@@ -61,8 +62,8 @@
override fun initEvent() {
//默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ binding.periodSpinner.setSelection(3)
+ binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?, view: View?, position: Int, id: Long
) {
@@ -76,6 +77,7 @@
groupId, devCode, "$year-01-01", time.timestampToCompleteDate()
)
}
+
1 -> {
//本季度
val startDate = when (time.getQuarterOfYear()) {
@@ -89,6 +91,7 @@
groupId, devCode, startDate, time.timestampToCompleteDate()
)
}
+
2 -> {
//近30日
deviceViewModel.obtainDeviceHistoryData(
@@ -98,6 +101,7 @@
time.timestampToCompleteDate()
)
}
+
3 -> {
//近7日
deviceViewModel.obtainDeviceHistoryData(
@@ -107,19 +111,18 @@
time.timestampToCompleteDate()
)
}
+
4 -> {
//今日
deviceViewModel.obtainDeviceHistoryData(
groupId, devCode, time.timestampToDate(), time.timestampToCompleteDate()
)
}
+
5 -> {
- DateSelectDialog.Builder()
- .setContext(this@HistoryDataActivity)
- .setTitle("选择日期")
- .setNegativeButton("取消")
- .setPositiveButton("选好了")
- .setOnDialogButtonClickListener(object :
+ DateSelectDialog.Builder().setContext(this@HistoryDataActivity)
+ .setTitle("选择日期").setNegativeButton("取消")
+ .setPositiveButton("选好了").setOnDialogButtonClickListener(object :
DateSelectDialog.OnDialogButtonClickListener {
override fun onConfirmClick(startDate: String, endDate: String) {
deviceViewModel.obtainDeviceHistoryData(
@@ -129,12 +132,10 @@
override fun onCancelClick() {
//选择取消就默认加载近7天的数据
- periodSpinner.setSelection(3)
+ binding.periodSpinner.setSelection(3)
}
- })
- .setFragmentManager(supportFragmentManager)
- .setCalendarType(Type.YEAR_MONTH_DAY)
- .build().show()
+ }).setFragmentManager(supportFragmentManager)
+ .setCalendarType(Type.YEAR_MONTH_DAY).build().show()
}
}
}
@@ -159,7 +160,9 @@
Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度")
)
}
- ChartViewHelper.setLineChartData(dataLineChart, xAxisLabels, strengthEntries)
+ ChartViewHelper.setLineChartData(
+ binding.dataLineChart, xAxisLabels, strengthEntries
+ )
}
}
}
diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
index ebca433..f947b2c 100644
--- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt
@@ -1,7 +1,8 @@
package com.casic.smarttube.view
+import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
-import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityLoginBinding
import com.casic.smarttube.utils.AuthenticationHelper
import com.casic.smarttube.utils.LoadingDialogHub
import com.casic.smarttube.utils.LocaleConstant
@@ -14,26 +15,29 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
-import kotlinx.android.synthetic.main.activity_login.loginButton
-import kotlinx.android.synthetic.main.activity_login.userNameView
-import kotlinx.android.synthetic.main.activity_login.userPasswordView
-class LoginActivity : KotlinBaseActivity() {
+class LoginActivity : KotlinBaseActivity() {
private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var loginViewModel: LoginViewModel
private lateinit var userViewModel: UserViewModel
- override fun initLayoutView(): Int = R.layout.activity_login
+ override fun initViewBinding(): ActivityLoginBinding {
+ return ActivityLoginBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(true).init()
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
// 设置默认账号密码
- userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String)
+ binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ binding.userPasswordView.setText(
+ SaveKeyValues.getValue(
+ LocaleConstant.PASSWORD, ""
+ ) as String
+ )
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
@@ -50,9 +54,9 @@
}
override fun initEvent() {
- loginButton.setOnClickListener {
- val account = userNameView.text.toString().trim()
- val userPassword = userPasswordView.text.toString().trim()
+ binding.loginButton.setOnClickListener {
+ val account = binding.userNameView.text.toString().trim()
+ val userPassword = binding.userPasswordView.text.toString().trim()
if (account.isBlank()) {
"用户名不能为空".show(this)
return@setOnClickListener
@@ -74,8 +78,8 @@
AuthenticationHelper.savePublicKey(keyString)
val publicKey = RSAUtils.keyStrToPublicKey(keyString)
- val account = userNameView.text.toString()
- val userPassword = userPasswordView.text.toString()
+ val account = binding.userNameView.text.toString()
+ val userPassword = binding.userPasswordView.text.toString()
val dataByPublicKey =
RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!)
//登录并获取Token,POST请求
diff --git a/app/src/main/java/com/casic/smarttube/view/MainActivity.kt b/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
index 4461757..575e1ee 100644
--- a/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.smarttube.view
+import android.os.Bundle
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,6 +8,7 @@
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityMainBinding
import com.casic.smarttube.fragment.HomePageFragment
import com.casic.smarttube.fragment.MinePageFragment
import com.casic.smarttube.fragment.OverviewFragment
@@ -15,9 +17,8 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_main.*
-class MainActivity : KotlinBaseActivity() {
+class MainActivity : KotlinBaseActivity() {
private var menuItem: MenuItem? = null
private var fragmentList: MutableList = ArrayList()
@@ -29,32 +30,36 @@
fragmentList.add(MinePageFragment())
}
- override fun initLayoutView(): Int = R.layout.activity_main
+ override fun initViewBinding(): ActivityMainBinding {
+ return ActivityMainBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
}
- override fun initData() {
+ override fun initOnCreate(savedInstanceState: Bundle?) {
//保留icon原图颜色
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnItemSelectedListener { menuItem ->
+ binding.bottomNavigation.itemIconTintList = null
+ binding.bottomNavigation.setOnItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ binding.mainViewPager.currentItem = 0
}
+
R.id.nav_overview -> {
- mainViewPager.currentItem = 1
+ binding.mainViewPager.currentItem = 1
}
+
R.id.nav_mine -> {
- mainViewPager.currentItem = 2
+ binding.mainViewPager.currentItem = 2
}
}
false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentList, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentList.size //缓存页数
+ binding.mainViewPager.adapter = ViewPagerAdapter(fragmentList, supportFragmentManager)
+ binding.mainViewPager.offscreenPageLimit = fragmentList.size //缓存页数
}
override fun observeRequestState() {
@@ -62,7 +67,7 @@
}
override fun initEvent() {
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ binding.mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@@ -77,9 +82,9 @@
if (menuItem != null) {
menuItem!!.isChecked = false
} else {
- bottomNavigation.menu.getItem(0).isChecked = false
+ binding.bottomNavigation.menu.getItem(0).isChecked = false
}
- menuItem = bottomNavigation.menu.getItem(position)
+ menuItem = binding.bottomNavigation.menu.getItem(position)
menuItem!!.isChecked = true
}
})
diff --git a/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt b/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt
index f00e0ca..908aade 100644
--- a/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/MapDeviceBriefActivity.kt
@@ -15,6 +15,7 @@
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.casic.smarttube.R
+import com.casic.smarttube.databinding.ActivityMapDeviceBriefBinding
import com.casic.smarttube.utils.LoadingDialogHub
import com.casic.smarttube.utils.RouteOnMap
import com.casic.smarttube.vm.DeviceViewModel
@@ -24,16 +25,8 @@
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
-import kotlinx.android.synthetic.main.activity_map_device_brief.deviceCodeView
-import kotlinx.android.synthetic.main.activity_map_device_brief.deviceModelView
-import kotlinx.android.synthetic.main.activity_map_device_brief.deviceValueView
-import kotlinx.android.synthetic.main.activity_map_device_brief.locationView
-import kotlinx.android.synthetic.main.activity_map_device_brief.mapView
-import kotlinx.android.synthetic.main.activity_map_device_brief.updateTimeView
-import kotlinx.android.synthetic.main.include_base_title.leftBackView
-import kotlinx.android.synthetic.main.include_base_title.titleView
-class MapDeviceBriefActivity : KotlinBaseActivity() {
+class MapDeviceBriefActivity : KotlinBaseActivity() {
private val kTag = "MapDeviceBriefActivity"
private lateinit var deviceViewModel: DeviceViewModel
@@ -42,17 +35,19 @@
private val geocoderSearch by lazy { GeocodeSearch(this) }
- override fun initLayoutView(): Int = R.layout.activity_map_device_brief
+ override fun initViewBinding(): ActivityMapDeviceBriefBinding {
+ return ActivityMapDeviceBriefBinding.inflate(layoutInflater)
+ }
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
- titleView.text = "设备最新数据地图展示"
- leftBackView.setOnClickListener { finish() }
+ binding.titleInclude.titleView.text = "设备最新数据地图展示"
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
}
- override fun initData() {
- aMap = mapView.map
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ aMap = binding.mapView.map
aMap.mapType = AMap.MAP_TYPE_NORMAL
val uiSettings = aMap.uiSettings
uiSettings.isCompassEnabled = true
@@ -80,22 +75,22 @@
if (it.code == 200) {
val device = it.data
- deviceCodeView.text = String.format("设备编号: ${device.devcode}")
- deviceModelView.text = String.format("设备模型: ${params[2]}")
+ binding.deviceCodeView.text = String.format("设备编号: ${device.devcode}")
+ binding.deviceModelView.text = String.format("设备模型: ${params[2]}")
//获取设备最新浓度信息
deviceViewModel.obtainTubeLastData(device.groupId, device.devcode)
deviceViewModel.lastDataModel.observe(this) { v ->
if (v.code == 200) {
- deviceValueView.text = String.format("最新浓度: ${v.data.strength}")
- updateTimeView.text = String.format("更新时间: ${v.data.uptime}")
+ binding.deviceValueView.text = String.format("最新浓度: ${v.data.strength}")
+ binding.updateTimeView.text = String.format("更新时间: ${v.data.uptime}")
} else {
- deviceValueView.text = String.format("最新浓度: 未知")
- updateTimeView.text = String.format("更新时间: 未知")
+ binding.deviceValueView.text = String.format("最新浓度: 未知")
+ binding.updateTimeView.text = String.format("更新时间: 未知")
}
}
if (device.latGaode.isBlank() || device.lngGaode.isBlank()) {
- locationView.text = "经纬度异常,无法查看具体位置"
+ binding.locationView.text = "经纬度异常,无法查看具体位置"
} else {
val queryParam = RegeocodeQuery(
LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()),
@@ -108,7 +103,7 @@
GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) {
if (rCode == 1000) {
- locationView.text =
+ binding.locationView.text =
String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}")
}
}
@@ -123,8 +118,7 @@
aMap.animateCamera(newCameraPosition, 1500, object : AMap.CancelableCallback {
override fun onFinish() {
//添加Marker
- val markerOptions = MarkerOptions()
- .position(latLng)
+ val markerOptions = MarkerOptions().position(latLng)
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.well_location))
.draggable(false)
aMap.addMarker(markerOptions)
@@ -148,26 +142,26 @@
/**地图相关*********/
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- mapView.onCreate(savedInstanceState)
+ binding.mapView.onCreate(savedInstanceState)
}
override fun onResume() {
super.onResume()
- mapView.onResume()
+ binding.mapView.onResume()
}
override fun onPause() {
super.onPause()
- mapView.onPause()
+ binding.mapView.onPause()
}
override fun onDestroy() {
- mapView.onDestroy()
+ binding.mapView.onDestroy()
super.onDestroy()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- mapView.onSaveInstanceState(outState)
+ binding.mapView.onSaveInstanceState(outState)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt
index e872ef4..fc20978 100644
--- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt
@@ -13,7 +13,6 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) {
startSplashScreenActivity()
} else {
diff --git a/app/build.gradle b/app/build.gradle
index 81dccf6..defbef7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
android {
signingConfigs {
release {
- storeFile file('/Users/a203/Desktop/AndroidProjects/CasicSmartTube/app/CasicSmartTube.jks')
+ storeFile file('CasicSmartTube.jks')
storePassword '123456789'
keyAlias 'key0'
keyPassword '123456789'
@@ -21,8 +20,6 @@
targetSdkVersion 33
versionCode 2
versionName "1.0.1"
-
- ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -47,6 +44,10 @@
}
}
+ viewBinding {
+ enabled true
+ }
+
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
outputFileName = "GT_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
@@ -61,7 +62,7 @@
dependencies {
//基础依赖库
- implementation files('libs/lite-release.aar')
+ implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar
deleted file mode 100644
index 9f8c814..0000000
--- a/app/libs/lite-release.aar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cccda6d..fd9277c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,7 +81,7 @@
+ android:value="a6907c8bb931727374aa5fd500cda107" />
(), Handler.Callback,
+ AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.InfoWindowAdapter,
+ AMap.OnInfoWindowClickListener {
private val kTag = "HomePageFragment"
private val geocoderSearch by lazy { GeocodeSearch(requireContext()) }
- private lateinit var homeView: View
private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var easyPopupWindow: EasyPopupWindow
private lateinit var aMap: AMap
private lateinit var deviceViewModel: DeviceViewModel
private lateinit var groupViewModel: ProjectGroupViewModel
@@ -83,34 +89,34 @@
* */
private var mapZooms = ArrayList()
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
- homeView = inflater.inflate(R.layout.fragment_home, container, false)
+ override fun initViewBinding(
+ inflater: LayoutInflater, container: ViewGroup?
+ ): FragmentHomeBinding {
+ return FragmentHomeBinding.inflate(inflater, container, false)
+ }
- weakReferenceHandler = WeakReferenceHandler(callback)
- val easyPopupWindow = EasyPopupWindow(requireContext())
- easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
- homeView.rightOptionView.setOnClickListener {
- easyPopupWindow.setOnPopupWindowClickListener(object :
- EasyPopupWindow.OnPopupWindowClickListener {
- override fun onPopupItemClicked(position: Int) {
- when (position) {
- 0 -> aMap.mapType = AMap.MAP_TYPE_NORMAL
- 1 -> aMap.mapType = AMap.MAP_TYPE_SATELLITE
- }
- }
- })
- easyPopupWindow.setBackgroundDrawable(null)
- val x: Int = homeView.rightOptionView.width - easyPopupWindow.width
- easyPopupWindow.showAsDropDown(homeView.rightOptionView, x, 0)
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun observeRequestState() {
+ groupViewModel.loadState.observe(this) { state ->
+ when (state) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
}
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ easyPopupWindow = EasyPopupWindow(requireContext())
+ easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES)
//初始化vm
- deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java)
- groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
-
- observeRequestState()
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java]
//默认数据
groupViewModel.obtainProGroupList()
@@ -119,12 +125,8 @@
mapZooms.add(13f)
initMap(savedInstanceState)
- homeView.addDeviceButton.setOnClickListener {
- requireContext().navigatePageTo()
- }
-
//数据监听
- deviceViewModel.mapDeviceModel.observe(this, {
+ deviceViewModel.mapDeviceModel.observe(this) {
if (it.code == 200) {
if (allMarkerOptions.isNotEmpty()) {
allMarkerOptions.clear()
@@ -149,10 +151,8 @@
longitudeList.add(longitude)
//将所有设备信息转化缓存为Marker点
allMarkerOptions.add(
- MarkerOptions()
- .position(LatLng(latitude, longitude))
- .title(device.devcode)
- .snippet(device.modelName)
+ MarkerOptions().position(LatLng(latitude, longitude))
+ .title(device.devcode).snippet(device.modelName)
)
}
}
@@ -160,8 +160,8 @@
val centerLatLng = LatLng(latitudeList[0], longitudeList[0])
moveToPosition(centerLatLng, 13f)
}
- })
- groupViewModel.groupModel.observe(this, {
+ }
+ groupViewModel.groupModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data
when {
@@ -170,14 +170,15 @@
dataBeans = dataRows!!
isRefresh = false
}
+
else -> {
dataBeans = dataRows!!
}
}
weakReferenceHandler.sendEmptyMessage(2022090201)
}
- })
- groupViewModel.groupDeviceModel.observe(this, {
+ }
+ groupViewModel.groupDeviceModel.observe(this) {
if (it.code == 200) {
val latitudeList: MutableList = ArrayList()
val longitudeList: MutableList