diff --git a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt index e4ea112..019e473 100644 --- a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt +++ b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt @@ -11,9 +11,9 @@ import java.io.File interface NavinfoVolvoService { @POST("/navi/cardDelivery/insertCardByApp") - fun insertCardByApp(@Body insertData: MutableMap) + suspend fun insertCardByApp(@Body insertData: Map):DefaultResponse @POST("/navi/cardDelivery/updateCardByApp") - fun updateCardByApp(@Body updateData: MutableMap) + suspend fun updateCardByApp(@Body updateData: Map):DefaultResponse @POST("/navi/cardDelivery/queryCardListByApp") fun queryCardListByApp(@Body queryData: MutableMap) @POST("/navi/cardDelivery/deleteCardByApp") @@ -22,5 +22,5 @@ interface NavinfoVolvoService { @Multipart suspend fun uploadAttachment(@Part attachmentFile: MultipartBody.Part):DefaultResponse> @POST("/img/download") - fun downLoadAttachment(@Body downloadData: MutableMap):Call>> + suspend fun downLoadAttachment(@Body downloadData: Map):DefaultResponse } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt index 97bb741..f130d53 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt @@ -28,8 +28,10 @@ import com.hjq.permissions.XXPermissions import com.navinfo.volvo.R import com.navinfo.volvo.RecorderLifecycleObserver import com.navinfo.volvo.databinding.FragmentObtainMessageBinding +import com.navinfo.volvo.db.dao.entity.Attachment import com.navinfo.volvo.db.dao.entity.AttachmentType import com.navinfo.volvo.db.dao.entity.Message +import com.navinfo.volvo.http.NavinfoVolvoCall import com.navinfo.volvo.ui.markRequiredInRed import com.navinfo.volvo.utils.EasyMediaFile import com.navinfo.volvo.utils.SystemConstant @@ -86,22 +88,37 @@ class ObtainMessageFragment: Fragment() { .load(attachment.pathUrl) .into(binding.imgMessageAttachment) // 显示名称 - binding.tvPhotoName.text = attachment.pathUrl.replace("\\", "/").substringAfterLast("/") hasPhoto = true // 如果当前attachment文件是本地文件,开始尝试网络上传 - if (!attachment.pathUrl.startsWith("http")) { - obtainMessageViewModel.uploadAttachment(File(attachment.pathUrl)) + val str = attachment.pathUrl.replace("\\", "/") + if (!str.startsWith("http")) { + obtainMessageViewModel.uploadAttachment(File(attachment.pathUrl), attachment.attachmentType) + binding.tvPhotoName.text = str.substringAfterLast("/", "picture.jpg") + } else { + binding.tvPhotoName.text = str.substring(str.lastIndexOf("/"), str.indexOf("?")) } } if (attachment.attachmentType == AttachmentType.AUDIO) { - binding.tvAudioName.text = attachment.pathUrl.replace("\\", "/").substringAfterLast("/") hasAudio = true + + // 如果当前attachment文件是本地文件,开始尝试网络上传 + val str = attachment.pathUrl.replace("\\", "/") + if (!str.startsWith("http")) { + obtainMessageViewModel.uploadAttachment(File(attachment.pathUrl), attachment.attachmentType) + binding.tvAudioName.text = str.substringAfterLast("/", "audio.m4a") + } else { + val str = attachment.pathUrl.replace("\\", "/") + binding.tvAudioName.text = str.substring(str.lastIndexOf("/"), str.indexOf("?")) + } } } + + // 如果当前attachment不为空,可以显示预览按钮 } binding.layerPhotoResult.visibility = if (hasPhoto) VISIBLE else GONE binding.layerGetPhoto.visibility = if (hasPhoto) GONE else VISIBLE + binding.imgMessageAttachment.visibility = if (hasPhoto) VISIBLE else GONE binding.layerAudioResult.visibility = if (hasAudio) VISIBLE else GONE binding.layerGetAudio.visibility = if (hasAudio) GONE else VISIBLE } @@ -118,6 +135,10 @@ class ObtainMessageFragment: Fragment() { obtainMessageViewModel.updateMessageTitle(it.toString()) } + binding.edtSendFrom.addTextChangedListener { + obtainMessageViewModel.updateMessageSendFrom(it.toString()) + } + binding.imgPhotoDelete.setOnClickListener { obtainMessageViewModel.updateMessagePic(null) } @@ -285,6 +306,7 @@ class ObtainMessageFragment: Fragment() { } binding.btnObtainMessageConfirm.setOnClickListener { + var checkResult = true // 检查当前输入数据 val messageData = obtainMessageViewModel.getMessageLiveData().value if (messageData?.title?.isEmpty() == true) { @@ -292,10 +314,11 @@ class ObtainMessageFragment: Fragment() { binding.ttTitle val toolTip = ToolTip() .withText("请输入问候信息") - .withColor(com.navinfo.volvo.R.color.purple_200) - .withShadow() + .withColor(R.color.white) + .withTextColor(R.color.black) .withAnimationType(ToolTip.AnimationType.FROM_MASTER_VIEW) toolTipRelativeLayout.showToolTipForView(toolTip, binding.tiLayoutTitle) + checkResult = false } var hasPic = false var hasAudio = false @@ -312,20 +335,22 @@ class ObtainMessageFragment: Fragment() { binding.ttPic val toolTip = ToolTip() .withText("需要提供照片文件") - .withColor(com.navinfo.volvo.R.color.purple_200) - .withShadow() + .withColor(R.color.white) + .withTextColor(R.color.black) .withAnimationType(ToolTip.AnimationType.FROM_MASTER_VIEW) toolTipRelativeLayout.showToolTipForView(toolTip, binding.tvUploadPic) + checkResult = false } if (!hasAudio) { val toolTipRelativeLayout = binding.ttAudio val toolTip = ToolTip() .withText("需要提供音频文件") - .withColor(com.navinfo.volvo.R.color.purple_200) - .withShadow() + .withColor(R.color.white) + .withTextColor(R.color.black) .withAnimationType(ToolTip.AnimationType.FROM_MASTER_VIEW) toolTipRelativeLayout.showToolTipForView(toolTip, binding.tvUploadPic) + checkResult = false } if (messageData?.fromId?.isEmpty()==true) { @@ -333,20 +358,55 @@ class ObtainMessageFragment: Fragment() { binding.ttSendFrom val toolTip = ToolTip() .withText("请输入您的名称") - .withColor(com.navinfo.volvo.R.color.purple_200) - .withShadow() + .withColor(R.color.white) + .withTextColor(R.color.black) .withAnimationType(ToolTip.AnimationType.FROM_MASTER_VIEW) toolTipRelativeLayout.showToolTipForView(toolTip, binding.edtSendFrom) + checkResult = false } if (messageData?.toId?.isEmpty()==true) { val toolTipRelativeLayout = binding.ttSendTo val toolTip = ToolTip() .withText("请选择要发送的车辆") - .withColor(com.navinfo.volvo.R.color.purple_200) - .withShadow() + .withColor(R.color.white) + .withTextColor(R.color.black) .withAnimationType(ToolTip.AnimationType.FROM_MASTER_VIEW) toolTipRelativeLayout.showToolTipForView(toolTip, binding.edtSendTo) + checkResult = false + } + + if (checkResult) { // 检查通过 + // 检查attachment是否为本地数据,如果是本地则弹出对话框尝试上传 + val localAttachmentList = mutableListOf() + for (attachment in messageData?.attachment!!) { + if (!attachment.pathUrl.startsWith("http")) { + localAttachmentList.add(attachment) + } + } + if (localAttachmentList.isNotEmpty()) { + MaterialAlertDialogBuilder(context!!) + .setTitle("提示") + .setMessage("当前照片及音频内容需首先上传,是否尝试上传?") + .setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i -> + dialogInterface.dismiss() + for (attachment in localAttachmentList) { + obtainMessageViewModel.uploadAttachment(File(attachment.pathUrl), attachment.attachmentType) + } + }) + .show() + return@setOnClickListener + } + + // 检查发送时间 + + + // 开始网络提交数据 + if (obtainMessageViewModel.getMessageLiveData().value?.netId!!.isEmpty()) { // 如果网络id为空,则调用更新操作 + obtainMessageViewModel.insertCardByApp() + } else { + obtainMessageViewModel.updateCardByApp() + } } } } diff --git a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt index 4fb4456..9e1cfce 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt @@ -91,7 +91,33 @@ class ObtainMessageViewModel: ViewModel() { this.msgLiveData.postValue(this.msgLiveData.value) } - fun uploadAttachment(attachmentFile: File) { + // 获取照片url + fun getImageAttachment(attachementList: List): Attachment? { + for (attachment in attachementList) { + if (attachment.attachmentType == AttachmentType.PIC) { + return attachment + } + } + return null + } + + // 获取音频url + fun getAudioAttachment(attachementList: List): Attachment? { + for (attachment in attachementList) { + if (attachment.attachmentType == AttachmentType.AUDIO) { + return attachment + } + } + return null + } + + // 获取发送时间 + fun getSendDate(){ + + } + + // 上传附件文件 + fun uploadAttachment(attachmentFile: File, attachmentType: AttachmentType) { // 启用协程调用网络请求 viewModelScope.launch { try { @@ -102,6 +128,98 @@ class ObtainMessageViewModel: ViewModel() { XLog.d(result.code) if (result.code == 200) { // 请求成功 // 获取上传后的结果 + val fileKey = result.data?.get("fileKey") + if (fileKey!=null) { + downloadAttachment(fileKey, attachmentType) + } + } else { + ToastUtils.showToast(result.message) + } + } catch (e: Exception) { + ToastUtils.showToast(e.message) + XLog.d(e.message) + } + } + } + + // 下载附件文件 + fun downloadAttachment(fileKey: String, attachmentType: AttachmentType) { + // 启用协程调用网络请求 + viewModelScope.launch { + try { + val downloadParam = mapOf("fileKey" to fileKey) + val result = NavinfoVolvoCall.getApi().downLoadAttachment(downloadParam) + XLog.d(result.code) + if (result.code == 200) { // 请求成功 + // 获取上传后的结果 + val imageUrl = result.data + if (imageUrl!=null) { + XLog.d("downloadAttachment-imageUrl:${imageUrl}") + // 获取到图片的网络地址 + if (attachmentType == AttachmentType.PIC) { + updateMessagePic(imageUrl) + } else { + updateMessageAudio(imageUrl) + } + } + } else { + ToastUtils.showToast(result.message) + } + } catch (e: Exception) { + ToastUtils.showToast(e.message) + XLog.d(e.message) + } + } + } + + fun insertCardByApp() { + viewModelScope.launch { + try { + val message = msgLiveData.value + val insertData = mapOf( + "name" to message?.title, + "imageUrl" to getImageAttachment(message?.attachment!!)?.pathUrl, + "mediaUrl" to getAudioAttachment(message?.attachment!!)?.pathUrl, + "who" to message?.fromId, + "toWho" to message?.toId, + "sendDate" to message?.sendDate + ) + val result = NavinfoVolvoCall.getApi().insertCardByApp(insertData as Map) + XLog.d("insertCardByApp:${result.code}") + if (result.code == 200) { // 请求成功 + // 获取上传后的结果 + val netId = result.data + message.netId = netId!! + // 尝试保存数据到本地 + } else { + ToastUtils.showToast(result.message) + } + } catch (e: Exception) { + ToastUtils.showToast(e.message) + XLog.d(e.message) + } + } + } + + fun updateCardByApp() { + viewModelScope.launch { + try { + val message = msgLiveData.value + val insertData = mapOf( + "name" to message?.title, + "imageUrl" to getImageAttachment(message?.attachment!!)?.pathUrl, + "mediaUrl" to getAudioAttachment(message?.attachment!!)?.pathUrl, + "who" to message?.fromId, + "toWho" to message?.toId, + "sendDate" to message?.sendDate + ) + val result = NavinfoVolvoCall.getApi().updateCardByApp(insertData as Map) + XLog.d("updateCardByApp:${result.code}") + if (result.code == 200) { // 请求成功 + // 获取上传后的结果 + val netId = result.data + message.netId = netId!! + // 尝试保存数据到本地 } else { ToastUtils.showToast(result.message) }