diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt index f9f58bb..3033db3 100644 --- a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt @@ -5,8 +5,8 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R import com.casic.detector.bean.LabelBean +import com.casic.detector.databinding.ActivityObjectDetailBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.utils.FileType import com.casic.detector.utils.LocaleConstant @@ -18,16 +18,17 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class ObjectDetailActivity : KotlinBaseActivity() { +class ObjectDetailActivity : KotlinBaseActivity() { private val kTag = "ObjectDetailActivity" private val context: Context = this@ObjectDetailActivity private val gson by lazy { Gson() } private lateinit var labelBean: LabelBean - override fun initLayoutView(): Int = R.layout.activity_object_detail + override fun initViewBinding(): ActivityObjectDetailBinding { + return ActivityObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -37,7 +38,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -50,32 +51,33 @@ try { labelBean = gson.fromJson(objectJson, object : TypeToken() {}.type) - objectTypeView.text = LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] - pipelineTypeView.text = labelBean.pipelineType - pipelineDiameterView.text = labelBean.pipelineDiameter - pipelineMaterialView.text = labelBean.pipelineMaterial - buryMethodView.text = labelBean.buryMethod - buryDeepView.text = labelBean.buryDeep - areaView.text = labelBean.area - lineView.text = labelBean.line - roadView.text = labelBean.road - constructTimeView.text = labelBean.constructTime - ownerView.text = labelBean.owner - identifierIdView.text = labelBean.identifierId - identifierTypeView.text = labelBean.identifierType - identifierDeepView.text = labelBean.identifierDeep - personView.text = labelBean.person - installTimeView.text = labelBean.installTime - remarkView.text = labelBean.remark + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark } catch (e: NumberFormatException) { e.printStackTrace() } } override fun initEvent() { - closeView.setOnClickListener { finish() } + binding.closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.showImageView.setOnClickListener { //查数据库 if (labelBean.imagePath.isNullOrEmpty()) { "此标识器无图片".show(context) diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt index f9f58bb..3033db3 100644 --- a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt @@ -5,8 +5,8 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R import com.casic.detector.bean.LabelBean +import com.casic.detector.databinding.ActivityObjectDetailBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.utils.FileType import com.casic.detector.utils.LocaleConstant @@ -18,16 +18,17 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class ObjectDetailActivity : KotlinBaseActivity() { +class ObjectDetailActivity : KotlinBaseActivity() { private val kTag = "ObjectDetailActivity" private val context: Context = this@ObjectDetailActivity private val gson by lazy { Gson() } private lateinit var labelBean: LabelBean - override fun initLayoutView(): Int = R.layout.activity_object_detail + override fun initViewBinding(): ActivityObjectDetailBinding { + return ActivityObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -37,7 +38,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -50,32 +51,33 @@ try { labelBean = gson.fromJson(objectJson, object : TypeToken() {}.type) - objectTypeView.text = LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] - pipelineTypeView.text = labelBean.pipelineType - pipelineDiameterView.text = labelBean.pipelineDiameter - pipelineMaterialView.text = labelBean.pipelineMaterial - buryMethodView.text = labelBean.buryMethod - buryDeepView.text = labelBean.buryDeep - areaView.text = labelBean.area - lineView.text = labelBean.line - roadView.text = labelBean.road - constructTimeView.text = labelBean.constructTime - ownerView.text = labelBean.owner - identifierIdView.text = labelBean.identifierId - identifierTypeView.text = labelBean.identifierType - identifierDeepView.text = labelBean.identifierDeep - personView.text = labelBean.person - installTimeView.text = labelBean.installTime - remarkView.text = labelBean.remark + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark } catch (e: NumberFormatException) { e.printStackTrace() } } override fun initEvent() { - closeView.setOnClickListener { finish() } + binding.closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.showImageView.setOnClickListener { //查数据库 if (labelBean.imagePath.isNullOrEmpty()) { "此标识器无图片".show(context) diff --git a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt index b25fb19..cda654b 100644 --- a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.CountDownTimer import com.casic.detector.R +import com.casic.detector.databinding.ActivityPermssionBinding import com.casic.detector.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -10,7 +11,8 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import pub.devrel.easypermissions.EasyPermissions -class PermissionActivity : KotlinBaseActivity(), EasyPermissions.PermissionCallbacks { +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { private val isFirstEnter = SaveKeyValues.getValue("isFirstEnter", true) as Boolean private val countDownTimer = object : CountDownTimer(2000, 500) { @@ -24,7 +26,7 @@ } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { EasyPermissions.requestPermissions( this, "${resources.getString(R.string.app_name)}需要获取必要权限", LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS @@ -35,7 +37,9 @@ } - override fun initLayoutView(): Int = R.layout.activity_permssion + override fun initViewBinding(): ActivityPermssionBinding { + return ActivityPermssionBinding.inflate(layoutInflater) + } override fun observeRequestState() { diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt index f9f58bb..3033db3 100644 --- a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt @@ -5,8 +5,8 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R import com.casic.detector.bean.LabelBean +import com.casic.detector.databinding.ActivityObjectDetailBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.utils.FileType import com.casic.detector.utils.LocaleConstant @@ -18,16 +18,17 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class ObjectDetailActivity : KotlinBaseActivity() { +class ObjectDetailActivity : KotlinBaseActivity() { private val kTag = "ObjectDetailActivity" private val context: Context = this@ObjectDetailActivity private val gson by lazy { Gson() } private lateinit var labelBean: LabelBean - override fun initLayoutView(): Int = R.layout.activity_object_detail + override fun initViewBinding(): ActivityObjectDetailBinding { + return ActivityObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -37,7 +38,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -50,32 +51,33 @@ try { labelBean = gson.fromJson(objectJson, object : TypeToken() {}.type) - objectTypeView.text = LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] - pipelineTypeView.text = labelBean.pipelineType - pipelineDiameterView.text = labelBean.pipelineDiameter - pipelineMaterialView.text = labelBean.pipelineMaterial - buryMethodView.text = labelBean.buryMethod - buryDeepView.text = labelBean.buryDeep - areaView.text = labelBean.area - lineView.text = labelBean.line - roadView.text = labelBean.road - constructTimeView.text = labelBean.constructTime - ownerView.text = labelBean.owner - identifierIdView.text = labelBean.identifierId - identifierTypeView.text = labelBean.identifierType - identifierDeepView.text = labelBean.identifierDeep - personView.text = labelBean.person - installTimeView.text = labelBean.installTime - remarkView.text = labelBean.remark + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark } catch (e: NumberFormatException) { e.printStackTrace() } } override fun initEvent() { - closeView.setOnClickListener { finish() } + binding.closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.showImageView.setOnClickListener { //查数据库 if (labelBean.imagePath.isNullOrEmpty()) { "此标识器无图片".show(context) diff --git a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt index b25fb19..cda654b 100644 --- a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.CountDownTimer import com.casic.detector.R +import com.casic.detector.databinding.ActivityPermssionBinding import com.casic.detector.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -10,7 +11,8 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import pub.devrel.easypermissions.EasyPermissions -class PermissionActivity : KotlinBaseActivity(), EasyPermissions.PermissionCallbacks { +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { private val isFirstEnter = SaveKeyValues.getValue("isFirstEnter", true) as Boolean private val countDownTimer = object : CountDownTimer(2000, 500) { @@ -24,7 +26,7 @@ } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { EasyPermissions.requestPermissions( this, "${resources.getString(R.string.app_name)}需要获取必要权限", LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS @@ -35,7 +37,9 @@ } - override fun initLayoutView(): Int = R.layout.activity_permssion + override fun initViewBinding(): ActivityPermssionBinding { + return ActivityPermssionBinding.inflate(layoutInflater) + } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt index 4145a5e..298a718 100644 --- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt @@ -12,6 +12,7 @@ import com.casic.detector.R import com.casic.detector.base.SerialPortActivity import com.casic.detector.bean.TaskBean +import com.casic.detector.databinding.ActivitySearchLabelBinding import com.casic.detector.extensions.hexToString import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.extensions.toHex @@ -28,12 +29,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_search_label.* import java.io.IOException import java.text.DecimalFormat -import java.util.* +import java.util.Timer +import java.util.TimerTask -class SearchLabelActivity : SerialPortActivity(), Handler.Callback { +class SearchLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "SearchLabelActivity" private lateinit var slowSoundPool: SoundPool @@ -51,7 +52,7 @@ private lateinit var taskViewModel: TaskViewModel private var taskLabel: TaskBean? = null - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioHigh("18") //角度 lastDegreeMap["lastDegree"] = 0f @@ -108,7 +109,7 @@ } override fun initEvent() { - depthButton.setOnClickListener { + binding.depthButton.setOnClickListener { isDetectDepth = true val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -135,7 +136,11 @@ } } - degreeButton.setOnClickListener { + binding.markerInfoButton.setOnClickListener { + if (DataBaseManager.get.loadTaskLabels().isEmpty()) { + "电子标识器本地数据未同步,请先同步".show(this) + return@setOnClickListener + } //查库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -180,27 +185,27 @@ } if (energy >= 5) { - depthButton.isEnabled = true - depthButton.setTextColor(Color.WHITE) - depthButton.setBackgroundResource(R.mipmap.left_button_enable) - degreeButton.isEnabled = true - degreeButton.setTextColor(Color.WHITE) - degreeButton.setBackgroundResource(R.mipmap.right_button_enable) + binding.depthButton.isEnabled = true + binding.depthButton.setTextColor(Color.WHITE) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable) + binding.markerInfoButton.isEnabled = true + binding.markerInfoButton.setTextColor(Color.WHITE) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable) - searchResultView.text = "已检测到标识器" - searchResultView.setTextColor(Color.parseColor("#428d00")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) + binding.searchResultView.text = "已检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#428d00")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) } else { - depthButton.isEnabled = false - depthButton.setTextColor(Color.parseColor("#CCCCCC")) - depthButton.setBackgroundResource(R.mipmap.left_button_disable) - degreeButton.isEnabled = false - degreeButton.setTextColor(Color.parseColor("#CCCCCC")) - degreeButton.setBackgroundResource(R.mipmap.right_button_disable) + binding.depthButton.isEnabled = false + binding.depthButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable) + binding.markerInfoButton.isEnabled = false + binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable) - searchResultView.text = "未检测到标识器" - searchResultView.setTextColor(Color.parseColor("#8D1717")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) + binding.searchResultView.text = "未检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#8D1717")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) } if (energy >= 41) { @@ -222,22 +227,22 @@ } if (energy <= 13) {//18° - energyTipsView.text = "标识器信号较弱,可能距离较远" - energyTipsView.setTextColor(Color.parseColor("#8D1717")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) + binding.energyTipsView.text = "标识器信号较弱,可能距离较远" + binding.energyTipsView.setTextColor(Color.parseColor("#8D1717")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) } else if (energy >= 41) {//148° - energyTipsView.text = "标识器信号极强,可能在正下方" - energyTipsView.setTextColor(Color.parseColor("#428d00")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) + binding.energyTipsView.text = "标识器信号极强,可能在正下方" + binding.energyTipsView.setTextColor(Color.parseColor("#428d00")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) } else {//[18°,148°] - energyTipsView.text = "已靠近标识器,请继续移动位置" - energyTipsView.setTextColor(Color.parseColor("#8C5700")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) + binding.energyTipsView.text = "已靠近标识器,请继续移动位置" + binding.energyTipsView.setTextColor(Color.parseColor("#8C5700")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) } //转换为转动的角度 val degree = (energy.toFloat() / 50) * 180 - energyValueView.text = decimal.format(degree) + binding.energyValueView.text = decimal.format(degree) val animation = RotateAnimation( lastDegreeMap["lastDegree"]!!, degree, @@ -246,7 +251,7 @@ ) animation.duration = 0 animation.fillAfter = true - needleView.startAnimation(animation) + binding.needleView.startAnimation(animation) //保存旋转后的角度 lastDegreeMap["lastDegree"] = degree @@ -280,7 +285,8 @@ this.identifierId = identifierId //自动上传标识器 - taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") + taskLabel = + DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") if (taskLabel != null) { val userName = SaveKeyValues.getValue( LocaleConstant.USER_NAME, "" @@ -293,7 +299,9 @@ return true } - override fun initLayoutView(): Int = R.layout.activity_search_label + override fun initViewBinding(): ActivitySearchLabelBinding { + return ActivitySearchLabelBinding.inflate(layoutInflater) + } override fun observeRequestState() { taskViewModel.loadState.observe(this) { @@ -306,7 +314,7 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt index f9f58bb..3033db3 100644 --- a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt @@ -5,8 +5,8 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R import com.casic.detector.bean.LabelBean +import com.casic.detector.databinding.ActivityObjectDetailBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.utils.FileType import com.casic.detector.utils.LocaleConstant @@ -18,16 +18,17 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class ObjectDetailActivity : KotlinBaseActivity() { +class ObjectDetailActivity : KotlinBaseActivity() { private val kTag = "ObjectDetailActivity" private val context: Context = this@ObjectDetailActivity private val gson by lazy { Gson() } private lateinit var labelBean: LabelBean - override fun initLayoutView(): Int = R.layout.activity_object_detail + override fun initViewBinding(): ActivityObjectDetailBinding { + return ActivityObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -37,7 +38,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -50,32 +51,33 @@ try { labelBean = gson.fromJson(objectJson, object : TypeToken() {}.type) - objectTypeView.text = LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] - pipelineTypeView.text = labelBean.pipelineType - pipelineDiameterView.text = labelBean.pipelineDiameter - pipelineMaterialView.text = labelBean.pipelineMaterial - buryMethodView.text = labelBean.buryMethod - buryDeepView.text = labelBean.buryDeep - areaView.text = labelBean.area - lineView.text = labelBean.line - roadView.text = labelBean.road - constructTimeView.text = labelBean.constructTime - ownerView.text = labelBean.owner - identifierIdView.text = labelBean.identifierId - identifierTypeView.text = labelBean.identifierType - identifierDeepView.text = labelBean.identifierDeep - personView.text = labelBean.person - installTimeView.text = labelBean.installTime - remarkView.text = labelBean.remark + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark } catch (e: NumberFormatException) { e.printStackTrace() } } override fun initEvent() { - closeView.setOnClickListener { finish() } + binding.closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.showImageView.setOnClickListener { //查数据库 if (labelBean.imagePath.isNullOrEmpty()) { "此标识器无图片".show(context) diff --git a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt index b25fb19..cda654b 100644 --- a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.CountDownTimer import com.casic.detector.R +import com.casic.detector.databinding.ActivityPermssionBinding import com.casic.detector.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -10,7 +11,8 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import pub.devrel.easypermissions.EasyPermissions -class PermissionActivity : KotlinBaseActivity(), EasyPermissions.PermissionCallbacks { +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { private val isFirstEnter = SaveKeyValues.getValue("isFirstEnter", true) as Boolean private val countDownTimer = object : CountDownTimer(2000, 500) { @@ -24,7 +26,7 @@ } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { EasyPermissions.requestPermissions( this, "${resources.getString(R.string.app_name)}需要获取必要权限", LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS @@ -35,7 +37,9 @@ } - override fun initLayoutView(): Int = R.layout.activity_permssion + override fun initViewBinding(): ActivityPermssionBinding { + return ActivityPermssionBinding.inflate(layoutInflater) + } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt index 4145a5e..298a718 100644 --- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt @@ -12,6 +12,7 @@ import com.casic.detector.R import com.casic.detector.base.SerialPortActivity import com.casic.detector.bean.TaskBean +import com.casic.detector.databinding.ActivitySearchLabelBinding import com.casic.detector.extensions.hexToString import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.extensions.toHex @@ -28,12 +29,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_search_label.* import java.io.IOException import java.text.DecimalFormat -import java.util.* +import java.util.Timer +import java.util.TimerTask -class SearchLabelActivity : SerialPortActivity(), Handler.Callback { +class SearchLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "SearchLabelActivity" private lateinit var slowSoundPool: SoundPool @@ -51,7 +52,7 @@ private lateinit var taskViewModel: TaskViewModel private var taskLabel: TaskBean? = null - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioHigh("18") //角度 lastDegreeMap["lastDegree"] = 0f @@ -108,7 +109,7 @@ } override fun initEvent() { - depthButton.setOnClickListener { + binding.depthButton.setOnClickListener { isDetectDepth = true val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -135,7 +136,11 @@ } } - degreeButton.setOnClickListener { + binding.markerInfoButton.setOnClickListener { + if (DataBaseManager.get.loadTaskLabels().isEmpty()) { + "电子标识器本地数据未同步,请先同步".show(this) + return@setOnClickListener + } //查库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -180,27 +185,27 @@ } if (energy >= 5) { - depthButton.isEnabled = true - depthButton.setTextColor(Color.WHITE) - depthButton.setBackgroundResource(R.mipmap.left_button_enable) - degreeButton.isEnabled = true - degreeButton.setTextColor(Color.WHITE) - degreeButton.setBackgroundResource(R.mipmap.right_button_enable) + binding.depthButton.isEnabled = true + binding.depthButton.setTextColor(Color.WHITE) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable) + binding.markerInfoButton.isEnabled = true + binding.markerInfoButton.setTextColor(Color.WHITE) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable) - searchResultView.text = "已检测到标识器" - searchResultView.setTextColor(Color.parseColor("#428d00")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) + binding.searchResultView.text = "已检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#428d00")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) } else { - depthButton.isEnabled = false - depthButton.setTextColor(Color.parseColor("#CCCCCC")) - depthButton.setBackgroundResource(R.mipmap.left_button_disable) - degreeButton.isEnabled = false - degreeButton.setTextColor(Color.parseColor("#CCCCCC")) - degreeButton.setBackgroundResource(R.mipmap.right_button_disable) + binding.depthButton.isEnabled = false + binding.depthButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable) + binding.markerInfoButton.isEnabled = false + binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable) - searchResultView.text = "未检测到标识器" - searchResultView.setTextColor(Color.parseColor("#8D1717")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) + binding.searchResultView.text = "未检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#8D1717")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) } if (energy >= 41) { @@ -222,22 +227,22 @@ } if (energy <= 13) {//18° - energyTipsView.text = "标识器信号较弱,可能距离较远" - energyTipsView.setTextColor(Color.parseColor("#8D1717")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) + binding.energyTipsView.text = "标识器信号较弱,可能距离较远" + binding.energyTipsView.setTextColor(Color.parseColor("#8D1717")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) } else if (energy >= 41) {//148° - energyTipsView.text = "标识器信号极强,可能在正下方" - energyTipsView.setTextColor(Color.parseColor("#428d00")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) + binding.energyTipsView.text = "标识器信号极强,可能在正下方" + binding.energyTipsView.setTextColor(Color.parseColor("#428d00")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) } else {//[18°,148°] - energyTipsView.text = "已靠近标识器,请继续移动位置" - energyTipsView.setTextColor(Color.parseColor("#8C5700")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) + binding.energyTipsView.text = "已靠近标识器,请继续移动位置" + binding.energyTipsView.setTextColor(Color.parseColor("#8C5700")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) } //转换为转动的角度 val degree = (energy.toFloat() / 50) * 180 - energyValueView.text = decimal.format(degree) + binding.energyValueView.text = decimal.format(degree) val animation = RotateAnimation( lastDegreeMap["lastDegree"]!!, degree, @@ -246,7 +251,7 @@ ) animation.duration = 0 animation.fillAfter = true - needleView.startAnimation(animation) + binding.needleView.startAnimation(animation) //保存旋转后的角度 lastDegreeMap["lastDegree"] = degree @@ -280,7 +285,8 @@ this.identifierId = identifierId //自动上传标识器 - taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") + taskLabel = + DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") if (taskLabel != null) { val userName = SaveKeyValues.getValue( LocaleConstant.USER_NAME, "" @@ -293,7 +299,9 @@ return true } - override fun initLayoutView(): Int = R.layout.activity_search_label + override fun initViewBinding(): ActivitySearchLabelBinding { + return ActivitySearchLabelBinding.inflate(layoutInflater) + } override fun observeRequestState() { taskViewModel.loadState.observe(this) { @@ -306,7 +314,7 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt index 96b7225..a9a7f7f 100644 --- a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt @@ -9,10 +9,10 @@ import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.location.AMapLocation -import com.casic.detector.R import com.casic.detector.adapter.EditableImageAdapter import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityUploadEventBinding import com.casic.detector.extensions.compressImage import com.casic.detector.model.EventModel import com.casic.detector.utils.LoadingDialogHub @@ -27,12 +27,10 @@ import com.pengxh.kt.lite.extensions.* import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_upload_event.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File @SuppressLint("SetTextI18n") -class UploadEventActivity : KotlinBaseActivity() { +class UploadEventActivity : KotlinBaseActivity() { private val context: Context = this@UploadEventActivity private lateinit var imageAdapter: EditableImageAdapter @@ -40,7 +38,9 @@ private lateinit var taskViewModel: TaskViewModel private lateinit var taskId: String - override fun initLayoutView(): Int = R.layout.activity_upload_event + override fun initViewBinding(): ActivityUploadEventBinding { + return ActivityUploadEventBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -55,12 +55,13 @@ "事件上报成功!".show(this) finish() } + else -> LoadingDialogHub.dismiss() } } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -73,15 +74,15 @@ taskId = SaveKeyValues.getValue(LocaleConstant.TASK_ID, "") as String val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String - userNameView.text = userName + binding.userNameView.text = userName - uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = "${location.longitude}" - latView.text = "${location.latitude}" + binding.lngView.text = "${location.longitude}" + binding.latView.text = "${location.latitude}" } else { "当前位置信号差,无法获取定位".show(context) } @@ -89,7 +90,7 @@ }) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter } override fun initEvent() { @@ -111,20 +112,20 @@ } }) - cancelButton.setOnClickListener { finish() } + binding.cancelButton.setOnClickListener { finish() } - uploadEventButton.setOnClickListener { - if (eventDescriptionView.text.isNullOrBlank()) { + binding.uploadEventButton.setOnClickListener { + if (binding.eventDescriptionView.text.isNullOrBlank()) { "请输入事件描述!".show(this) return@setOnClickListener } val eventModel = EventModel() - eventModel.description = eventDescriptionView.text.toString() - eventModel.createTime = uploadTimeView.text.toString() + eventModel.description = binding.eventDescriptionView.text.toString() + eventModel.createTime = binding.uploadTimeView.text.toString() - eventModel.latitude = lngView.text.toString().toDouble() - eventModel.longitude = latView.text.toString().toDouble() + eventModel.latitude = binding.lngView.text.toString().toDouble() + eventModel.longitude = binding.latView.text.toString().toDouble() taskViewModel.uploadEvent(taskId, eventModel.toJson(), realPaths) } diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt index f9f58bb..3033db3 100644 --- a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt @@ -5,8 +5,8 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R import com.casic.detector.bean.LabelBean +import com.casic.detector.databinding.ActivityObjectDetailBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.utils.FileType import com.casic.detector.utils.LocaleConstant @@ -18,16 +18,17 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class ObjectDetailActivity : KotlinBaseActivity() { +class ObjectDetailActivity : KotlinBaseActivity() { private val kTag = "ObjectDetailActivity" private val context: Context = this@ObjectDetailActivity private val gson by lazy { Gson() } private lateinit var labelBean: LabelBean - override fun initLayoutView(): Int = R.layout.activity_object_detail + override fun initViewBinding(): ActivityObjectDetailBinding { + return ActivityObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -37,7 +38,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -50,32 +51,33 @@ try { labelBean = gson.fromJson(objectJson, object : TypeToken() {}.type) - objectTypeView.text = LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] - pipelineTypeView.text = labelBean.pipelineType - pipelineDiameterView.text = labelBean.pipelineDiameter - pipelineMaterialView.text = labelBean.pipelineMaterial - buryMethodView.text = labelBean.buryMethod - buryDeepView.text = labelBean.buryDeep - areaView.text = labelBean.area - lineView.text = labelBean.line - roadView.text = labelBean.road - constructTimeView.text = labelBean.constructTime - ownerView.text = labelBean.owner - identifierIdView.text = labelBean.identifierId - identifierTypeView.text = labelBean.identifierType - identifierDeepView.text = labelBean.identifierDeep - personView.text = labelBean.person - installTimeView.text = labelBean.installTime - remarkView.text = labelBean.remark + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark } catch (e: NumberFormatException) { e.printStackTrace() } } override fun initEvent() { - closeView.setOnClickListener { finish() } + binding.closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.showImageView.setOnClickListener { //查数据库 if (labelBean.imagePath.isNullOrEmpty()) { "此标识器无图片".show(context) diff --git a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt index b25fb19..cda654b 100644 --- a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.CountDownTimer import com.casic.detector.R +import com.casic.detector.databinding.ActivityPermssionBinding import com.casic.detector.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -10,7 +11,8 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import pub.devrel.easypermissions.EasyPermissions -class PermissionActivity : KotlinBaseActivity(), EasyPermissions.PermissionCallbacks { +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { private val isFirstEnter = SaveKeyValues.getValue("isFirstEnter", true) as Boolean private val countDownTimer = object : CountDownTimer(2000, 500) { @@ -24,7 +26,7 @@ } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { EasyPermissions.requestPermissions( this, "${resources.getString(R.string.app_name)}需要获取必要权限", LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS @@ -35,7 +37,9 @@ } - override fun initLayoutView(): Int = R.layout.activity_permssion + override fun initViewBinding(): ActivityPermssionBinding { + return ActivityPermssionBinding.inflate(layoutInflater) + } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt index 4145a5e..298a718 100644 --- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt @@ -12,6 +12,7 @@ import com.casic.detector.R import com.casic.detector.base.SerialPortActivity import com.casic.detector.bean.TaskBean +import com.casic.detector.databinding.ActivitySearchLabelBinding import com.casic.detector.extensions.hexToString import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.extensions.toHex @@ -28,12 +29,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_search_label.* import java.io.IOException import java.text.DecimalFormat -import java.util.* +import java.util.Timer +import java.util.TimerTask -class SearchLabelActivity : SerialPortActivity(), Handler.Callback { +class SearchLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "SearchLabelActivity" private lateinit var slowSoundPool: SoundPool @@ -51,7 +52,7 @@ private lateinit var taskViewModel: TaskViewModel private var taskLabel: TaskBean? = null - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioHigh("18") //角度 lastDegreeMap["lastDegree"] = 0f @@ -108,7 +109,7 @@ } override fun initEvent() { - depthButton.setOnClickListener { + binding.depthButton.setOnClickListener { isDetectDepth = true val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -135,7 +136,11 @@ } } - degreeButton.setOnClickListener { + binding.markerInfoButton.setOnClickListener { + if (DataBaseManager.get.loadTaskLabels().isEmpty()) { + "电子标识器本地数据未同步,请先同步".show(this) + return@setOnClickListener + } //查库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -180,27 +185,27 @@ } if (energy >= 5) { - depthButton.isEnabled = true - depthButton.setTextColor(Color.WHITE) - depthButton.setBackgroundResource(R.mipmap.left_button_enable) - degreeButton.isEnabled = true - degreeButton.setTextColor(Color.WHITE) - degreeButton.setBackgroundResource(R.mipmap.right_button_enable) + binding.depthButton.isEnabled = true + binding.depthButton.setTextColor(Color.WHITE) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable) + binding.markerInfoButton.isEnabled = true + binding.markerInfoButton.setTextColor(Color.WHITE) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable) - searchResultView.text = "已检测到标识器" - searchResultView.setTextColor(Color.parseColor("#428d00")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) + binding.searchResultView.text = "已检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#428d00")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) } else { - depthButton.isEnabled = false - depthButton.setTextColor(Color.parseColor("#CCCCCC")) - depthButton.setBackgroundResource(R.mipmap.left_button_disable) - degreeButton.isEnabled = false - degreeButton.setTextColor(Color.parseColor("#CCCCCC")) - degreeButton.setBackgroundResource(R.mipmap.right_button_disable) + binding.depthButton.isEnabled = false + binding.depthButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable) + binding.markerInfoButton.isEnabled = false + binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable) - searchResultView.text = "未检测到标识器" - searchResultView.setTextColor(Color.parseColor("#8D1717")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) + binding.searchResultView.text = "未检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#8D1717")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) } if (energy >= 41) { @@ -222,22 +227,22 @@ } if (energy <= 13) {//18° - energyTipsView.text = "标识器信号较弱,可能距离较远" - energyTipsView.setTextColor(Color.parseColor("#8D1717")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) + binding.energyTipsView.text = "标识器信号较弱,可能距离较远" + binding.energyTipsView.setTextColor(Color.parseColor("#8D1717")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) } else if (energy >= 41) {//148° - energyTipsView.text = "标识器信号极强,可能在正下方" - energyTipsView.setTextColor(Color.parseColor("#428d00")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) + binding.energyTipsView.text = "标识器信号极强,可能在正下方" + binding.energyTipsView.setTextColor(Color.parseColor("#428d00")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) } else {//[18°,148°] - energyTipsView.text = "已靠近标识器,请继续移动位置" - energyTipsView.setTextColor(Color.parseColor("#8C5700")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) + binding.energyTipsView.text = "已靠近标识器,请继续移动位置" + binding.energyTipsView.setTextColor(Color.parseColor("#8C5700")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) } //转换为转动的角度 val degree = (energy.toFloat() / 50) * 180 - energyValueView.text = decimal.format(degree) + binding.energyValueView.text = decimal.format(degree) val animation = RotateAnimation( lastDegreeMap["lastDegree"]!!, degree, @@ -246,7 +251,7 @@ ) animation.duration = 0 animation.fillAfter = true - needleView.startAnimation(animation) + binding.needleView.startAnimation(animation) //保存旋转后的角度 lastDegreeMap["lastDegree"] = degree @@ -280,7 +285,8 @@ this.identifierId = identifierId //自动上传标识器 - taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") + taskLabel = + DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") if (taskLabel != null) { val userName = SaveKeyValues.getValue( LocaleConstant.USER_NAME, "" @@ -293,7 +299,9 @@ return true } - override fun initLayoutView(): Int = R.layout.activity_search_label + override fun initViewBinding(): ActivitySearchLabelBinding { + return ActivitySearchLabelBinding.inflate(layoutInflater) + } override fun observeRequestState() { taskViewModel.loadState.observe(this) { @@ -306,7 +314,7 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt index 96b7225..a9a7f7f 100644 --- a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt @@ -9,10 +9,10 @@ import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.location.AMapLocation -import com.casic.detector.R import com.casic.detector.adapter.EditableImageAdapter import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityUploadEventBinding import com.casic.detector.extensions.compressImage import com.casic.detector.model.EventModel import com.casic.detector.utils.LoadingDialogHub @@ -27,12 +27,10 @@ import com.pengxh.kt.lite.extensions.* import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_upload_event.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File @SuppressLint("SetTextI18n") -class UploadEventActivity : KotlinBaseActivity() { +class UploadEventActivity : KotlinBaseActivity() { private val context: Context = this@UploadEventActivity private lateinit var imageAdapter: EditableImageAdapter @@ -40,7 +38,9 @@ private lateinit var taskViewModel: TaskViewModel private lateinit var taskId: String - override fun initLayoutView(): Int = R.layout.activity_upload_event + override fun initViewBinding(): ActivityUploadEventBinding { + return ActivityUploadEventBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -55,12 +55,13 @@ "事件上报成功!".show(this) finish() } + else -> LoadingDialogHub.dismiss() } } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -73,15 +74,15 @@ taskId = SaveKeyValues.getValue(LocaleConstant.TASK_ID, "") as String val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String - userNameView.text = userName + binding.userNameView.text = userName - uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = "${location.longitude}" - latView.text = "${location.latitude}" + binding.lngView.text = "${location.longitude}" + binding.latView.text = "${location.latitude}" } else { "当前位置信号差,无法获取定位".show(context) } @@ -89,7 +90,7 @@ }) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter } override fun initEvent() { @@ -111,20 +112,20 @@ } }) - cancelButton.setOnClickListener { finish() } + binding.cancelButton.setOnClickListener { finish() } - uploadEventButton.setOnClickListener { - if (eventDescriptionView.text.isNullOrBlank()) { + binding.uploadEventButton.setOnClickListener { + if (binding.eventDescriptionView.text.isNullOrBlank()) { "请输入事件描述!".show(this) return@setOnClickListener } val eventModel = EventModel() - eventModel.description = eventDescriptionView.text.toString() - eventModel.createTime = uploadTimeView.text.toString() + eventModel.description = binding.eventDescriptionView.text.toString() + eventModel.createTime = binding.uploadTimeView.text.toString() - eventModel.latitude = lngView.text.toString().toDouble() - eventModel.longitude = latView.text.toString().toDouble() + eventModel.latitude = binding.lngView.text.toString().toDouble() + eventModel.longitude = binding.latView.text.toString().toDouble() taskViewModel.uploadEvent(taskId, eventModel.toJson(), realPaths) } diff --git a/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt b/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt index 10674da..37c915c 100644 --- a/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt +++ b/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModelProvider import com.casic.detector.BuildConfig import com.casic.detector.R +import com.casic.detector.databinding.ActivityVersionControlBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.FileType @@ -25,18 +26,16 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import kotlinx.android.synthetic.main.activity_version_control.* -import kotlinx.android.synthetic.main.include_base_title.* import java.io.File -class VersionControlActivity : KotlinBaseActivity() { +class VersionControlActivity : KotlinBaseActivity() { private val kTag = "VersionControlActivity" private val progressDialog by lazy { ProgressDialog(this) } private lateinit var versionViewModel: VersionViewModel - override fun initData(savedInstanceState: Bundle?) { - versionView.text = "Version ${BuildConfig.VERSION_NAME}" + override fun initOnCreate(savedInstanceState: Bundle?) { + binding.versionView.text = "Version ${BuildConfig.VERSION_NAME}" //初始化下载对话框 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL) @@ -70,14 +69,16 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } - updateLayout.setOnClickListener { + binding.updateLayout.setOnClickListener { versionViewModel.getApplicationVersion() } } - override fun initLayoutView(): Int = R.layout.activity_version_control + override fun initViewBinding(): ActivityVersionControlBinding { + return ActivityVersionControlBinding.inflate(layoutInflater) + } override fun observeRequestState() { versionViewModel.loadState.observe(this) { @@ -90,8 +91,8 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.visibility = View.GONE + initLayoutImmersionBar(binding.rootView) + binding.titleInclude.titleView.visibility = View.GONE } private fun downloadApk(url: String?) { diff --git a/app/build.gradle b/app/build.gradle index cd387bb..65d8378 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' //Google官方授权框架 diff --git a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt index 95243bb..1a37e6f 100644 --- a/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt +++ b/app/src/main/java/com/casic/detector/base/SerialPortActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.viewbinding.ViewBinding import com.casic.detector.uart.SerialPort import com.pengxh.kt.lite.extensions.show import java.io.IOException @@ -10,7 +11,9 @@ import java.security.InvalidParameterException -abstract class SerialPortActivity : AppCompatActivity() { +abstract class SerialPortActivity : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt index f9f58bb..3033db3 100644 --- a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt @@ -5,8 +5,8 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R import com.casic.detector.bean.LabelBean +import com.casic.detector.databinding.ActivityObjectDetailBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.utils.FileType import com.casic.detector.utils.LocaleConstant @@ -18,16 +18,17 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class ObjectDetailActivity : KotlinBaseActivity() { +class ObjectDetailActivity : KotlinBaseActivity() { private val kTag = "ObjectDetailActivity" private val context: Context = this@ObjectDetailActivity private val gson by lazy { Gson() } private lateinit var labelBean: LabelBean - override fun initLayoutView(): Int = R.layout.activity_object_detail + override fun initViewBinding(): ActivityObjectDetailBinding { + return ActivityObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -37,7 +38,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -50,32 +51,33 @@ try { labelBean = gson.fromJson(objectJson, object : TypeToken() {}.type) - objectTypeView.text = LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] - pipelineTypeView.text = labelBean.pipelineType - pipelineDiameterView.text = labelBean.pipelineDiameter - pipelineMaterialView.text = labelBean.pipelineMaterial - buryMethodView.text = labelBean.buryMethod - buryDeepView.text = labelBean.buryDeep - areaView.text = labelBean.area - lineView.text = labelBean.line - roadView.text = labelBean.road - constructTimeView.text = labelBean.constructTime - ownerView.text = labelBean.owner - identifierIdView.text = labelBean.identifierId - identifierTypeView.text = labelBean.identifierType - identifierDeepView.text = labelBean.identifierDeep - personView.text = labelBean.person - installTimeView.text = labelBean.installTime - remarkView.text = labelBean.remark + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark } catch (e: NumberFormatException) { e.printStackTrace() } } override fun initEvent() { - closeView.setOnClickListener { finish() } + binding.closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.showImageView.setOnClickListener { //查数据库 if (labelBean.imagePath.isNullOrEmpty()) { "此标识器无图片".show(context) diff --git a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt index b25fb19..cda654b 100644 --- a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.CountDownTimer import com.casic.detector.R +import com.casic.detector.databinding.ActivityPermssionBinding import com.casic.detector.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -10,7 +11,8 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import pub.devrel.easypermissions.EasyPermissions -class PermissionActivity : KotlinBaseActivity(), EasyPermissions.PermissionCallbacks { +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { private val isFirstEnter = SaveKeyValues.getValue("isFirstEnter", true) as Boolean private val countDownTimer = object : CountDownTimer(2000, 500) { @@ -24,7 +26,7 @@ } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { EasyPermissions.requestPermissions( this, "${resources.getString(R.string.app_name)}需要获取必要权限", LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS @@ -35,7 +37,9 @@ } - override fun initLayoutView(): Int = R.layout.activity_permssion + override fun initViewBinding(): ActivityPermssionBinding { + return ActivityPermssionBinding.inflate(layoutInflater) + } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt index 4145a5e..298a718 100644 --- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt @@ -12,6 +12,7 @@ import com.casic.detector.R import com.casic.detector.base.SerialPortActivity import com.casic.detector.bean.TaskBean +import com.casic.detector.databinding.ActivitySearchLabelBinding import com.casic.detector.extensions.hexToString import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.extensions.toHex @@ -28,12 +29,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_search_label.* import java.io.IOException import java.text.DecimalFormat -import java.util.* +import java.util.Timer +import java.util.TimerTask -class SearchLabelActivity : SerialPortActivity(), Handler.Callback { +class SearchLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "SearchLabelActivity" private lateinit var slowSoundPool: SoundPool @@ -51,7 +52,7 @@ private lateinit var taskViewModel: TaskViewModel private var taskLabel: TaskBean? = null - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioHigh("18") //角度 lastDegreeMap["lastDegree"] = 0f @@ -108,7 +109,7 @@ } override fun initEvent() { - depthButton.setOnClickListener { + binding.depthButton.setOnClickListener { isDetectDepth = true val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -135,7 +136,11 @@ } } - degreeButton.setOnClickListener { + binding.markerInfoButton.setOnClickListener { + if (DataBaseManager.get.loadTaskLabels().isEmpty()) { + "电子标识器本地数据未同步,请先同步".show(this) + return@setOnClickListener + } //查库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -180,27 +185,27 @@ } if (energy >= 5) { - depthButton.isEnabled = true - depthButton.setTextColor(Color.WHITE) - depthButton.setBackgroundResource(R.mipmap.left_button_enable) - degreeButton.isEnabled = true - degreeButton.setTextColor(Color.WHITE) - degreeButton.setBackgroundResource(R.mipmap.right_button_enable) + binding.depthButton.isEnabled = true + binding.depthButton.setTextColor(Color.WHITE) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable) + binding.markerInfoButton.isEnabled = true + binding.markerInfoButton.setTextColor(Color.WHITE) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable) - searchResultView.text = "已检测到标识器" - searchResultView.setTextColor(Color.parseColor("#428d00")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) + binding.searchResultView.text = "已检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#428d00")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) } else { - depthButton.isEnabled = false - depthButton.setTextColor(Color.parseColor("#CCCCCC")) - depthButton.setBackgroundResource(R.mipmap.left_button_disable) - degreeButton.isEnabled = false - degreeButton.setTextColor(Color.parseColor("#CCCCCC")) - degreeButton.setBackgroundResource(R.mipmap.right_button_disable) + binding.depthButton.isEnabled = false + binding.depthButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable) + binding.markerInfoButton.isEnabled = false + binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable) - searchResultView.text = "未检测到标识器" - searchResultView.setTextColor(Color.parseColor("#8D1717")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) + binding.searchResultView.text = "未检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#8D1717")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) } if (energy >= 41) { @@ -222,22 +227,22 @@ } if (energy <= 13) {//18° - energyTipsView.text = "标识器信号较弱,可能距离较远" - energyTipsView.setTextColor(Color.parseColor("#8D1717")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) + binding.energyTipsView.text = "标识器信号较弱,可能距离较远" + binding.energyTipsView.setTextColor(Color.parseColor("#8D1717")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) } else if (energy >= 41) {//148° - energyTipsView.text = "标识器信号极强,可能在正下方" - energyTipsView.setTextColor(Color.parseColor("#428d00")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) + binding.energyTipsView.text = "标识器信号极强,可能在正下方" + binding.energyTipsView.setTextColor(Color.parseColor("#428d00")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) } else {//[18°,148°] - energyTipsView.text = "已靠近标识器,请继续移动位置" - energyTipsView.setTextColor(Color.parseColor("#8C5700")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) + binding.energyTipsView.text = "已靠近标识器,请继续移动位置" + binding.energyTipsView.setTextColor(Color.parseColor("#8C5700")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) } //转换为转动的角度 val degree = (energy.toFloat() / 50) * 180 - energyValueView.text = decimal.format(degree) + binding.energyValueView.text = decimal.format(degree) val animation = RotateAnimation( lastDegreeMap["lastDegree"]!!, degree, @@ -246,7 +251,7 @@ ) animation.duration = 0 animation.fillAfter = true - needleView.startAnimation(animation) + binding.needleView.startAnimation(animation) //保存旋转后的角度 lastDegreeMap["lastDegree"] = degree @@ -280,7 +285,8 @@ this.identifierId = identifierId //自动上传标识器 - taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") + taskLabel = + DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") if (taskLabel != null) { val userName = SaveKeyValues.getValue( LocaleConstant.USER_NAME, "" @@ -293,7 +299,9 @@ return true } - override fun initLayoutView(): Int = R.layout.activity_search_label + override fun initViewBinding(): ActivitySearchLabelBinding { + return ActivitySearchLabelBinding.inflate(layoutInflater) + } override fun observeRequestState() { taskViewModel.loadState.observe(this) { @@ -306,7 +314,7 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt index 96b7225..a9a7f7f 100644 --- a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt @@ -9,10 +9,10 @@ import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.location.AMapLocation -import com.casic.detector.R import com.casic.detector.adapter.EditableImageAdapter import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityUploadEventBinding import com.casic.detector.extensions.compressImage import com.casic.detector.model.EventModel import com.casic.detector.utils.LoadingDialogHub @@ -27,12 +27,10 @@ import com.pengxh.kt.lite.extensions.* import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_upload_event.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File @SuppressLint("SetTextI18n") -class UploadEventActivity : KotlinBaseActivity() { +class UploadEventActivity : KotlinBaseActivity() { private val context: Context = this@UploadEventActivity private lateinit var imageAdapter: EditableImageAdapter @@ -40,7 +38,9 @@ private lateinit var taskViewModel: TaskViewModel private lateinit var taskId: String - override fun initLayoutView(): Int = R.layout.activity_upload_event + override fun initViewBinding(): ActivityUploadEventBinding { + return ActivityUploadEventBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -55,12 +55,13 @@ "事件上报成功!".show(this) finish() } + else -> LoadingDialogHub.dismiss() } } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -73,15 +74,15 @@ taskId = SaveKeyValues.getValue(LocaleConstant.TASK_ID, "") as String val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String - userNameView.text = userName + binding.userNameView.text = userName - uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = "${location.longitude}" - latView.text = "${location.latitude}" + binding.lngView.text = "${location.longitude}" + binding.latView.text = "${location.latitude}" } else { "当前位置信号差,无法获取定位".show(context) } @@ -89,7 +90,7 @@ }) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter } override fun initEvent() { @@ -111,20 +112,20 @@ } }) - cancelButton.setOnClickListener { finish() } + binding.cancelButton.setOnClickListener { finish() } - uploadEventButton.setOnClickListener { - if (eventDescriptionView.text.isNullOrBlank()) { + binding.uploadEventButton.setOnClickListener { + if (binding.eventDescriptionView.text.isNullOrBlank()) { "请输入事件描述!".show(this) return@setOnClickListener } val eventModel = EventModel() - eventModel.description = eventDescriptionView.text.toString() - eventModel.createTime = uploadTimeView.text.toString() + eventModel.description = binding.eventDescriptionView.text.toString() + eventModel.createTime = binding.uploadTimeView.text.toString() - eventModel.latitude = lngView.text.toString().toDouble() - eventModel.longitude = latView.text.toString().toDouble() + eventModel.latitude = binding.lngView.text.toString().toDouble() + eventModel.longitude = binding.latView.text.toString().toDouble() taskViewModel.uploadEvent(taskId, eventModel.toJson(), realPaths) } diff --git a/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt b/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt index 10674da..37c915c 100644 --- a/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt +++ b/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModelProvider import com.casic.detector.BuildConfig import com.casic.detector.R +import com.casic.detector.databinding.ActivityVersionControlBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.FileType @@ -25,18 +26,16 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import kotlinx.android.synthetic.main.activity_version_control.* -import kotlinx.android.synthetic.main.include_base_title.* import java.io.File -class VersionControlActivity : KotlinBaseActivity() { +class VersionControlActivity : KotlinBaseActivity() { private val kTag = "VersionControlActivity" private val progressDialog by lazy { ProgressDialog(this) } private lateinit var versionViewModel: VersionViewModel - override fun initData(savedInstanceState: Bundle?) { - versionView.text = "Version ${BuildConfig.VERSION_NAME}" + override fun initOnCreate(savedInstanceState: Bundle?) { + binding.versionView.text = "Version ${BuildConfig.VERSION_NAME}" //初始化下载对话框 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL) @@ -70,14 +69,16 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } - updateLayout.setOnClickListener { + binding.updateLayout.setOnClickListener { versionViewModel.getApplicationVersion() } } - override fun initLayoutView(): Int = R.layout.activity_version_control + override fun initViewBinding(): ActivityVersionControlBinding { + return ActivityVersionControlBinding.inflate(layoutInflater) + } override fun observeRequestState() { versionViewModel.loadState.observe(this) { @@ -90,8 +91,8 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.visibility = View.GONE + initLayoutImmersionBar(binding.rootView) + binding.titleInclude.titleView.visibility = View.GONE } private fun downloadApk(url: String?) { diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml index 5b459eb..cc69bd6 100644 --- a/app/src/main/res/layout/activity_install_label.xml +++ b/app/src/main/res/layout/activity_install_label.xml @@ -6,7 +6,9 @@ android:background="@color/mainBackground" android:orientation="vertical"> - + - + - + - + : AppCompatActivity() { + + protected lateinit var binding: VB private var serialPort: SerialPort? = null var outputStream: OutputStream? = null @@ -39,9 +42,10 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(initLayoutView()) + binding = initViewBinding() + setContentView(binding.root) setupTopBarLayout() - initData(savedInstanceState) + initOnCreate(savedInstanceState) observeRequestState() initEvent() @@ -62,9 +66,9 @@ } /** - * 初始化xml布局 + * 初始化ViewBinding */ - abstract fun initLayoutView(): Int + abstract fun initViewBinding(): VB /** * 特定页面定制沉浸式状态栏 @@ -74,7 +78,7 @@ /** * 初始化默认数据 */ - abstract fun initData(savedInstanceState: Bundle?) + abstract fun initOnCreate(savedInstanceState: Bundle?) /** * 数据请求状态监听 diff --git a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt index 0fe6a65..44d50e6 100644 --- a/app/src/main/java/com/casic/detector/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/detector/view/BigImageActivity.kt @@ -11,22 +11,24 @@ import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.casic.detector.R +import com.casic.detector.databinding.ActivityBigImageBinding import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import kotlinx.android.synthetic.main.activity_big_image.* -class BigImageActivity : KotlinBaseActivity() { +class BigImageActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_big_image + override fun initViewBinding(): ActivityBigImageBinding { + return ActivityBigImageBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmerseStatusBarUtil.setColor(this, Color.BLACK) - leftBackView.setOnClickListener { finish() } + binding.leftBackView.setOnClickListener { finish() } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { } @@ -41,18 +43,19 @@ return } val imageSize = urls.size - pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") - imagePagerView.adapter = BigImageAdapter(this, urls) - imagePagerView.currentItem = index - imagePagerView.offscreenPageLimit = imageSize - imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + binding.imagePagerView.adapter = BigImageAdapter(this, urls) + binding.imagePagerView.currentItem = index + binding.imagePagerView.offscreenPageLimit = imageSize + binding.imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { - pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + binding.pageNumberView.text = + String.format("(" + (position + 1) + "/" + imageSize + ")") } override fun onPageScrollStateChanged(state: Int) {} diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt index 176e747..7b94099 100644 --- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt @@ -23,6 +23,7 @@ import com.casic.detector.bean.LabelBean import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityInstallLabelBinding import com.casic.detector.extensions.* import com.casic.detector.utils.* import com.casic.detector.vm.TaskViewModel @@ -36,17 +37,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_install_label.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_install_label_identifier.* -import kotlinx.android.synthetic.main.include_install_label_object.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File import java.io.IOException import java.util.* @SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "InstallLabelActivity" private val context: Context = this@InstallLabelActivity @@ -59,26 +55,30 @@ private val gpioManager by lazy { GpioManager() } private lateinit var weakReferenceHandler: WeakReferenceHandler - override fun initData(savedInstanceState: Bundle?) { + override fun initViewBinding(): ActivityInstallLabelBinding { + return ActivityInstallLabelBinding.inflate(layoutInflater) + } + + override fun initOnCreate(savedInstanceState: Bundle?) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] //设置默认值 - markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) - pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) - buryDeepView.setText("buryDeepView".getDefaultValue()) - downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) - downPointDeepView.setText("downPointDeepView".getDefaultValue()) - areaView.setText("areaView".getDefaultValue()) - lineView.setText("lineView".getDefaultValue()) - roadView.setText("roadView".getDefaultValue()) - ownerView.setText("ownerView".getDefaultValue()) - identifierDeepView.setText("identifierDeepView".getDefaultValue()) - personDeptView.setText("personDeptView".getDefaultValue()) + binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue()) + binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue()) + binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue()) + binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue()) + binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue()) + binding.objectInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectInclude.lineView.setText("lineView".getDefaultValue()) + binding.objectInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue()) + binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue()) weakReferenceHandler = WeakReferenceHandler(this) @@ -93,16 +93,20 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } /**************************************************************************************/ - objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) - materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) - downPipeMaterialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) - buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) + binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0) + binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0) + binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0) + binding.objectInclude.downPipeMaterialSpinner.show( + this, + LocaleConstant.PIPE_MATERIAL_ARRAY, + 0 + ) + binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0) - constructDateView.setOnClickListener { + binding.objectInclude.constructDateView.setOnClickListener { val datePicker = DatePickerDialog( this, null, @@ -127,26 +131,31 @@ "建设年代不能早于当前日期".show(context) } else { datePicker.dismiss() - constructDateView.text = selectedDate + binding.objectInclude.constructDateView.text = selectedDate } } } - identifierTypeSpinner.show(this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0) + binding.identifierInclude.identifierTypeSpinner.show( + this, + LocaleConstant.IDENTIFIER_TYPE_ARRAY, + 0 + ) - installTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.identifierInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = location.longitude.toString() - latView.text = location.latitude.toString() + binding.identifierInclude.lngView.text = location.longitude.toString() + binding.identifierInclude.latView.text = location.latitude.toString() } else { "当前位置信号差,无法获取定位".show(context) } } }) - colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) + binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0) imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { @@ -166,21 +175,24 @@ } }) /**************************************************************************************/ - installButton.setOnClickListener { + binding.installButton.setOnClickListener { if (isNetworkConnected()) { val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String - if (markerObjectTypeView.text.isNullOrBlank()) { - when (objectTypeSpinner.selectedItem.toString()) { + if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) { + when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) { "管线" -> { "请输入管线种类!".show(this) } + "管线附属物" -> { "请输入附属物名称!".show(this) } + "管线特征管点" -> { "请输入特征管点!".show(this) } + "交叉穿越点" -> { "请输入上层管种类!".show(this) } @@ -188,57 +200,57 @@ return@setOnClickListener } - if (pipelineDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) { "请输入管径".show(this) return@setOnClickListener } - if (buryDeepView.text.isNullOrBlank()) { + if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) { "请输入埋深".show(this) return@setOnClickListener } - if (downPipeDiameterView.text.isNullOrBlank()) { + if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) { "请输入下层管管径".show(this) return@setOnClickListener } - if (areaView.text.isNullOrBlank()) { + if (binding.objectInclude.areaView.text.isNullOrBlank()) { "请输入所属区域".show(this) return@setOnClickListener } - if (lineView.text.isNullOrBlank()) { + if (binding.objectInclude.lineView.text.isNullOrBlank()) { "请输入所属线路".show(this) return@setOnClickListener } - if (roadView.text.isNullOrBlank()) { + if (binding.objectInclude.roadView.text.isNullOrBlank()) { "请输入所属道路".show(this) return@setOnClickListener } - if (constructDateView.text.isNullOrBlank()) { + if (binding.objectInclude.constructDateView.text.isNullOrBlank()) { "请选择建设年代".show(this) return@setOnClickListener } - if (ownerView.text.isNullOrBlank()) { + if (binding.objectInclude.ownerView.text.isNullOrBlank()) { "请输入权属单位".show(this) return@setOnClickListener } - if (identifierIdView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) { "请先读取标识器获取ID".show(this) return@setOnClickListener } - if (identifierDeepView.text.isNullOrBlank()) { + if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) { "请输入标识器埋深".show(this) return@setOnClickListener } - if (personDeptView.text.isNullOrBlank()) { + if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) { "请输入标识器安装部门".show(this) return@setOnClickListener } @@ -248,46 +260,46 @@ taskViewModel.installLabel( companyId, - objectTypeSpinner.selectedItem.toString().toObjectType(), - markerObjectTypeView.text.toString(), - materialSpinner.selectedItem.toString(), - "${pipelineDiameterView.text}mm", - "${buryDeepView.text}mm", - downPipeTypeSpinner.selectedItem.toString(), - downPipeMaterialSpinner.selectedItem.toString(), - "${downPipeDiameterView.text}mm", - "${downPointDeepView.text}mm", - buryMethodSpinner.selectedItem.toString(), - areaView.text.toString(), - lineView.text.toString(), - roadView.text.toString(), - constructDateView.text.toString(), - ownerView.text.toString(), + binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(), + binding.objectInclude.markerObjectTypeView.text.toString(), + binding.objectInclude.materialSpinner.selectedItem.toString(), + "${binding.objectInclude.pipelineDiameterView.text}mm", + "${binding.objectInclude.buryDeepView.text}mm", + binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(), + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(), + "${binding.objectInclude.downPipeDiameterView.text}mm", + "${binding.objectInclude.downPointDeepView.text}mm", + binding.objectInclude.buryMethodSpinner.selectedItem.toString(), + binding.objectInclude.areaView.text.toString(), + binding.objectInclude.lineView.text.toString(), + binding.objectInclude.roadView.text.toString(), + binding.objectInclude.constructDateView.text.toString(), + binding.objectInclude.ownerView.text.toString(), objectId, - identifierIdView.text.toString(), - identifierTypeSpinner.selectedItem.toString(), - "${identifierDeepView.text}mm", - personDeptView.text.toString(), - installTimeView.text.toString(), - lngView.text.toString(), - latView.text.toString(), - colorSpinner.selectedItem.toString().toColor(), - remarkView.text.toString(), + binding.identifierInclude.identifierIdView.text.toString(), + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(), + "${binding.identifierInclude.identifierDeepView.text}mm", + binding.identifierInclude.personDeptView.text.toString(), + binding.identifierInclude.installTimeView.text.toString(), + binding.identifierInclude.lngView.text.toString(), + binding.identifierInclude.latView.text.toString(), + binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(), + binding.remarkView.text.toString(), realPaths ) //保存默认值 - "markerObjectTypeView".setDefaultValue(markerObjectTypeView.text.toString()) - "pipelineDiameterView".setDefaultValue(pipelineDiameterView.text.toString()) - "buryDeepView".setDefaultValue(buryDeepView.text.toString()) - "downPipeDiameterView".setDefaultValue(downPipeDiameterView.text.toString()) - "downPointDeepView".setDefaultValue(downPointDeepView.text.toString()) - "areaView".setDefaultValue(areaView.text.toString()) - "lineView".setDefaultValue(lineView.text.toString()) - "roadView".setDefaultValue(roadView.text.toString()) - "ownerView".setDefaultValue(ownerView.text.toString()) - "identifierDeepView".setDefaultValue(identifierDeepView.text.toString()) - "personDeptView".setDefaultValue(personDeptView.text.toString()) + "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString()) + "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString()) + "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString()) + "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString()) + "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString()) + "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString()) + "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString()) + "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString()) + "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString()) + "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString()) + "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString()) } else { NoNetworkDialog.Builder() .setContext(context) @@ -301,7 +313,7 @@ } } - readLabelButton.setOnClickListener { + binding.readLabelButton.setOnClickListener { gpioManager.setGpioHigh("18") LoadingDialogHub.show(this, "标识器读取中,请稍后...") @@ -328,31 +340,33 @@ val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String val labelBean = LabelBean() - labelBean.objectType = objectTypeSpinner.selectedItem.toString() - labelBean.pipelineType = markerObjectTypeView.text.toString() - labelBean.pipelineMaterial = materialSpinner.selectedItem.toString() - labelBean.pipelineDiameter = "${pipelineDiameterView.text}mm" - labelBean.buryDeep = "${buryDeepView.text}mm" - labelBean.lowerType = downPipeTypeSpinner.selectedItem.toString() - labelBean.lowerMaterial = downPipeMaterialSpinner.selectedItem.toString() - labelBean.lowerDiameter = "${downPipeDiameterView.text}mm" - labelBean.lowerDeep = "${downPointDeepView.text}mm" - labelBean.buryMethod = buryMethodSpinner.selectedItem.toString() - labelBean.area = areaView.text.toString() - labelBean.line = lineView.text.toString() - labelBean.road = roadView.text.toString() - labelBean.constructTime = constructDateView.text.toString() - labelBean.owner = ownerView.text.toString() + labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString() + labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString() + labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString() + labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm" + labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm" + labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString() + labelBean.lowerMaterial = + binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString() + labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm" + labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm" + labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString() + labelBean.area = binding.objectInclude.areaView.text.toString() + labelBean.line = binding.objectInclude.lineView.text.toString() + labelBean.road = binding.objectInclude.roadView.text.toString() + labelBean.constructTime = binding.objectInclude.constructDateView.text.toString() + labelBean.owner = binding.objectInclude.ownerView.text.toString() labelBean.objectId = objectId - labelBean.identifierId = identifierIdView.text.toString() - labelBean.identifierType = identifierTypeSpinner.selectedItem.toString() - labelBean.identifierDeep = "${identifierDeepView.text}mm" - labelBean.person = personDeptView.text.toString() - labelBean.installTime = installTimeView.text.toString() - labelBean.lng = lngView.text.toString() - labelBean.lat = latView.text.toString() - labelBean.color = colorSpinner.selectedItem.toString().toColor() - labelBean.remark = remarkView.text.toString() + labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString() + labelBean.identifierType = + binding.identifierInclude.identifierTypeSpinner.selectedItem.toString() + labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm" + labelBean.person = binding.identifierInclude.personDeptView.text.toString() + labelBean.installTime = binding.identifierInclude.installTimeView.text.toString() + labelBean.lng = binding.identifierInclude.lngView.text.toString() + labelBean.lat = binding.identifierInclude.latView.text.toString() + labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor() + labelBean.remark = binding.remarkView.text.toString() labelBean.imagePath = realPaths.toJson() DataBaseManager.get.insertTaskLabel(labelBean) @@ -383,7 +397,7 @@ //查本地库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isEmpty()) { - identifierIdView.text = identifierId + binding.identifierInclude.identifierIdView.text = identifierId } else { "此标识器已安装,请更换标识器!".show(this) } @@ -424,8 +438,6 @@ }) } - override fun initLayoutView(): Int = R.layout.activity_install_label - override fun observeRequestState() { taskViewModel.loadState.observe(this) { when (it) { @@ -434,20 +446,21 @@ LoadingDialogHub.dismiss() finish() } + else -> LoadingDialogHub.dismiss() } } } override fun setupTopBarLayout() { - titleView.text = "安装新标识器" - titleView.setTextColor(R.color.themeColor.convertColor(this)) + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) ImmersionBar.with(this) .statusBarDarkFont(true) .statusBarColor(R.color.mainBackground) .init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt index 21f80b3..f24f691 100644 --- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.ViewModelProvider import com.amap.api.navi.NaviSetting -import com.casic.detector.R +import com.casic.detector.databinding.ActivityLoginBinding import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.GpioManager import com.casic.detector.utils.LoadingDialogHub @@ -18,21 +18,20 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_login.* -class LoginActivity : KotlinBaseActivity() { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" private lateinit var userViewModel: UserViewModel private val gpioManager by lazy { GpioManager() } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioLow("18") //先把导航隐私政策声明,后面导航会用到 NaviSetting.updatePrivacyShow(this, true, true) NaviSetting.updatePrivacyAgree(this, true) - autoSavePasswordView.isChecked = + binding.autoSavePasswordView.isChecked = SaveKeyValues.getValue(LocaleConstant.AUTO_SAVE, false) as Boolean userViewModel = ViewModelProvider(this)[UserViewModel::class.java] @@ -51,11 +50,11 @@ } override fun initEvent() { - loginButton.setOnClickListener { - val account = accountView.text.toString() - val password = passwordView.text.toString() - val serversIp = serversIpView.text.toString() - val serversPort = serversPortView.text.toString() + binding.loginButton.setOnClickListener { + val account = binding.accountView.text.toString() + val password = binding.passwordView.text.toString() + val serversIp = binding.serversIpView.text.toString() + val serversPort = binding.serversPortView.text.toString() if (account.isBlank() || password.isBlank() || serversIp.isBlank() || serversPort.isBlank()) { AlertMessageDialog.Builder() .setContext(this) @@ -79,7 +78,7 @@ } } - autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> + binding.autoSavePasswordView.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { SaveKeyValues.putValue(LocaleConstant.AUTO_SAVE, true) } else { @@ -88,7 +87,9 @@ } } - override fun initLayoutView(): Int = R.layout.activity_login + override fun initViewBinding(): ActivityLoginBinding { + return ActivityLoginBinding.inflate(layoutInflater) + } override fun observeRequestState() { userViewModel.loadState.observe(this) { @@ -101,24 +102,24 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) Log.d(kTag, "setupTopBarLayout => [${getScreenWidth()}, ${getScreenHeight()}]") } override fun onResume() { super.onResume() - if (autoSavePasswordView.isChecked) { - accountView.setText( + if (binding.autoSavePasswordView.isChecked) { + binding.accountView.setText( SaveKeyValues.getValue(LocaleConstant.USER_ACCOUNT, "") as String ) - passwordView.setText( + binding.passwordView.setText( SaveKeyValues.getValue(LocaleConstant.USER_PASSWORD, "") as String ) - serversIpView.setText( + binding.serversIpView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_IP, "") as String ) - serversPortView.setText( + binding.serversPortView.setText( SaveKeyValues.getValue(LocaleConstant.SERVER_PORT, "") as String ) } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 50ed07a..dd4a788 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -29,6 +29,7 @@ import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay import com.casic.detector.cluster.RegionItem +import com.casic.detector.databinding.ActivityMainBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.drawCircle import com.casic.detector.extensions.initLayoutImmersionBar @@ -61,15 +62,6 @@ import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.android.synthetic.main.activity_main.aimButton -import kotlinx.android.synthetic.main.activity_main.currentLocationView -import kotlinx.android.synthetic.main.activity_main.detectionButton -import kotlinx.android.synthetic.main.activity_main.inspectionButton -import kotlinx.android.synthetic.main.activity_main.installButton -import kotlinx.android.synthetic.main.activity_main.mapView -import kotlinx.android.synthetic.main.activity_main.rightImageView -import kotlinx.android.synthetic.main.activity_main.rootView -import kotlinx.android.synthetic.main.activity_main.viewButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +69,7 @@ import java.io.File -class MainActivity : KotlinBaseActivity() { +class MainActivity : KotlinBaseActivity() { private val kTag = "MainActivity" private val context: Context = this@MainActivity @@ -95,14 +87,16 @@ private lateinit var wakeLock: PowerManager.WakeLock private lateinit var taskBean: TaskBean - override fun initLayoutView(): Int = R.layout.activity_main + override fun initViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).statusBarColor(R.color.themeColor).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager wakeLock = powerManager.run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this@MainActivity.localClassName).apply { @@ -125,7 +119,8 @@ val downloadUrl = companyId.toString().appendDownloadUrl(FileType.EXCEL) Log.d(kTag, "downloadUrl => $downloadUrl") downloadUrl.downloadFile( - createDownloadFileDir().toString(), object : OnDownloadListener { + createDownloadFileDir().toString(), + object : OnDownloadListener { override fun onDownloadEnd(file: File?) { CoroutineScope(Dispatchers.Main).launch { labelBeans = ExcelHub.read(file?.absolutePath) @@ -153,11 +148,8 @@ if (it.success == "true") { //清空之前的数据 DataBaseManager.get.clearTasks() - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") - .setMessage("您有${it.message.size}个新任务!") - .setPositiveButton("知道了") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") + .setMessage("您有${it.message.size}个新任务!").setPositiveButton("知道了") .setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -169,7 +161,7 @@ } override fun initEvent() { - rightImageView.setOnClickListener { + binding.rightImageView.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val labels = withContext(Dispatchers.IO) { DataBaseManager.get.queryLabelById("0") @@ -177,8 +169,8 @@ if (labels.isNotEmpty()) { samplePopupWindow.setShowPosition(4) } - val x = rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) - samplePopupWindow.showAsDropDown(rightImageView, x, 1f.dp2px(context)) + val x = binding.rightImageView.width - samplePopupWindow.width - 1f.dp2px(context) + samplePopupWindow.showAsDropDown(binding.rightImageView, x, 1f.dp2px(context)) } } @@ -196,19 +188,15 @@ }) //安装。上传,然后存入本地库 - installButton.setOnClickListener { + binding.installButton.setOnClickListener { navigatePageTo() } //查看 - viewButton.setOnClickListener { - QueryMarkerDialog.Builder() - .setContext(context) - .setTitle("查看标识器") - .setSpinnerArray(LocaleConstant.SPINNER_ARRAY) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : + binding.viewButton.setOnClickListener { + QueryMarkerDialog.Builder().setContext(context).setTitle("查看标识器") + .setSpinnerArray(LocaleConstant.SPINNER_ARRAY).setNegativeButton("取消") + .setPositiveButton("确定").setOnDialogButtonClickListener(object : QueryMarkerDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedItem: String, value: String) { //查询数据库 @@ -255,7 +243,7 @@ } //巡检 - inspectionButton.setOnClickListener { + binding.inspectionButton.setOnClickListener { val task = DataBaseManager.get.queryDistinctTask() if (task.isNotEmpty()) { val arrayList = ArrayList() @@ -263,19 +251,14 @@ arrayList.add("任务${index + 1}:${taskBean.taskId},${taskBean.desc}") } - BottomActionSheet.Builder() - .setContext(this) - .setItemTextColor(Color.BLUE) + BottomActionSheet.Builder().setContext(this).setItemTextColor(Color.BLUE) .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { taskBean = task[position] SaveKeyValues.putValue(LocaleConstant.TASK_ID, taskBean.taskId) - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("请选择操作方式") - .setPositiveButton("执行工单") + AlertControlDialog.Builder().setContext(context).setTitle("提示") + .setMessage("请选择操作方式").setPositiveButton("执行工单") .setNegativeButton("提交工单") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { @@ -298,12 +281,9 @@ } }).build().show() } else { - AlertMessageDialog.Builder() - .setContext(this) - .setTitle("温馨提示") + AlertMessageDialog.Builder().setContext(this).setTitle("温馨提示") .setMessage("现有任务已完成,请点击右上角菜单按钮下载新工单!") - .setPositiveButton("知道了") - .setOnDialogButtonClickListener(object : + .setPositiveButton("知道了").setOnDialogButtonClickListener(object : AlertMessageDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -313,7 +293,7 @@ } //探测 - detectionButton.setOnClickListener { + binding.detectionButton.setOnClickListener { navigatePageTo() } } @@ -329,8 +309,8 @@ } private fun initMapConfig(savedInstanceState: Bundle?) { - mapView.onCreate(savedInstanceState) - aMap = mapView.map + binding.mapView.onCreate(savedInstanceState) + aMap = binding.mapView.map val uiSettings = aMap.uiSettings uiSettings.isCompassEnabled = true @@ -351,7 +331,7 @@ latitude = it.latitude //经纬度逆编码 LocationHub.antiCodingLocation(context, it) { address -> - currentLocationView.text = address + binding.currentLocationView.text = address } } @@ -369,7 +349,7 @@ } //自定义定位按钮 - aimButton.setOnClickListener { moveToCurrentLocation() } + binding.aimButton.setOnClickListener { moveToCurrentLocation() } } private fun moveToCurrentLocation() { @@ -496,13 +476,9 @@ val latLngBounds = builder.build() aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)) - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("请选择操作方式") - .setNegativeButton("标识器信息") - .setPositiveButton("到这里去") - .setOnDialogButtonClickListener(object : + AlertControlDialog.Builder().setContext(this).setTitle("提示") + .setMessage("请选择操作方式").setNegativeButton("标识器信息") + .setPositiveButton("到这里去").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { RouteOnMap.startNavigation(context, item.title, latLng) @@ -551,26 +527,20 @@ val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String taskViewModel.uploadTask(userId, taskId, state) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } //更新数据 private fun updateLabels() { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("是否更新数据?") - .setNegativeButton("取消") - .setPositiveButton("确定") + AlertControlDialog.Builder().setContext(this).setTitle("提示").setMessage("是否更新数据?") + .setNegativeButton("取消").setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { @@ -582,8 +552,7 @@ //TODO 设计如此,都传companyId taskViewModel.getMarkerFile(companyId.toString(), companyId.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) + NoNetworkDialog.Builder().setContext(context) .setOnDialogButtonClickListener(object : NoNetworkDialog.OnDialogButtonClickListener { override fun onButtonClick() { @@ -606,15 +575,13 @@ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") taskViewModel.getTask(userName.toString()) } else { - NoNetworkDialog.Builder() - .setContext(context) - .setOnDialogButtonClickListener(object : - NoNetworkDialog.OnDialogButtonClickListener { - override fun onButtonClick() { - val intent = Intent(Settings.ACTION_SETTINGS) - startActivity(intent) - } - }).build().show() + NoNetworkDialog.Builder().setContext(context).setOnDialogButtonClickListener(object : + NoNetworkDialog.OnDialogButtonClickListener { + override fun onButtonClick() { + val intent = Intent(Settings.ACTION_SETTINGS) + startActivity(intent) + } + }).build().show() } } @@ -694,7 +661,7 @@ override fun onResume() { super.onResume() - mapView.onResume() + binding.mapView.onResume() //协程异步显示默认数据 CoroutineScope(Dispatchers.Main).launch { labelBeans = withContext(Dispatchers.IO) { @@ -706,17 +673,17 @@ override fun onPause() { super.onPause() - mapView.onPause() + binding.mapView.onPause() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - mapView.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) } override fun onDestroy() { wakeLock.release() super.onDestroy() - mapView.onDestroy() + binding.mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt index 83605be..c1f28fc 100644 --- a/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/NewObjectDetailActivity.kt @@ -4,17 +4,18 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R +import com.casic.detector.databinding.ActivityNewObjectDetailBinding import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class NewObjectDetailActivity : KotlinBaseActivity() { +class NewObjectDetailActivity : KotlinBaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_new_object_detail + override fun initViewBinding(): ActivityNewObjectDetailBinding { + return ActivityNewObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -24,7 +25,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -34,12 +35,12 @@ window.attributes = params val identifierId = intent.getStringExtra(Constant.INTENT_PARAM)!! - identifierIdView.text = identifierId + binding.identifierIdView.text = identifierId } override fun initEvent() { - closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.closeView.setOnClickListener { finish() } + binding.showImageView.setOnClickListener { finish() "此对象没相关照片".show(this) } diff --git a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt index f9f58bb..3033db3 100644 --- a/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt +++ b/app/src/main/java/com/casic/detector/view/ObjectDetailActivity.kt @@ -5,8 +5,8 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Gravity -import com.casic.detector.R import com.casic.detector.bean.LabelBean +import com.casic.detector.databinding.ActivityObjectDetailBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.utils.FileType import com.casic.detector.utils.LocaleConstant @@ -18,16 +18,17 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_object_detail.* -class ObjectDetailActivity : KotlinBaseActivity() { +class ObjectDetailActivity : KotlinBaseActivity() { private val kTag = "ObjectDetailActivity" private val context: Context = this@ObjectDetailActivity private val gson by lazy { Gson() } private lateinit var labelBean: LabelBean - override fun initLayoutView(): Int = R.layout.activity_object_detail + override fun initViewBinding(): ActivityObjectDetailBinding { + return ActivityObjectDetailBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -37,7 +38,7 @@ } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -50,32 +51,33 @@ try { labelBean = gson.fromJson(objectJson, object : TypeToken() {}.type) - objectTypeView.text = LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] - pipelineTypeView.text = labelBean.pipelineType - pipelineDiameterView.text = labelBean.pipelineDiameter - pipelineMaterialView.text = labelBean.pipelineMaterial - buryMethodView.text = labelBean.buryMethod - buryDeepView.text = labelBean.buryDeep - areaView.text = labelBean.area - lineView.text = labelBean.line - roadView.text = labelBean.road - constructTimeView.text = labelBean.constructTime - ownerView.text = labelBean.owner - identifierIdView.text = labelBean.identifierId - identifierTypeView.text = labelBean.identifierType - identifierDeepView.text = labelBean.identifierDeep - personView.text = labelBean.person - installTimeView.text = labelBean.installTime - remarkView.text = labelBean.remark + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark } catch (e: NumberFormatException) { e.printStackTrace() } } override fun initEvent() { - closeView.setOnClickListener { finish() } + binding.closeView.setOnClickListener { finish() } - showImageView.setOnClickListener { + binding.showImageView.setOnClickListener { //查数据库 if (labelBean.imagePath.isNullOrEmpty()) { "此标识器无图片".show(context) diff --git a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt index b25fb19..cda654b 100644 --- a/app/src/main/java/com/casic/detector/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/detector/view/PermissionActivity.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.CountDownTimer import com.casic.detector.R +import com.casic.detector.databinding.ActivityPermssionBinding import com.casic.detector.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -10,7 +11,8 @@ import com.pengxh.kt.lite.utils.SaveKeyValues import pub.devrel.easypermissions.EasyPermissions -class PermissionActivity : KotlinBaseActivity(), EasyPermissions.PermissionCallbacks { +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { private val isFirstEnter = SaveKeyValues.getValue("isFirstEnter", true) as Boolean private val countDownTimer = object : CountDownTimer(2000, 500) { @@ -24,7 +26,7 @@ } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { EasyPermissions.requestPermissions( this, "${resources.getString(R.string.app_name)}需要获取必要权限", LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS @@ -35,7 +37,9 @@ } - override fun initLayoutView(): Int = R.layout.activity_permssion + override fun initViewBinding(): ActivityPermssionBinding { + return ActivityPermssionBinding.inflate(layoutInflater) + } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt index 4145a5e..298a718 100644 --- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt +++ b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt @@ -12,6 +12,7 @@ import com.casic.detector.R import com.casic.detector.base.SerialPortActivity import com.casic.detector.bean.TaskBean +import com.casic.detector.databinding.ActivitySearchLabelBinding import com.casic.detector.extensions.hexToString import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.extensions.toHex @@ -28,12 +29,12 @@ import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog -import kotlinx.android.synthetic.main.activity_search_label.* import java.io.IOException import java.text.DecimalFormat -import java.util.* +import java.util.Timer +import java.util.TimerTask -class SearchLabelActivity : SerialPortActivity(), Handler.Callback { +class SearchLabelActivity : SerialPortActivity(), Handler.Callback { private val kTag = "SearchLabelActivity" private lateinit var slowSoundPool: SoundPool @@ -51,7 +52,7 @@ private lateinit var taskViewModel: TaskViewModel private var taskLabel: TaskBean? = null - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { gpioManager.setGpioHigh("18") //角度 lastDegreeMap["lastDegree"] = 0f @@ -108,7 +109,7 @@ } override fun initEvent() { - depthButton.setOnClickListener { + binding.depthButton.setOnClickListener { isDetectDepth = true val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -135,7 +136,11 @@ } } - degreeButton.setOnClickListener { + binding.markerInfoButton.setOnClickListener { + if (DataBaseManager.get.loadTaskLabels().isEmpty()) { + "电子标识器本地数据未同步,请先同步".show(this) + return@setOnClickListener + } //查库 val result = DataBaseManager.get.queryLabelById(identifierId) if (result.isNotEmpty()) { @@ -180,27 +185,27 @@ } if (energy >= 5) { - depthButton.isEnabled = true - depthButton.setTextColor(Color.WHITE) - depthButton.setBackgroundResource(R.mipmap.left_button_enable) - degreeButton.isEnabled = true - degreeButton.setTextColor(Color.WHITE) - degreeButton.setBackgroundResource(R.mipmap.right_button_enable) + binding.depthButton.isEnabled = true + binding.depthButton.setTextColor(Color.WHITE) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable) + binding.markerInfoButton.isEnabled = true + binding.markerInfoButton.setTextColor(Color.WHITE) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable) - searchResultView.text = "已检测到标识器" - searchResultView.setTextColor(Color.parseColor("#428d00")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) + binding.searchResultView.text = "已检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#428d00")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green) } else { - depthButton.isEnabled = false - depthButton.setTextColor(Color.parseColor("#CCCCCC")) - depthButton.setBackgroundResource(R.mipmap.left_button_disable) - degreeButton.isEnabled = false - degreeButton.setTextColor(Color.parseColor("#CCCCCC")) - degreeButton.setBackgroundResource(R.mipmap.right_button_disable) + binding.depthButton.isEnabled = false + binding.depthButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable) + binding.markerInfoButton.isEnabled = false + binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC")) + binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable) - searchResultView.text = "未检测到标识器" - searchResultView.setTextColor(Color.parseColor("#8D1717")) - searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) + binding.searchResultView.text = "未检测到标识器" + binding.searchResultView.setTextColor(Color.parseColor("#8D1717")) + binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red) } if (energy >= 41) { @@ -222,22 +227,22 @@ } if (energy <= 13) {//18° - energyTipsView.text = "标识器信号较弱,可能距离较远" - energyTipsView.setTextColor(Color.parseColor("#8D1717")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) + binding.energyTipsView.text = "标识器信号较弱,可能距离较远" + binding.energyTipsView.setTextColor(Color.parseColor("#8D1717")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red) } else if (energy >= 41) {//148° - energyTipsView.text = "标识器信号极强,可能在正下方" - energyTipsView.setTextColor(Color.parseColor("#428d00")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) + binding.energyTipsView.text = "标识器信号极强,可能在正下方" + binding.energyTipsView.setTextColor(Color.parseColor("#428d00")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green) } else {//[18°,148°] - energyTipsView.text = "已靠近标识器,请继续移动位置" - energyTipsView.setTextColor(Color.parseColor("#8C5700")) - energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) + binding.energyTipsView.text = "已靠近标识器,请继续移动位置" + binding.energyTipsView.setTextColor(Color.parseColor("#8C5700")) + binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow) } //转换为转动的角度 val degree = (energy.toFloat() / 50) * 180 - energyValueView.text = decimal.format(degree) + binding.energyValueView.text = decimal.format(degree) val animation = RotateAnimation( lastDegreeMap["lastDegree"]!!, degree, @@ -246,7 +251,7 @@ ) animation.duration = 0 animation.fillAfter = true - needleView.startAnimation(animation) + binding.needleView.startAnimation(animation) //保存旋转后的角度 lastDegreeMap["lastDegree"] = degree @@ -280,7 +285,8 @@ this.identifierId = identifierId //自动上传标识器 - taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") + taskLabel = + DataBaseManager.get.queryTaskLabelByIdAndState(identifierId, "未开始") if (taskLabel != null) { val userName = SaveKeyValues.getValue( LocaleConstant.USER_NAME, "" @@ -293,7 +299,9 @@ return true } - override fun initLayoutView(): Int = R.layout.activity_search_label + override fun initViewBinding(): ActivitySearchLabelBinding { + return ActivitySearchLabelBinding.inflate(layoutInflater) + } override fun observeRequestState() { taskViewModel.loadState.observe(this) { @@ -306,7 +314,7 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).init() - initLayoutImmersionBar(rootView) + initLayoutImmersionBar(binding.rootView) } override fun onDestroy() { diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt index 96b7225..a9a7f7f 100644 --- a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt @@ -9,10 +9,10 @@ import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.location.AMapLocation -import com.casic.detector.R import com.casic.detector.adapter.EditableImageAdapter import com.casic.detector.callback.ILocationListener import com.casic.detector.callback.OnImageCompressListener +import com.casic.detector.databinding.ActivityUploadEventBinding import com.casic.detector.extensions.compressImage import com.casic.detector.model.EventModel import com.casic.detector.utils.LoadingDialogHub @@ -27,12 +27,10 @@ import com.pengxh.kt.lite.extensions.* import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_upload_event.* -import kotlinx.android.synthetic.main.include_install_label_open_camera.* import java.io.File @SuppressLint("SetTextI18n") -class UploadEventActivity : KotlinBaseActivity() { +class UploadEventActivity : KotlinBaseActivity() { private val context: Context = this@UploadEventActivity private lateinit var imageAdapter: EditableImageAdapter @@ -40,7 +38,9 @@ private lateinit var taskViewModel: TaskViewModel private lateinit var taskId: String - override fun initLayoutView(): Int = R.layout.activity_upload_event + override fun initViewBinding(): ActivityUploadEventBinding { + return ActivityUploadEventBinding.inflate(layoutInflater) + } override fun setupTopBarLayout() { @@ -55,12 +55,13 @@ "事件上报成功!".show(this) finish() } + else -> LoadingDialogHub.dismiss() } } } - override fun initData(savedInstanceState: Bundle?) { + override fun initOnCreate(savedInstanceState: Bundle?) { window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.decorView.setBackgroundColor(Color.TRANSPARENT) window.setGravity(Gravity.CENTER) @@ -73,15 +74,15 @@ taskId = SaveKeyValues.getValue(LocaleConstant.TASK_ID, "") as String val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String - userNameView.text = userName + binding.userNameView.text = userName - uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() + binding.uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate() LocationHub.getCurrentLocation(this, object : ILocationListener { override fun onAMapLocationGet(location: AMapLocation?) { if (location != null) { - lngView.text = "${location.longitude}" - latView.text = "${location.latitude}" + binding.lngView.text = "${location.longitude}" + binding.latView.text = "${location.latitude}" } else { "当前位置信号差,无法获取定位".show(context) } @@ -89,7 +90,7 @@ }) imageAdapter = EditableImageAdapter(this, 3, 3f) - addImageRecyclerView.adapter = imageAdapter + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter } override fun initEvent() { @@ -111,20 +112,20 @@ } }) - cancelButton.setOnClickListener { finish() } + binding.cancelButton.setOnClickListener { finish() } - uploadEventButton.setOnClickListener { - if (eventDescriptionView.text.isNullOrBlank()) { + binding.uploadEventButton.setOnClickListener { + if (binding.eventDescriptionView.text.isNullOrBlank()) { "请输入事件描述!".show(this) return@setOnClickListener } val eventModel = EventModel() - eventModel.description = eventDescriptionView.text.toString() - eventModel.createTime = uploadTimeView.text.toString() + eventModel.description = binding.eventDescriptionView.text.toString() + eventModel.createTime = binding.uploadTimeView.text.toString() - eventModel.latitude = lngView.text.toString().toDouble() - eventModel.longitude = latView.text.toString().toDouble() + eventModel.latitude = binding.lngView.text.toString().toDouble() + eventModel.longitude = binding.latView.text.toString().toDouble() taskViewModel.uploadEvent(taskId, eventModel.toJson(), realPaths) } diff --git a/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt b/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt index 10674da..37c915c 100644 --- a/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt +++ b/app/src/main/java/com/casic/detector/view/VersionControlActivity.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModelProvider import com.casic.detector.BuildConfig import com.casic.detector.R +import com.casic.detector.databinding.ActivityVersionControlBinding import com.casic.detector.extensions.appendDownloadUrl import com.casic.detector.extensions.initLayoutImmersionBar import com.casic.detector.utils.FileType @@ -25,18 +26,16 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import kotlinx.android.synthetic.main.activity_version_control.* -import kotlinx.android.synthetic.main.include_base_title.* import java.io.File -class VersionControlActivity : KotlinBaseActivity() { +class VersionControlActivity : KotlinBaseActivity() { private val kTag = "VersionControlActivity" private val progressDialog by lazy { ProgressDialog(this) } private lateinit var versionViewModel: VersionViewModel - override fun initData(savedInstanceState: Bundle?) { - versionView.text = "Version ${BuildConfig.VERSION_NAME}" + override fun initOnCreate(savedInstanceState: Bundle?) { + binding.versionView.text = "Version ${BuildConfig.VERSION_NAME}" //初始化下载对话框 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL) @@ -70,14 +69,16 @@ } override fun initEvent() { - leftBackView.setOnClickListener { finish() } + binding.titleInclude.leftBackView.setOnClickListener { finish() } - updateLayout.setOnClickListener { + binding.updateLayout.setOnClickListener { versionViewModel.getApplicationVersion() } } - override fun initLayoutView(): Int = R.layout.activity_version_control + override fun initViewBinding(): ActivityVersionControlBinding { + return ActivityVersionControlBinding.inflate(layoutInflater) + } override fun observeRequestState() { versionViewModel.loadState.observe(this) { @@ -90,8 +91,8 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.visibility = View.GONE + initLayoutImmersionBar(binding.rootView) + binding.titleInclude.titleView.visibility = View.GONE } private fun downloadApk(url: String?) { diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml index 5b459eb..cc69bd6 100644 --- a/app/src/main/res/layout/activity_install_label.xml +++ b/app/src/main/res/layout/activity_install_label.xml @@ -6,7 +6,9 @@ android:background="@color/mainBackground" android:orientation="vertical"> - + - + - + - +