diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt index 210808d..e927d86 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_not_start.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_not_start.notStartRecyclerView +import kotlinx.android.synthetic.main.fragment_not_start.notStartRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class NotStartFragment : KotlinBaseFragment() { @@ -54,27 +55,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.notStartRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + notStartRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.notStartRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + notStartRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071501) } } - weakReferenceHandler.sendEmptyMessage(2022071501) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.notStartRefreshLayout.setOnRefreshListener { + notStartRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.notStartRefreshLayout.setOnLoadMoreListener { + notStartRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,56 +123,51 @@ private val callback = Handler.Callback { if (it.what == 2022071501) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.notStartRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.notStartRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, + "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + notStartRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + notStartRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt index 210808d..e927d86 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_not_start.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_not_start.notStartRecyclerView +import kotlinx.android.synthetic.main.fragment_not_start.notStartRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class NotStartFragment : KotlinBaseFragment() { @@ -54,27 +55,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.notStartRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + notStartRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.notStartRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + notStartRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071501) } } - weakReferenceHandler.sendEmptyMessage(2022071501) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.notStartRefreshLayout.setOnRefreshListener { + notStartRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.notStartRefreshLayout.setOnLoadMoreListener { + notStartRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,56 +123,51 @@ private val callback = Handler.Callback { if (it.what == 2022071501) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.notStartRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.notStartRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, + "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + notStartRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + notStartRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt index bdc28e4..dcb240c 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_working.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_working.workingRecyclerView +import kotlinx.android.synthetic.main.fragment_working.workingRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class WorkingFragment : KotlinBaseFragment() { @@ -55,27 +56,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.workingRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + workingRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.workingRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + workingRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071101) } } - weakReferenceHandler.sendEmptyMessage(2022071101) } } @@ -95,7 +97,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -104,13 +105,13 @@ } override fun initEvent() { - baseView.workingRefreshLayout.setOnRefreshListener { + workingRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.workingRefreshLayout.setOnLoadMoreListener { + workingRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -123,53 +124,50 @@ private val callback = Handler.Callback { if (it.what == 2022071101) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText(R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}") - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.workingRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.workingRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + workingRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + workingRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt index 210808d..e927d86 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_not_start.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_not_start.notStartRecyclerView +import kotlinx.android.synthetic.main.fragment_not_start.notStartRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class NotStartFragment : KotlinBaseFragment() { @@ -54,27 +55,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.notStartRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + notStartRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.notStartRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + notStartRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071501) } } - weakReferenceHandler.sendEmptyMessage(2022071501) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.notStartRefreshLayout.setOnRefreshListener { + notStartRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.notStartRefreshLayout.setOnLoadMoreListener { + notStartRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,56 +123,51 @@ private val callback = Handler.Callback { if (it.what == 2022071501) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.notStartRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.notStartRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, + "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + notStartRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + notStartRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt index bdc28e4..dcb240c 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_working.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_working.workingRecyclerView +import kotlinx.android.synthetic.main.fragment_working.workingRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class WorkingFragment : KotlinBaseFragment() { @@ -55,27 +56,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.workingRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + workingRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.workingRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + workingRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071101) } } - weakReferenceHandler.sendEmptyMessage(2022071101) } } @@ -95,7 +97,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -104,13 +105,13 @@ } override fun initEvent() { - baseView.workingRefreshLayout.setOnRefreshListener { + workingRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.workingRefreshLayout.setOnLoadMoreListener { + workingRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -123,53 +124,50 @@ private val callback = Handler.Callback { if (it.what == 2022071101) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText(R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}") - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.workingRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.workingRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + workingRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + workingRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index ace8e16..3700a3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -7,6 +7,7 @@ val USER_PERMISSIONS = arrayOf( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, Manifest.permission.ACCESS_COARSE_LOCATION, diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt index 210808d..e927d86 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_not_start.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_not_start.notStartRecyclerView +import kotlinx.android.synthetic.main.fragment_not_start.notStartRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class NotStartFragment : KotlinBaseFragment() { @@ -54,27 +55,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.notStartRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + notStartRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.notStartRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + notStartRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071501) } } - weakReferenceHandler.sendEmptyMessage(2022071501) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.notStartRefreshLayout.setOnRefreshListener { + notStartRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.notStartRefreshLayout.setOnLoadMoreListener { + notStartRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,56 +123,51 @@ private val callback = Handler.Callback { if (it.what == 2022071501) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.notStartRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.notStartRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, + "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + notStartRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + notStartRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt index bdc28e4..dcb240c 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_working.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_working.workingRecyclerView +import kotlinx.android.synthetic.main.fragment_working.workingRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class WorkingFragment : KotlinBaseFragment() { @@ -55,27 +56,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.workingRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + workingRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.workingRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + workingRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071101) } } - weakReferenceHandler.sendEmptyMessage(2022071101) } } @@ -95,7 +97,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -104,13 +105,13 @@ } override fun initEvent() { - baseView.workingRefreshLayout.setOnRefreshListener { + workingRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.workingRefreshLayout.setOnLoadMoreListener { + workingRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -123,53 +124,50 @@ private val callback = Handler.Callback { if (it.what == 2022071101) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText(R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}") - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.workingRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.workingRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + workingRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + workingRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index ace8e16..3700a3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -7,6 +7,7 @@ val USER_PERMISSIONS = arrayOf( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, Manifest.permission.ACCESS_COARSE_LOCATION, diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 080b5d8..2af6cf4 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -33,8 +33,16 @@ import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.widget.dialog.BottomActionSheet -import kotlinx.android.synthetic.main.activity_hikvision.* -import kotlinx.android.synthetic.main.include_option_title.* +import kotlinx.android.synthetic.main.activity_hikvision.configButton +import kotlinx.android.synthetic.main.activity_hikvision.configSelectView +import kotlinx.android.synthetic.main.activity_hikvision.netSelectView +import kotlinx.android.synthetic.main.activity_hikvision.regionView +import kotlinx.android.synthetic.main.activity_hikvision.rootView +import kotlinx.android.synthetic.main.activity_hikvision.steeringWheelView +import kotlinx.android.synthetic.main.activity_hikvision.videoSurfaceView +import kotlinx.android.synthetic.main.include_option_title.leftBackView +import kotlinx.android.synthetic.main.include_option_title.rightOptionView +import kotlinx.android.synthetic.main.include_option_title.titleView class HikVisionActivity : KotlinBaseActivity(), SurfaceHolder.Callback { @@ -348,8 +356,8 @@ } override fun onDestroy() { + super.onDestroy() connectivityManager?.bindProcessToNetwork(null) connectivityManager?.unregisterNetworkCallback(networkCallback) - super.onDestroy() } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt index 210808d..e927d86 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_not_start.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_not_start.notStartRecyclerView +import kotlinx.android.synthetic.main.fragment_not_start.notStartRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class NotStartFragment : KotlinBaseFragment() { @@ -54,27 +55,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.notStartRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + notStartRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.notStartRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + notStartRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071501) } } - weakReferenceHandler.sendEmptyMessage(2022071501) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.notStartRefreshLayout.setOnRefreshListener { + notStartRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.notStartRefreshLayout.setOnLoadMoreListener { + notStartRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,56 +123,51 @@ private val callback = Handler.Callback { if (it.what == 2022071501) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.notStartRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.notStartRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, + "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + notStartRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + notStartRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt index bdc28e4..dcb240c 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_working.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_working.workingRecyclerView +import kotlinx.android.synthetic.main.fragment_working.workingRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class WorkingFragment : KotlinBaseFragment() { @@ -55,27 +56,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.workingRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + workingRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.workingRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + workingRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071101) } } - weakReferenceHandler.sendEmptyMessage(2022071101) } } @@ -95,7 +97,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -104,13 +105,13 @@ } override fun initEvent() { - baseView.workingRefreshLayout.setOnRefreshListener { + workingRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.workingRefreshLayout.setOnLoadMoreListener { + workingRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -123,53 +124,50 @@ private val callback = Handler.Callback { if (it.what == 2022071101) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText(R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}") - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.workingRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.workingRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + workingRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + workingRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index ace8e16..3700a3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -7,6 +7,7 @@ val USER_PERMISSIONS = arrayOf( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, Manifest.permission.ACCESS_COARSE_LOCATION, diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 080b5d8..2af6cf4 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -33,8 +33,16 @@ import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.widget.dialog.BottomActionSheet -import kotlinx.android.synthetic.main.activity_hikvision.* -import kotlinx.android.synthetic.main.include_option_title.* +import kotlinx.android.synthetic.main.activity_hikvision.configButton +import kotlinx.android.synthetic.main.activity_hikvision.configSelectView +import kotlinx.android.synthetic.main.activity_hikvision.netSelectView +import kotlinx.android.synthetic.main.activity_hikvision.regionView +import kotlinx.android.synthetic.main.activity_hikvision.rootView +import kotlinx.android.synthetic.main.activity_hikvision.steeringWheelView +import kotlinx.android.synthetic.main.activity_hikvision.videoSurfaceView +import kotlinx.android.synthetic.main.include_option_title.leftBackView +import kotlinx.android.synthetic.main.include_option_title.rightOptionView +import kotlinx.android.synthetic.main.include_option_title.titleView class HikVisionActivity : KotlinBaseActivity(), SurfaceHolder.Callback { @@ -348,8 +356,8 @@ } override fun onDestroy() { + super.onDestroy() connectivityManager?.bindProcessToNetwork(null) connectivityManager?.unregisterNetworkCallback(networkCallback) - super.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 1066448..1b53f7e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -12,7 +12,12 @@ import android.os.Message import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R -import com.casic.br.operationsite.extensions.* +import com.casic.br.operationsite.extensions.createCloseLightCommand +import com.casic.br.operationsite.extensions.createOpenLightCommand +import com.casic.br.operationsite.extensions.createStartCommand +import com.casic.br.operationsite.extensions.createStopCommand +import com.casic.br.operationsite.extensions.initLayoutImmersionBar +import com.casic.br.operationsite.extensions.splitGasParam import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.utils.RuntimeCache @@ -28,8 +33,18 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.dialog.BottomActionSheet -import kotlinx.android.synthetic.main.activity_methane.* -import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.activity_methane.addressView +import kotlinx.android.synthetic.main.activity_methane.configButton +import kotlinx.android.synthetic.main.activity_methane.configSelectView +import kotlinx.android.synthetic.main.activity_methane.connectButton +import kotlinx.android.synthetic.main.activity_methane.netSelectView +import kotlinx.android.synthetic.main.activity_methane.rootView +import kotlinx.android.synthetic.main.activity_methane.steeringWheelView +import kotlinx.android.synthetic.main.activity_methane.tcpStateView +import kotlinx.android.synthetic.main.activity_methane.thresholdView +import kotlinx.android.synthetic.main.activity_methane.warningSwitch +import kotlinx.android.synthetic.main.include_base_title.leftBackView +import kotlinx.android.synthetic.main.include_base_title.titleView class MethaneActivity : KotlinBaseActivity(), Handler.Callback { @@ -266,9 +281,9 @@ } override fun onDestroy() { + super.onDestroy() SocketManager.get.close() connectivityManager?.bindProcessToNetwork(null) connectivityManager?.unregisterNetworkCallback(networkCallback) - super.onDestroy() } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt index 210808d..e927d86 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_not_start.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_not_start.notStartRecyclerView +import kotlinx.android.synthetic.main.fragment_not_start.notStartRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class NotStartFragment : KotlinBaseFragment() { @@ -54,27 +55,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.notStartRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + notStartRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.notStartRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + notStartRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071501) } } - weakReferenceHandler.sendEmptyMessage(2022071501) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.notStartRefreshLayout.setOnRefreshListener { + notStartRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.notStartRefreshLayout.setOnLoadMoreListener { + notStartRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,56 +123,51 @@ private val callback = Handler.Callback { if (it.what == 2022071501) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.notStartRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.notStartRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, + "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + notStartRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + notStartRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt index bdc28e4..dcb240c 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_working.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_working.workingRecyclerView +import kotlinx.android.synthetic.main.fragment_working.workingRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class WorkingFragment : KotlinBaseFragment() { @@ -55,27 +56,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.workingRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + workingRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.workingRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + workingRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071101) } } - weakReferenceHandler.sendEmptyMessage(2022071101) } } @@ -95,7 +97,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -104,13 +105,13 @@ } override fun initEvent() { - baseView.workingRefreshLayout.setOnRefreshListener { + workingRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.workingRefreshLayout.setOnLoadMoreListener { + workingRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -123,53 +124,50 @@ private val callback = Handler.Callback { if (it.what == 2022071101) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText(R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}") - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.workingRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.workingRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + workingRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + workingRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index ace8e16..3700a3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -7,6 +7,7 @@ val USER_PERMISSIONS = arrayOf( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, Manifest.permission.ACCESS_COARSE_LOCATION, diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 080b5d8..2af6cf4 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -33,8 +33,16 @@ import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.widget.dialog.BottomActionSheet -import kotlinx.android.synthetic.main.activity_hikvision.* -import kotlinx.android.synthetic.main.include_option_title.* +import kotlinx.android.synthetic.main.activity_hikvision.configButton +import kotlinx.android.synthetic.main.activity_hikvision.configSelectView +import kotlinx.android.synthetic.main.activity_hikvision.netSelectView +import kotlinx.android.synthetic.main.activity_hikvision.regionView +import kotlinx.android.synthetic.main.activity_hikvision.rootView +import kotlinx.android.synthetic.main.activity_hikvision.steeringWheelView +import kotlinx.android.synthetic.main.activity_hikvision.videoSurfaceView +import kotlinx.android.synthetic.main.include_option_title.leftBackView +import kotlinx.android.synthetic.main.include_option_title.rightOptionView +import kotlinx.android.synthetic.main.include_option_title.titleView class HikVisionActivity : KotlinBaseActivity(), SurfaceHolder.Callback { @@ -348,8 +356,8 @@ } override fun onDestroy() { + super.onDestroy() connectivityManager?.bindProcessToNetwork(null) connectivityManager?.unregisterNetworkCallback(networkCallback) - super.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 1066448..1b53f7e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -12,7 +12,12 @@ import android.os.Message import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R -import com.casic.br.operationsite.extensions.* +import com.casic.br.operationsite.extensions.createCloseLightCommand +import com.casic.br.operationsite.extensions.createOpenLightCommand +import com.casic.br.operationsite.extensions.createStartCommand +import com.casic.br.operationsite.extensions.createStopCommand +import com.casic.br.operationsite.extensions.initLayoutImmersionBar +import com.casic.br.operationsite.extensions.splitGasParam import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.utils.RuntimeCache @@ -28,8 +33,18 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.dialog.BottomActionSheet -import kotlinx.android.synthetic.main.activity_methane.* -import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.activity_methane.addressView +import kotlinx.android.synthetic.main.activity_methane.configButton +import kotlinx.android.synthetic.main.activity_methane.configSelectView +import kotlinx.android.synthetic.main.activity_methane.connectButton +import kotlinx.android.synthetic.main.activity_methane.netSelectView +import kotlinx.android.synthetic.main.activity_methane.rootView +import kotlinx.android.synthetic.main.activity_methane.steeringWheelView +import kotlinx.android.synthetic.main.activity_methane.tcpStateView +import kotlinx.android.synthetic.main.activity_methane.thresholdView +import kotlinx.android.synthetic.main.activity_methane.warningSwitch +import kotlinx.android.synthetic.main.include_base_title.leftBackView +import kotlinx.android.synthetic.main.include_base_title.titleView class MethaneActivity : KotlinBaseActivity(), Handler.Callback { @@ -266,9 +281,9 @@ } override fun onDestroy() { + super.onDestroy() SocketManager.get.close() connectivityManager?.bindProcessToNetwork(null) connectivityManager?.unregisterNetworkCallback(networkCallback) - super.onDestroy() } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7408bb3..07b29b5 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ google() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.4' + classpath 'com.android.tools.build:gradle:4.2.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -23,6 +23,6 @@ } } -task clean(type: Delete) { +tasks.register('clean', Delete) { delete rootProject.buildDir } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index db2f821..d549156 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,14 @@ keyPassword '123456789' } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.casic.br.operationsite" minSdkVersion 23 - targetSdkVersion 31 - versionCode 1 - versionName "1.0.0.0" + targetSdkVersion 33 + versionCode 1001 + versionName "1.0.0.1" ndk { abiFilters 'armeabi-v7a', "arm64-v8a" @@ -58,8 +58,8 @@ enabled true } - applicationVariants.all { variant -> - variant.outputs.all { + applicationVariants.configureEach { variant -> + variant.outputs.configureEach { outputFileName = "XCGZ_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' @@ -86,12 +86,13 @@ //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' - //MVVM+LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + def vm_version = "2.5.1" //Kotlin协程 - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}" + //MVVM+LiveData + implementation "androidx.lifecycle:lifecycle-livedata-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${vm_version}" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 @@ -108,7 +109,7 @@ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0' //官方Json解析库 - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' //上拉加载下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //高德地图 @@ -116,11 +117,14 @@ //高德地图搜索 implementation 'com.amap.api:search:8.1.0' //CameraX - def CameraX_version = '1.1.0' - implementation "androidx.camera:camera-core:${CameraX_version}" - implementation "androidx.camera:camera-camera2:${CameraX_version}" - implementation "androidx.camera:camera-lifecycle:${CameraX_version}" - implementation 'androidx.camera:camera-view:1.2.0-alpha02' + def camerax_version = '1.2.3' + implementation "androidx.camera:camera-core:$camerax_version" + // CameraX Camera2 extensions + implementation "androidx.camera:camera-camera2:$camerax_version" + // CameraX Lifecycle library + implementation "androidx.camera:camera-lifecycle:$camerax_version" + // CameraX View class + implementation "androidx.camera:camera-view:$camerax_version" //TCP implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a966f73..a809bf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.casic.br.operationsite"> - - @@ -14,12 +12,6 @@ - - - - @@ -28,6 +20,18 @@ + + + + + + + + + + { - dataBeans.clear() - dataBeans = dataRows!! - baseView.completedRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + completedRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.completedRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + completedRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071502) } } - weakReferenceHandler.sendEmptyMessage(2022071502) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.completedRefreshLayout.setOnRefreshListener { + completedRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.completedRefreshLayout.setOnLoadMoreListener { + completedRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,63 +123,57 @@ private val callback = Handler.Callback { if (it.what == 2022071502) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - baseView.emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - baseView.emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.completedRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.completedRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + completedRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + completedRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true } override fun onDestroyView() { - broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) super.onDestroyView() + broadcastManager.destroy(LocaleConstant.SEARCH_ACTION) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt index 210808d..e927d86 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_not_start.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_not_start.notStartRecyclerView +import kotlinx.android.synthetic.main.fragment_not_start.notStartRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class NotStartFragment : KotlinBaseFragment() { @@ -54,27 +55,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.notStartRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + notStartRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.notStartRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + notStartRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071501) } } - weakReferenceHandler.sendEmptyMessage(2022071501) } } @@ -94,7 +96,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -103,13 +104,13 @@ } override fun initEvent() { - baseView.notStartRefreshLayout.setOnRefreshListener { + notStartRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.notStartRefreshLayout.setOnLoadMoreListener { + notStartRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -122,56 +123,51 @@ private val callback = Handler.Callback { if (it.what == 2022071501) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText( - R.id.connectionPhoneView, - "联系电话:${item.workPersonPhoneNumber}" - ) - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.notStartRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.notStartRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, + "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + notStartRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + notStartRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt index bdc28e4..dcb240c 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt @@ -26,8 +26,9 @@ import com.pengxh.kt.lite.utils.BroadcastManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_working.view.* -import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.fragment_working.workingRecyclerView +import kotlinx.android.synthetic.main.fragment_working.workingRefreshLayout +import kotlinx.android.synthetic.main.include_empty_view.emptyView class WorkingFragment : KotlinBaseFragment() { @@ -55,27 +56,28 @@ workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java] workSiteViewModel.worksiteModel.observe(this) { if (it.code == 200) { - val dataRows = it.data?.rows + val dataRows = it.data?.rows!! when { isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - baseView.workingRefreshLayout.finishRefresh() + workingListAdapter.setRefreshData(dataRows) + workingRefreshLayout.finishRefresh() isRefresh = false } + isLoadMore -> { - if (dataRows?.size == 0) { + if (dataRows.size == 0) { "到底了,别拉了".show(requireContext()) } - dataBeans.addAll(dataRows!!) - baseView.workingRefreshLayout.finishLoadMore() + workingListAdapter.setLoadMoreData(dataRows) + workingRefreshLayout.finishLoadMore() isLoadMore = false } + else -> { - dataBeans = dataRows!! + dataBeans = dataRows + weakReferenceHandler.sendEmptyMessage(2022071101) } } - weakReferenceHandler.sendEmptyMessage(2022071101) } } @@ -95,7 +97,6 @@ override fun onResume() { super.onResume() - pageIndex = 1 obtainProjectListByPage() } @@ -104,13 +105,13 @@ } override fun initEvent() { - baseView.workingRefreshLayout.setOnRefreshListener { + workingRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 pageIndex = 1 obtainProjectListByPage() } - baseView.workingRefreshLayout.setOnLoadMoreListener { + workingRefreshLayout.setOnLoadMoreListener { isLoadMore = true pageIndex++ obtainProjectListByPage() @@ -123,53 +124,50 @@ private val callback = Handler.Callback { if (it.what == 2022071101) { - if (isRefresh || isLoadMore) { - workingListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView.showEmptyPage { - pageIndex = 1 - obtainProjectListByPage() - } - } else { - emptyView.hide() - workingListAdapter = object : - NormalRecyclerAdapter( - R.layout.item_working_rv, dataBeans - ) { - override fun convertView( - viewHolder: ViewHolder, - position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - if (item.imageUrl.isNullOrBlank()) { - viewHolder.setImageResource( - R.id.workSiteImageView, R.mipmap.ic_launcher - ) - } else { - viewHolder.setImageResource( - R.id.workSiteImageView, item.imageUrl.combineImagePath() - ) - } - viewHolder.setText(R.id.workTitleView, item.workTitle) - .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") - .setText(R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}") - .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") - } - } - baseView.workingRecyclerView.addItemDecoration( - ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) - ) - baseView.workingRecyclerView.adapter = workingListAdapter - workingListAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, t: WorkSiteListModel.DataModel.RowsModel - ) { - requireContext().navigatePageTo(t.id) - } - }) + if (dataBeans.size == 0) { + emptyView.showEmptyPage { + pageIndex = 1 + obtainProjectListByPage() } + } else { + emptyView.hide() + workingListAdapter = object : + NormalRecyclerAdapter( + R.layout.item_working_rv, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + if (item.imageUrl.isNullOrBlank()) { + viewHolder.setImageResource( + R.id.workSiteImageView, R.mipmap.ic_launcher + ) + } else { + viewHolder.setImageResource( + R.id.workSiteImageView, item.imageUrl.combineImagePath() + ) + } + viewHolder.setText(R.id.workTitleView, item.workTitle) + .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}") + .setText( + R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}" + ) + .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}") + } + } + workingRecyclerView.addItemDecoration( + ItemDecoration(95f.dp2px(requireContext()).toFloat(), 0f) + ) + workingRecyclerView.adapter = workingListAdapter + workingListAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: WorkSiteListModel.DataModel.RowsModel + ) { + requireContext().navigatePageTo(t.id) + } + }) } } true diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index ace8e16..3700a3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -7,6 +7,7 @@ val USER_PERMISSIONS = arrayOf( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, Manifest.permission.ACCESS_COARSE_LOCATION, diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 080b5d8..2af6cf4 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -33,8 +33,16 @@ import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.widget.dialog.BottomActionSheet -import kotlinx.android.synthetic.main.activity_hikvision.* -import kotlinx.android.synthetic.main.include_option_title.* +import kotlinx.android.synthetic.main.activity_hikvision.configButton +import kotlinx.android.synthetic.main.activity_hikvision.configSelectView +import kotlinx.android.synthetic.main.activity_hikvision.netSelectView +import kotlinx.android.synthetic.main.activity_hikvision.regionView +import kotlinx.android.synthetic.main.activity_hikvision.rootView +import kotlinx.android.synthetic.main.activity_hikvision.steeringWheelView +import kotlinx.android.synthetic.main.activity_hikvision.videoSurfaceView +import kotlinx.android.synthetic.main.include_option_title.leftBackView +import kotlinx.android.synthetic.main.include_option_title.rightOptionView +import kotlinx.android.synthetic.main.include_option_title.titleView class HikVisionActivity : KotlinBaseActivity(), SurfaceHolder.Callback { @@ -348,8 +356,8 @@ } override fun onDestroy() { + super.onDestroy() connectivityManager?.bindProcessToNetwork(null) connectivityManager?.unregisterNetworkCallback(networkCallback) - super.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 1066448..1b53f7e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -12,7 +12,12 @@ import android.os.Message import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R -import com.casic.br.operationsite.extensions.* +import com.casic.br.operationsite.extensions.createCloseLightCommand +import com.casic.br.operationsite.extensions.createOpenLightCommand +import com.casic.br.operationsite.extensions.createStartCommand +import com.casic.br.operationsite.extensions.createStopCommand +import com.casic.br.operationsite.extensions.initLayoutImmersionBar +import com.casic.br.operationsite.extensions.splitGasParam import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.utils.RuntimeCache @@ -28,8 +33,18 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.dialog.BottomActionSheet -import kotlinx.android.synthetic.main.activity_methane.* -import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.activity_methane.addressView +import kotlinx.android.synthetic.main.activity_methane.configButton +import kotlinx.android.synthetic.main.activity_methane.configSelectView +import kotlinx.android.synthetic.main.activity_methane.connectButton +import kotlinx.android.synthetic.main.activity_methane.netSelectView +import kotlinx.android.synthetic.main.activity_methane.rootView +import kotlinx.android.synthetic.main.activity_methane.steeringWheelView +import kotlinx.android.synthetic.main.activity_methane.tcpStateView +import kotlinx.android.synthetic.main.activity_methane.thresholdView +import kotlinx.android.synthetic.main.activity_methane.warningSwitch +import kotlinx.android.synthetic.main.include_base_title.leftBackView +import kotlinx.android.synthetic.main.include_base_title.titleView class MethaneActivity : KotlinBaseActivity(), Handler.Callback { @@ -266,9 +281,9 @@ } override fun onDestroy() { + super.onDestroy() SocketManager.get.close() connectivityManager?.bindProcessToNetwork(null) connectivityManager?.unregisterNetworkCallback(networkCallback) - super.onDestroy() } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7408bb3..07b29b5 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ google() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.4' + classpath 'com.android.tools.build:gradle:4.2.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -23,6 +23,6 @@ } } -task clean(type: Delete) { +tasks.register('clean', Delete) { delete rootProject.buildDir } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d952a71..2fb06da 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Fri Jul 08 18:11:47 CST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME