diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0ee3a5..9fc7c01 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,8 +86,9 @@ - + + - + + () } + + backLayout.setOnClickListener { + requireContext().navigatePageTo() + } } private fun analyticalSelectResults(result: LocalMedia) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0ee3a5..9fc7c01 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,8 +86,9 @@ - + + () } + + backLayout.setOnClickListener { + requireContext().navigatePageTo() + } } private fun analyticalSelectResults(result: LocalMedia) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt new file mode 100644 index 0000000..a23d7fb --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt @@ -0,0 +1,162 @@ +package com.casic.xz.meterage.view + +import android.content.Context +import android.graphics.Color +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.OnImageCompressListener +import com.casic.xz.meterage.extensions.combineImagePath +import com.casic.xz.meterage.extensions.compressImage +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.FileType +import com.casic.xz.meterage.utils.GlideLoadEngine +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.FileViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_feed_back.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class FeedbackActivity : ApplicationBaseActivity() { + + private val context: Context = this@FeedbackActivity + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var fileUploadViewModel: FileViewModel + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_feed_back + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "意见反馈" + } + + override fun initData() { + imageAdapter = EditableImageAdapter(this, 1, 3f) + addImageRecyclerView.adapter = imageAdapter + + fileUploadViewModel = ViewModelProvider(this)[FileViewModel::class.java] + fileUploadViewModel.resultModel.observe(this) { + if (it.code == 200) { + val url = it.data[0] + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } + } + } + + override fun observeRequestState() { + fileUploadViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + + submitButton.setOnClickListener { + "接口未实现".show(this) + } + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> PictureSelector.create(this@FeedbackActivity) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(this@FeedbackActivity) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + 1 -> PictureSelector.create(this@FeedbackActivity) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(1) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.get) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(this@FeedbackActivity) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + } + }).build().show() + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片后上传 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + fileUploadViewModel.uploadFile(file, FileType.IMAGE) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0ee3a5..9fc7c01 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,8 +86,9 @@ - + + () } + + backLayout.setOnClickListener { + requireContext().navigatePageTo() + } } private fun analyticalSelectResults(result: LocalMedia) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt new file mode 100644 index 0000000..a23d7fb --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt @@ -0,0 +1,162 @@ +package com.casic.xz.meterage.view + +import android.content.Context +import android.graphics.Color +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.OnImageCompressListener +import com.casic.xz.meterage.extensions.combineImagePath +import com.casic.xz.meterage.extensions.compressImage +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.FileType +import com.casic.xz.meterage.utils.GlideLoadEngine +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.FileViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_feed_back.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class FeedbackActivity : ApplicationBaseActivity() { + + private val context: Context = this@FeedbackActivity + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var fileUploadViewModel: FileViewModel + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_feed_back + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "意见反馈" + } + + override fun initData() { + imageAdapter = EditableImageAdapter(this, 1, 3f) + addImageRecyclerView.adapter = imageAdapter + + fileUploadViewModel = ViewModelProvider(this)[FileViewModel::class.java] + fileUploadViewModel.resultModel.observe(this) { + if (it.code == 200) { + val url = it.data[0] + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } + } + } + + override fun observeRequestState() { + fileUploadViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + + submitButton.setOnClickListener { + "接口未实现".show(this) + } + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> PictureSelector.create(this@FeedbackActivity) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(this@FeedbackActivity) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + 1 -> PictureSelector.create(this@FeedbackActivity) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(1) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.get) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(this@FeedbackActivity) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + } + }).build().show() + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片后上传 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + fileUploadViewModel.uploadFile(file, FileType.IMAGE) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_smoke_radius_3.xml b/app/src/main/res/drawable/bg_solid_layout_smoke_radius_3.xml new file mode 100644 index 0000000..59a71d3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_smoke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0ee3a5..9fc7c01 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,8 +86,9 @@ - + + () } + + backLayout.setOnClickListener { + requireContext().navigatePageTo() + } } private fun analyticalSelectResults(result: LocalMedia) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt new file mode 100644 index 0000000..a23d7fb --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/FeedbackActivity.kt @@ -0,0 +1,162 @@ +package com.casic.xz.meterage.view + +import android.content.Context +import android.graphics.Color +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.OnImageCompressListener +import com.casic.xz.meterage.extensions.combineImagePath +import com.casic.xz.meterage.extensions.compressImage +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.FileType +import com.casic.xz.meterage.utils.GlideLoadEngine +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.FileViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_feed_back.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class FeedbackActivity : ApplicationBaseActivity() { + + private val context: Context = this@FeedbackActivity + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var fileUploadViewModel: FileViewModel + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_feed_back + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "意见反馈" + } + + override fun initData() { + imageAdapter = EditableImageAdapter(this, 1, 3f) + addImageRecyclerView.adapter = imageAdapter + + fileUploadViewModel = ViewModelProvider(this)[FileViewModel::class.java] + fileUploadViewModel.resultModel.observe(this) { + if (it.code == 200) { + val url = it.data[0] + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } + } + } + + override fun observeRequestState() { + fileUploadViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + + submitButton.setOnClickListener { + "接口未实现".show(this) + } + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> PictureSelector.create(this@FeedbackActivity) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(this@FeedbackActivity) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + 1 -> PictureSelector.create(this@FeedbackActivity) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(1) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.get) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(this@FeedbackActivity) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + } + }).build().show() + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片后上传 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + fileUploadViewModel.uploadFile(file, FileType.IMAGE) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_smoke_radius_3.xml b/app/src/main/res/drawable/bg_solid_layout_smoke_radius_3.xml new file mode 100644 index 0000000..59a71d3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_smoke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_feed_back.xml b/app/src/main/res/layout/activity_feed_back.xml new file mode 100644 index 0000000..045b087 --- /dev/null +++ b/app/src/main/res/layout/activity_feed_back.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + +