|
@@ -0,0 +1,299 @@
|
|
|
+package com.wdkl.ncs.android.component.nursehome.activity
|
|
|
+
|
|
|
+import android.annotation.SuppressLint
|
|
|
+import android.graphics.Color
|
|
|
+import android.os.Bundle
|
|
|
+import android.os.SystemClock
|
|
|
+import android.text.TextUtils
|
|
|
+import android.util.Log
|
|
|
+import android.view.MotionEvent
|
|
|
+import android.view.View
|
|
|
+import android.view.WindowManager
|
|
|
+import android.widget.AdapterView
|
|
|
+import com.enation.javashop.net.engine.model.NetState
|
|
|
+import com.wdkl.ncs.android.component.nursehome.R
|
|
|
+import com.wdkl.ncs.android.component.nursehome.adapter.CreatorAdapter
|
|
|
+import com.wdkl.ncs.android.component.nursehome.databinding.MessageCreateDialogActivityBinding
|
|
|
+import com.wdkl.ncs.android.component.nursehome.launch.NurseHomeLaunch
|
|
|
+import com.wdkl.ncs.android.component.nursehome.settingconfig.SettingConfig
|
|
|
+import com.wdkl.ncs.android.component.nursehome.util.MediaPlayHelper
|
|
|
+import com.wdkl.ncs.android.component.nursehome.util.RingPlayHelper
|
|
|
+import com.wdkl.ncs.android.component.nursehome.util.SpeechUtil
|
|
|
+import com.wdkl.ncs.android.lib.base.BaseActivity
|
|
|
+import com.wdkl.ncs.android.lib.utils.showMessage
|
|
|
+import com.wdkl.ncs.android.middleware.common.Constants
|
|
|
+import com.wdkl.ncs.android.middleware.helper.RecordHelper
|
|
|
+import com.wdkl.ncs.android.middleware.logic.contract.nursehome.MessageContract
|
|
|
+import com.wdkl.ncs.android.middleware.logic.presenter.nursehome.MessagePresenter
|
|
|
+import com.wdkl.ncs.android.middleware.model.dos.ClerkDO
|
|
|
+import com.wdkl.ncs.android.middleware.model.dos.FrameDO
|
|
|
+import com.wdkl.ncs.android.middleware.model.dos.RemarkDO
|
|
|
+import com.wdkl.ncs.android.middleware.utils.CommonUtils
|
|
|
+import com.wdkl.ncs.android.middleware.utils.MessageEvent
|
|
|
+import com.wdkl.ncs.android.middleware.utils.ScreenUtils
|
|
|
+import kotlinx.android.synthetic.main.message_create_dialog_activity.*
|
|
|
+import okhttp3.MediaType
|
|
|
+import okhttp3.MultipartBody
|
|
|
+import okhttp3.RequestBody
|
|
|
+import org.greenrobot.eventbus.Subscribe
|
|
|
+import org.greenrobot.eventbus.ThreadMode
|
|
|
+import java.io.File
|
|
|
+
|
|
|
+
|
|
|
+class CreateMessageActivity : BaseActivity<MessagePresenter, MessageCreateDialogActivityBinding>(), MessageContract.View {
|
|
|
+ val TAG = CreateMessageActivity::class.java.simpleName
|
|
|
+
|
|
|
+ private var messageType = 2 //1--用户备注,2--便签留言,3--语音留言
|
|
|
+ private var voiceMsgPath = ""
|
|
|
+
|
|
|
+ var downTime : Long = 0
|
|
|
+ var upTime : Long = 0
|
|
|
+ var downY : Float = 0f
|
|
|
+ var cancel : Boolean = false
|
|
|
+ var voiceFile : String? = null
|
|
|
+
|
|
|
+ var creatorAdapter: CreatorAdapter? = null
|
|
|
+ var selectClerk: String? = ""
|
|
|
+
|
|
|
+ override fun getLayId(): Int {
|
|
|
+ return R.layout.message_create_dialog_activity
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun bindDagger() {
|
|
|
+ NurseHomeLaunch.component.inject(this)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
+ setTheme(R.style.Theme_AppCompat_Translucent)
|
|
|
+
|
|
|
+ super.onCreate(savedInstanceState)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun init() {
|
|
|
+ val lp: WindowManager.LayoutParams = window.attributes
|
|
|
+ lp.width = ScreenUtils.getScreenWidth(this)*2 / 3 // 屏幕宽度的一半
|
|
|
+ lp.height = ScreenUtils.getScreenHeight(this)*3 / 4 // 屏幕高度的一半
|
|
|
+ window.attributes = lp // 设置参数给window
|
|
|
+
|
|
|
+ setFinishOnTouchOutside(false)
|
|
|
+
|
|
|
+ RecordHelper.getInstance().init()
|
|
|
+
|
|
|
+ radio_text_msg.isChecked = true
|
|
|
+ if (group_message_type.checkedRadioButtonId == R.id.radio_voice_msg) {
|
|
|
+ //语音
|
|
|
+ messageType = 3
|
|
|
+ edit_text_message.visibility = View.GONE
|
|
|
+ ll_voice_message.visibility = View.VISIBLE
|
|
|
+ } else {
|
|
|
+ //文本
|
|
|
+ messageType = 2
|
|
|
+ edit_text_message.visibility = View.VISIBLE
|
|
|
+ ll_voice_message.visibility = View.GONE
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Constants.part_id != -1) {
|
|
|
+ presenter.loadClerks(Constants.part_id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressLint("ClickableViewAccessibility")
|
|
|
+ override fun bindEvent() {
|
|
|
+ btn_add_cancel.setOnClickListener {
|
|
|
+ finish()
|
|
|
+ }
|
|
|
+
|
|
|
+ btn_add_save.setOnClickListener {
|
|
|
+ val remark = RemarkDO()
|
|
|
+ remark.partId = Constants.part_id
|
|
|
+ remark.type = messageType
|
|
|
+ if (TextUtils.isEmpty(selectClerk)) {
|
|
|
+ showMessage(R.string.str_invalid_creator_name)
|
|
|
+ return@setOnClickListener
|
|
|
+ } else {
|
|
|
+ remark.createName = selectClerk
|
|
|
+ }
|
|
|
+ if (messageType == 2) {
|
|
|
+ if (TextUtils.isEmpty(edit_text_message.text)) {
|
|
|
+ showMessage(R.string.str_message_content_error)
|
|
|
+ return@setOnClickListener
|
|
|
+ } else {
|
|
|
+ remark.content = edit_text_message.text.toString()
|
|
|
+ }
|
|
|
+ } else if (messageType == 3) {
|
|
|
+ if (TextUtils.isEmpty(voiceMsgPath)) {
|
|
|
+ showMessage(R.string.str_voice_message_invalid)
|
|
|
+ return@setOnClickListener
|
|
|
+ } else {
|
|
|
+ remark.content = getString(R.string.voice_message)
|
|
|
+ remark.filePath = voiceMsgPath
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ presenter.addNewMessage(remark)
|
|
|
+ }
|
|
|
+
|
|
|
+ ll_message_view.setOnClickListener {
|
|
|
+ //收起软键盘
|
|
|
+ CommonUtils.hideInputKeyboard(activity.window.decorView.windowToken)
|
|
|
+ }
|
|
|
+
|
|
|
+ group_message_type.setOnCheckedChangeListener { group, checkedId ->
|
|
|
+ //收起软键盘
|
|
|
+ CommonUtils.hideInputKeyboard(activity.window.decorView.windowToken)
|
|
|
+
|
|
|
+ if (checkedId == R.id.radio_voice_msg) {
|
|
|
+ //语音
|
|
|
+ messageType = 3
|
|
|
+ edit_text_message.visibility = View.GONE
|
|
|
+ ll_voice_message.visibility = View.VISIBLE
|
|
|
+ } else {
|
|
|
+ //文本
|
|
|
+ messageType = 2
|
|
|
+ edit_text_message.visibility = View.VISIBLE
|
|
|
+ ll_voice_message.visibility = View.GONE
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //语音留言
|
|
|
+ btn_voice_record.setOnTouchListener { v, event ->
|
|
|
+ when(event.action) {
|
|
|
+ MotionEvent.ACTION_DOWN -> {
|
|
|
+ cancel = false
|
|
|
+ downTime = System.currentTimeMillis()
|
|
|
+ downY = event.getY()
|
|
|
+
|
|
|
+ //先停止其他语音或铃声
|
|
|
+ RingPlayHelper.stopRingTone()
|
|
|
+ SpeechUtil.getInstance().stopSpeak(true)
|
|
|
+ MediaPlayHelper.getInstance().stopMusic()
|
|
|
+
|
|
|
+ //开始录制语音消息
|
|
|
+ RecordHelper.getInstance().startRecord()
|
|
|
+ tv_voice_record.setText(R.string.str_voice_msg_btn_title)
|
|
|
+ voice_record_timer.base = SystemClock.elapsedRealtime()
|
|
|
+ voice_record_timer.start()
|
|
|
+ voiceFile = RecordHelper.getInstance().audiofilePath
|
|
|
+
|
|
|
+ //按下时保持常亮
|
|
|
+ //wakeLock.acquire()
|
|
|
+ }
|
|
|
+
|
|
|
+ MotionEvent.ACTION_MOVE -> {
|
|
|
+ val moveY = event.getY()
|
|
|
+ if (Math.abs(downY - moveY) > 100) {
|
|
|
+ cancel = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ MotionEvent.ACTION_UP -> {
|
|
|
+ upTime = System.currentTimeMillis()
|
|
|
+ RecordHelper.getInstance().stopRecord()
|
|
|
+ tv_voice_record.setText(R.string.str_voice_msg_btn_text)
|
|
|
+ voice_record_timer.base = SystemClock.elapsedRealtime()
|
|
|
+ voice_record_timer.stop()
|
|
|
+
|
|
|
+ if (Math.abs(upTime - downTime) <= 1000) {
|
|
|
+ RecordHelper.getInstance().deleteAudioFile(voiceFile)
|
|
|
+ showMessage(R.string.str_voice_msg_record_loss)
|
|
|
+ } else if(cancel) {
|
|
|
+ RecordHelper.getInstance().deleteAudioFile(voiceFile)
|
|
|
+ showMessage(R.string.str_voice_msg_record_cancel)
|
|
|
+ } else {
|
|
|
+ //上传语音留言
|
|
|
+ if (voiceFile != null) {
|
|
|
+ val part = MultipartBody.Part.createFormData("file",
|
|
|
+ voiceFile,
|
|
|
+ RequestBody.create(MediaType.parse("multipart/form-data"), File(voiceFile!!))
|
|
|
+ )
|
|
|
+ presenter.uploadVoiceMsg(part)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //松开时释放
|
|
|
+ //wakeLock.release()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return@setOnTouchListener false
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun destory() {
|
|
|
+ //退出时删除本地语音留言音频文件
|
|
|
+ if (!TextUtils.isEmpty(voiceFile)) {
|
|
|
+ RecordHelper.getInstance().deleteAudioFile(voiceFile)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun showMessages(data: ArrayList<RemarkDO>) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun showPageMessages(data: ArrayList<RemarkDO>) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun resultAddMessage(remarkDO: RemarkDO) {
|
|
|
+ //添加便签留言返回的响应
|
|
|
+ Log.e(TAG, "message save success!")
|
|
|
+ showMessage(R.string.str_message_save_success)
|
|
|
+ setResult(11)
|
|
|
+ finish()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun resultDelMessage(data: String) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun uploadResponse(result: String) {
|
|
|
+ voiceMsgPath = result
|
|
|
+ tv_voice_msg_state.setTextColor(Color.parseColor("#00ff00"))
|
|
|
+ tv_voice_msg_state.setText(R.string.str_record_message_success)
|
|
|
+ //上传完成后删除本地文件
|
|
|
+ RecordHelper.getInstance().deleteAudioFile(voiceFile)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun showClerks(data: ArrayList<ClerkDO>) {
|
|
|
+ if (data.size > 0) {
|
|
|
+ creatorAdapter = CreatorAdapter(activity, data)
|
|
|
+ spinner_creator.adapter = creatorAdapter
|
|
|
+ spinner_creator.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
|
|
+ override fun onItemSelected(
|
|
|
+ parent: AdapterView<*>?,
|
|
|
+ view: View,
|
|
|
+ position: Int,
|
|
|
+ id: Long
|
|
|
+ ) {
|
|
|
+ selectClerk = data[position].clerkName
|
|
|
+ Log.e(TAG, "select clerk name: " + selectClerk)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onNothingSelected(parent: AdapterView<*>?) {}
|
|
|
+ }
|
|
|
+ spinner_creator.setSelection(0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onError(message: String, type: Int) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun complete(message: String, type: Int) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun start() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun networkMonitor(state: NetState) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Subscribe(threadMode = ThreadMode.MAIN)
|
|
|
+ fun onMoonEvent(messageEvent: MessageEvent) {
|
|
|
+ }
|
|
|
+
|
|
|
+}
|