diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 2d50d0a..cc2848b 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -34,6 +34,7 @@ "仪器设备", "标准装置", "证书报告", "委托需求", "访客", "标准规范", "能力列表", "计量培训", "合同发票", "业务统计", "客户列表", "外场检测" ) + val MIME_TYPES = arrayOf(MimeType.DOC, MimeType.DOCX, MimeType.PDF) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 2d50d0a..cc2848b 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -34,6 +34,7 @@ "仪器设备", "标准装置", "证书报告", "委托需求", "访客", "标准规范", "能力列表", "计量培训", "合同发票", "业务统计", "客户列表", "外场检测" ) + val MIME_TYPES = arrayOf(MimeType.DOC, MimeType.DOCX, MimeType.PDF) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt new file mode 100644 index 0000000..efbc58d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt @@ -0,0 +1,7 @@ +package com.casic.xz.meterage.utils + +object MimeType { + const val DOC = "application/msword" + const val DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + const val PDF = "application/pdf" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 2d50d0a..cc2848b 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -34,6 +34,7 @@ "仪器设备", "标准装置", "证书报告", "委托需求", "访客", "标准规范", "能力列表", "计量培训", "合同发票", "业务统计", "客户列表", "外场检测" ) + val MIME_TYPES = arrayOf(MimeType.DOC, MimeType.DOCX, MimeType.PDF) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt new file mode 100644 index 0000000..efbc58d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt @@ -0,0 +1,7 @@ +package com.casic.xz.meterage.utils + +object MimeType { + const val DOC = "application/msword" + const val DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + const val PDF = "application/pdf" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index 8e9a355..e8100d2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -36,10 +36,6 @@ // navigatePageTo() // } -// registerView.setOnClickListener { -// navigatePageTo() -// } - loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() if (userPhone.isBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 2d50d0a..cc2848b 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -34,6 +34,7 @@ "仪器设备", "标准装置", "证书报告", "委托需求", "访客", "标准规范", "能力列表", "计量培训", "合同发票", "业务统计", "客户列表", "外场检测" ) + val MIME_TYPES = arrayOf(MimeType.DOC, MimeType.DOCX, MimeType.PDF) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt new file mode 100644 index 0000000..efbc58d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt @@ -0,0 +1,7 @@ +package com.casic.xz.meterage.utils + +object MimeType { + const val DOC = "application/msword" + const val DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + const val PDF = "application/pdf" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index 8e9a355..e8100d2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -36,10 +36,6 @@ // navigatePageTo() // } -// registerView.setOnClickListener { -// navigatePageTo() -// } - loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() if (userPhone.isBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt index d1815cc..7274870 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.graphics.Color import android.graphics.Paint -import android.util.Log import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -21,6 +20,7 @@ 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.utils.LocaleConstant import com.casic.xz.meterage.vm.DictionaryViewModel import com.casic.xz.meterage.vm.EntrustViewModel import com.casic.xz.meterage.vm.FileUploadViewModel @@ -34,6 +34,7 @@ import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.realFilePath import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -117,6 +118,31 @@ } }) + private val selectFileLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult(), + object : ActivityResultCallback { + override fun onActivityResult(result: ActivityResult?) { + if (result?.resultCode == Activity.RESULT_OK) { + val data = result.data ?: return + + val uri = data.data + + val filePath = uri?.realFilePath(context) + if (filePath.isNullOrEmpty()) { + "文件路径错误,上传失败".show(context) + return + } + + val file = File(filePath) + if (filePath.endsWith("pdf")) { + fileUploadViewModel.uploadFile(file, FileType.PDF) + } else { + fileUploadViewModel.uploadFile(file, FileType.WORD) + } + } + } + }) + private val selectSampleLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult(), object : ActivityResultCallback { @@ -187,12 +213,13 @@ BottomActionSheet.Builder() .setContext(this) .setItemTextColor(Color.BLUE) - .setActionItemTitle(listOf("文件", "图片")) + .setActionItemTitle(listOf("拍照", "相册", "文件")) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { when (position) { - 0 -> uploadFile() - 1 -> uploadImage() + 0 -> takePicture() + 1 -> selectImage() + 2 -> selectFile() } } }).build().show() @@ -286,28 +313,34 @@ titleView.text = "委托需求" } - private fun uploadFile() { -// val explorer = FileExplorer(this) -// explorer.setInitDir(ExplorerMode.FILE, Environment.getExternalStorageDirectory()) -// explorer.setShowHomeDir(true) -// explorer.setShowUpDir(true) -// explorer.setShowHideDir(true) -// explorer.setAllowExtensions(arrayOf(".doc", ".docx", ".xls", ".xlsx", ".pdf")) -// explorer.setOnFileClickedListener { -// val type = if (it.name.endsWith(".doc") || it.name.endsWith(".docx")) { -// FileType.WORD -// } else if (it.name.endsWith(".pdf")) { -// FileType.PDF -// } else { -// FileType.UNKNOWN -// } -// -// Log.d("Casic", "EntrustAddActivity => uploadFile: ${it.absolutePath}") -// fileUploadViewModel.uploadFile(it, type) -// } + private fun takePicture() { + PictureSelector.create(this) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(context) + return + } + result[0].realPath.compressImage(context, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + fileUploadViewModel.uploadFile(file, FileType.IMAGE) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } + + override fun onCancel() { + + } + }) } - private fun uploadImage() { + private fun selectImage() { PictureSelector.create(this) .openGallery(SelectMimeType.ofImage()) .isGif(false) @@ -324,10 +357,6 @@ } result[0].realPath.compressImage(context, object : OnImageCompressListener { override fun onSuccess(file: File) { - Log.d( - "Casic", "EntrustAddActivity => onSuccess: ${file.absolutePath}" - ) - ///storage/emulated/0/Android/data/com.casic.xz.meterage/files/Pictures/CompressImage/1677478115391211.jpeg //上传图片 fileUploadViewModel.uploadFile(file, FileType.IMAGE) } @@ -343,4 +372,12 @@ } }) } + + private fun selectFile() { + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.putExtra(Intent.EXTRA_MIME_TYPES, LocaleConstant.MIME_TYPES) + intent.addCategory(Intent.CATEGORY_OPENABLE) + intent.type = "*/*" + selectFileLauncher.launch(intent) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 2d50d0a..cc2848b 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -34,6 +34,7 @@ "仪器设备", "标准装置", "证书报告", "委托需求", "访客", "标准规范", "能力列表", "计量培训", "合同发票", "业务统计", "客户列表", "外场检测" ) + val MIME_TYPES = arrayOf(MimeType.DOC, MimeType.DOCX, MimeType.PDF) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt new file mode 100644 index 0000000..efbc58d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/utils/MimeType.kt @@ -0,0 +1,7 @@ +package com.casic.xz.meterage.utils + +object MimeType { + const val DOC = "application/msword" + const val DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + const val PDF = "application/pdf" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index 8e9a355..e8100d2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -36,10 +36,6 @@ // navigatePageTo() // } -// registerView.setOnClickListener { -// navigatePageTo() -// } - loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() if (userPhone.isBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt index d1815cc..7274870 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustAddActivity.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.graphics.Color import android.graphics.Paint -import android.util.Log import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -21,6 +20,7 @@ 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.utils.LocaleConstant import com.casic.xz.meterage.vm.DictionaryViewModel import com.casic.xz.meterage.vm.EntrustViewModel import com.casic.xz.meterage.vm.FileUploadViewModel @@ -34,6 +34,7 @@ import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.realFilePath import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -117,6 +118,31 @@ } }) + private val selectFileLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult(), + object : ActivityResultCallback { + override fun onActivityResult(result: ActivityResult?) { + if (result?.resultCode == Activity.RESULT_OK) { + val data = result.data ?: return + + val uri = data.data + + val filePath = uri?.realFilePath(context) + if (filePath.isNullOrEmpty()) { + "文件路径错误,上传失败".show(context) + return + } + + val file = File(filePath) + if (filePath.endsWith("pdf")) { + fileUploadViewModel.uploadFile(file, FileType.PDF) + } else { + fileUploadViewModel.uploadFile(file, FileType.WORD) + } + } + } + }) + private val selectSampleLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult(), object : ActivityResultCallback { @@ -187,12 +213,13 @@ BottomActionSheet.Builder() .setContext(this) .setItemTextColor(Color.BLUE) - .setActionItemTitle(listOf("文件", "图片")) + .setActionItemTitle(listOf("拍照", "相册", "文件")) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { when (position) { - 0 -> uploadFile() - 1 -> uploadImage() + 0 -> takePicture() + 1 -> selectImage() + 2 -> selectFile() } } }).build().show() @@ -286,28 +313,34 @@ titleView.text = "委托需求" } - private fun uploadFile() { -// val explorer = FileExplorer(this) -// explorer.setInitDir(ExplorerMode.FILE, Environment.getExternalStorageDirectory()) -// explorer.setShowHomeDir(true) -// explorer.setShowUpDir(true) -// explorer.setShowHideDir(true) -// explorer.setAllowExtensions(arrayOf(".doc", ".docx", ".xls", ".xlsx", ".pdf")) -// explorer.setOnFileClickedListener { -// val type = if (it.name.endsWith(".doc") || it.name.endsWith(".docx")) { -// FileType.WORD -// } else if (it.name.endsWith(".pdf")) { -// FileType.PDF -// } else { -// FileType.UNKNOWN -// } -// -// Log.d("Casic", "EntrustAddActivity => uploadFile: ${it.absolutePath}") -// fileUploadViewModel.uploadFile(it, type) -// } + private fun takePicture() { + PictureSelector.create(this) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(context) + return + } + result[0].realPath.compressImage(context, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + fileUploadViewModel.uploadFile(file, FileType.IMAGE) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } + + override fun onCancel() { + + } + }) } - private fun uploadImage() { + private fun selectImage() { PictureSelector.create(this) .openGallery(SelectMimeType.ofImage()) .isGif(false) @@ -324,10 +357,6 @@ } result[0].realPath.compressImage(context, object : OnImageCompressListener { override fun onSuccess(file: File) { - Log.d( - "Casic", "EntrustAddActivity => onSuccess: ${file.absolutePath}" - ) - ///storage/emulated/0/Android/data/com.casic.xz.meterage/files/Pictures/CompressImage/1677478115391211.jpeg //上传图片 fileUploadViewModel.uploadFile(file, FileType.IMAGE) } @@ -343,4 +372,12 @@ } }) } + + private fun selectFile() { + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.putExtra(Intent.EXTRA_MIME_TYPES, LocaleConstant.MIME_TYPES) + intent.addCategory(Intent.CATEGORY_OPENABLE) + intent.type = "*/*" + selectFileLauncher.launch(intent) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/WriteSampleActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/WriteSampleActivity.kt index 1d8be2f..f50ad21 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/WriteSampleActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/WriteSampleActivity.kt @@ -1,8 +1,10 @@ package com.casic.xz.meterage.view.home import android.app.Activity +import android.content.Context import android.content.Intent import android.graphics.Color +import android.graphics.Paint import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -11,20 +13,29 @@ import com.casic.xz.meterage.callback.DateSelectedCallback import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showDatePicker +import com.casic.xz.meterage.extensions.watchAttachFile +import com.casic.xz.meterage.utils.FileType import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.FileUploadViewModel import com.casic.xz.meterage.vm.SampleViewModel import com.github.gzuliyujiang.wheelpicker.entity.DateEntity import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.realFilePath 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_write_sample.* +import java.io.File + class WriteSampleActivity : KotlinBaseActivity() { + private val context: Context = this@WriteSampleActivity private val items = arrayListOf("A", "B", "C") private lateinit var sampleViewModel: SampleViewModel + private lateinit var fileUploadViewModel: FileUploadViewModel override fun initData() { sampleViewModel = ViewModelProvider(this)[SampleViewModel::class.java] @@ -33,6 +44,22 @@ finish() } } + + fileUploadViewModel = ViewModelProvider(this)[FileUploadViewModel::class.java] + fileUploadViewModel.resultModel.observe(this) { + if (it.code == 200) { + val annexName = it.data[0] + instructionsView.text = annexName + val textPaint = instructionsView.paint + textPaint.flags = Paint.UNDERLINE_TEXT_FLAG + textPaint.isAntiAlias = true + instructionsView.setTextColor(Color.BLUE) + + instructionsView.setOnClickListener { + annexName.watchAttachFile(this) + } + } + } } private val selectCountryLauncher = @@ -48,6 +75,31 @@ } }) + private val selectFileLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult(), + object : ActivityResultCallback { + override fun onActivityResult(result: ActivityResult?) { + if (result?.resultCode == Activity.RESULT_OK) { + val data = result.data ?: return + + val uri = data.data + + val filePath = uri?.realFilePath(context) + if (filePath.isNullOrEmpty()) { + "文件路径错误,上传失败".show(context) + return + } + + val file = File(filePath) + if (filePath.endsWith("pdf")) { + fileUploadViewModel.uploadFile(file, FileType.PDF) + } else { + fileUploadViewModel.uploadFile(file, FileType.WORD) + } + } + } + }) + override fun initEvent() { leftBackView.setOnClickListener { finish() } @@ -76,6 +128,14 @@ }).build().show() } + uploadFileButton.setOnClickListener { + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.putExtra(Intent.EXTRA_MIME_TYPES, LocaleConstant.MIME_TYPES) + intent.addCategory(Intent.CATEGORY_OPENABLE) + intent.type = "*/*" + selectFileLauncher.launch(intent) + } + pushSampleView.setOnClickListener { val sampleName = sampleNameView.text.toString() if (sampleName.isBlank()) {