From 4bdfbb72f6f335bf02e4ad7796f538574408d017 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Fri, 6 Jan 2023 16:47:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + .../message/ObtainMessageFragment.kt | 80 +++++++++++++++---- .../message/ObtainMessageViewModel.kt | 1 + 3 files changed, 68 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4c41460..1399f55 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -143,6 +143,7 @@ dependencies { implementation 'com.github.JagarYousef:ChatVoicePlayer:1.1.0' // 图片查看器 https://github.com/XiaoGe-1996/ImageViewer implementation 'com.github.XiaoGe-1996:ImageViewer:v1.0.0' + implementation 'com.github.majidarabi:AndroidFilePicker:0.2.1' } kapt { diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt index 90dfee1..0f015bb 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt @@ -14,6 +14,7 @@ import android.widget.AdapterView import android.widget.AdapterView.OnItemSelectedListener import android.widget.ArrayAdapter import android.widget.Toast +import androidx.core.content.ContextCompat import androidx.core.widget.addTextChangedListener import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels @@ -31,6 +32,13 @@ import com.easytools.tools.FileUtils import com.easytools.tools.ResourceUtils import com.easytools.tools.ToastUtils import com.elvishew.xlog.XLog +import com.github.file_picker.FileType +import com.github.file_picker.ListDirection +import com.github.file_picker.adapter.FilePickerAdapter +import com.github.file_picker.data.model.Media +import com.github.file_picker.extension.showFilePicker +import com.github.file_picker.listener.OnItemClickListener +import com.github.file_picker.listener.OnSubmitClickListener import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.gredicer.datetimepicker.DateTimePickerFragment import com.hjq.permissions.OnPermissionCallback @@ -150,7 +158,9 @@ class ObtainMessageFragment: Fragment() { binding.layerAudioResult.visibility = if (hasAudio) VISIBLE else GONE binding.layerGetAudio.visibility = if (hasAudio) GONE else VISIBLE -// binding.llAudioPlay.visibility = if (hasAudio) VISIBLE else GONE + if (!hasAudio) { + binding.llAudioPlay.visibility = GONE + } } ) lifecycle.addObserver(recorderLifecycleObserver) @@ -178,7 +188,7 @@ class ObtainMessageFragment: Fragment() { } val sendToArray = mutableListOf("绑定车辆1(LYVXFEFEXNL754427)") - binding.edtSendTo.adapter = ArrayAdapter(context!!, + binding.edtSendTo.adapter = ArrayAdapter(requireContext(), android.R.layout.simple_dropdown_item_1line, android.R.id.text1, sendToArray) binding.edtSendTo.onItemSelectedListener = object: OnItemSelectedListener { override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { @@ -221,14 +231,14 @@ class ObtainMessageFragment: Fragment() { return } // 开始启动拍照界面 - photoHelper.setCrop(true).takePhoto(activity!!) + photoHelper.setCrop(true).takePhoto(requireActivity()) } override fun onDenied(permissions: MutableList, never: Boolean) { if (never) { Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show() // 如果是被永久拒绝就跳转到应用权限系统设置页面 - XXPermissions.startPermissionActivity(context!!, permissions) + XXPermissions.startPermissionActivity(requireContext(), permissions) } else { onCameraDenied() showRationaleForCamera(permissions) @@ -239,13 +249,56 @@ class ObtainMessageFragment: Fragment() { } binding.btnStartPhoto.setOnClickListener { - photoHelper.setCrop(true).selectPhoto(activity!!) + photoHelper.setCrop(true).selectPhoto(requireActivity()) } // 用户选择录音文件 binding.btnSelectSound.setOnClickListener { - photoHelper.setCrop(false).selectAudio(activity!!) -// SingleAudioPicker.showPicker(context!!) { +// photoHelper.setCrop(false).selectAudio(requireActivity()) + + showFilePicker( + submitText = "确认", + fileType = FileType.AUDIO, + title = "选择音频文件", + cancellable = true, + listDirection = ListDirection.RTL, + accentColor = ContextCompat.getColor(requireContext(), R.color.purple_700), + titleTextColor = ContextCompat.getColor(requireContext(), R.color.purple_700), + onSubmitClickListener = object : OnSubmitClickListener { + override fun onClick(files: List) { + // Do something here with selected files + val audioFile = files.get(0).file + if (!audioFile.parentFile.parentFile.absolutePath.equals(SystemConstant.SoundFolder)) { + val copyResult = FileIOUtils.writeFileFromIS(File(SystemConstant.SoundFolder, audioFile.name), FileInputStream(audioFile)) + XLog.e("拷贝结果:"+copyResult) + if (!copyResult) { + ToastUtils.showToast("无法访问该文件,请重新选择其他文件") + return + } + obtainMessageViewModel.updateMessageAudio(File(SystemConstant.SoundFolder, audioFile.name).absolutePath) + } else { + obtainMessageViewModel.updateMessageAudio(audioFile.absolutePath) + } + } + }, + onItemClickListener = object : OnItemClickListener { + override fun onClick(media: Media, position: Int, adapter: FilePickerAdapter) { + if (!media.file.isDirectory) { + if (!media.file.name.endsWith(".m4a")) { + ToastUtils.showToast("只能选择.m4a文件") + return + } + if (media.file.length()>2*1000*1000) { + ToastUtils.showToast("文件不能超过2M!") + return + } + adapter.setSelected(position) + } + } + } + ) + +// SingleAudioPicker.showPicker(requireContext()) { // val audioFile = File(it.contentUri.path) // ToastUtils.showToast(audioFile.absolutePath) // if (!audioFile.parentFile.parentFile.absolutePath.equals(SystemConstant.SoundFolder)) { @@ -293,7 +346,7 @@ class ObtainMessageFragment: Fragment() { if (never) { Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show() // 如果是被永久拒绝就跳转到应用权限系统设置页面 - XXPermissions.startPermissionActivity(context!!, permissions) + XXPermissions.startPermissionActivity(requireContext(), permissions) } else { onCameraDenied() showRationaleForCamera(permissions) @@ -482,7 +535,7 @@ class ObtainMessageFragment: Fragment() { localAttachmentList.add(audioAttachment) } if (localAttachmentList.isNotEmpty()) { - MaterialAlertDialogBuilder(context!!) + MaterialAlertDialogBuilder(requireContext()) .setTitle("提示") .setMessage("当前照片及音频内容需首先上传,是否尝试上传?") .setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i -> @@ -535,7 +588,6 @@ class ObtainMessageFragment: Fragment() { val confirmCallback = object: ObtainMessageViewModel.MyConfirmCallback { override fun onSucess() { - findNavController().navigate(R.id.navi) } } @@ -551,12 +603,12 @@ class ObtainMessageFragment: Fragment() { fun showRationaleForCamera(permissions: MutableList) { // showRationaleDialog(R.string.permission_camera_rationale, request) // Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show() - MaterialAlertDialogBuilder(context!!) + MaterialAlertDialogBuilder(requireContext()) .setTitle("提示") .setMessage("当前操作需要您授权拍摄权限!") .setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i -> dialogInterface.dismiss() - XXPermissions.startPermissionActivity(activity!!, permissions) + XXPermissions.startPermissionActivity(requireActivity(), permissions) }) .show() } @@ -567,12 +619,12 @@ class ObtainMessageFragment: Fragment() { } fun showRationaleForRecorder(permissions: MutableList) { - MaterialAlertDialogBuilder(context!!) + MaterialAlertDialogBuilder(requireContext()) .setTitle("提示") .setMessage("当前操作需要您授权录音权限!") .setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i -> dialogInterface.dismiss() - XXPermissions.startPermissionActivity(activity!!, permissions) + XXPermissions.startPermissionActivity(requireActivity(), permissions) }) .show() } diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt index 2f20fe9..f352210 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt @@ -158,6 +158,7 @@ class ObtainMessageViewModel: ViewModel() { } } else { ToastUtils.showToast(result.msg) + XLog.d(result.msg) } } catch (e: Exception) { ToastUtils.showToast(e.message)