From d1a9e3312387b6c47e6186af506787a8a66369d1 Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期六, 09 十一月 2024 18:40:36 +0800
Subject: [PATCH] fix

---
 app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt |  125 ++++++++++++++++++++++++++++++++---------
 1 files changed, 96 insertions(+), 29 deletions(-)

diff --git a/app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt b/app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt
index a9e8a46..437ba5d 100644
--- a/app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt
+++ b/app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt
@@ -1,34 +1,40 @@
 package com.sinata.xqmuse.ui.home
 
+import android.os.CountDownTimer
+import android.util.Log
 import androidx.core.os.bundleOf
 import cn.sinata.xldutils.gone
 import cn.sinata.xldutils.utils.SPUtils
 import cn.sinata.xldutils.utils.showAllowingStateLoss
+import cn.sinata.xldutils.utils.whiteToast
+import cn.sinata.xldutils.visible
+import com.share.utils.ShareUtils
+import com.sinata.xqmuse.MainActivity
 import com.sinata.xqmuse.R
 import com.sinata.xqmuse.dialog.CommentDialog
 import com.sinata.xqmuse.dialog.ShareDialog
 import com.sinata.xqmuse.dialog.TimeSettingDialog
 import com.sinata.xqmuse.dialog.VolumeDialog
+import com.sinata.xqmuse.network.Apis
 import com.sinata.xqmuse.network.HttpManager
 import com.sinata.xqmuse.network.entity.VoiceDetail
 import com.sinata.xqmuse.network.request
 import com.sinata.xqmuse.ui.TransparentStatusBarActivity
-import com.sinata.xqmuse.utils.AudioUtils
 import com.sinata.xqmuse.utils.Const
+import com.sinata.xqmuse.utils.event.EmptyEvent
 import com.sinata.xqmuse.utils.interfaces.StringCallback
+import com.umeng.socialize.bean.SHARE_MEDIA
 import kotlinx.android.synthetic.main.activity_voice_detail.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
 import org.jetbrains.anko.toast
 
 class VoiceDetailActivity:TransparentStatusBarActivity() {
     override fun setContentView() = R.layout.activity_voice_detail
 
-    private val id by lazy { intent.getStringExtra("id")?:"" }
-    private var voiceDetail:VoiceDetail? = null
-    private val player by lazy {
-        AudioUtils()
-    }
-    private var index = 0
-    private var isRecycle = true //true列表循环播放
+    private val voiceDetail by lazy { intent.getParcelableExtra<VoiceDetail>("data") }
+
+    private var countDownTimer:CountDownTimer? = null
 
     override fun initClick() {
         iv_back.setOnClickListener { finish() }
@@ -37,8 +43,19 @@
         }
 
         iv_play.setOnClickListener {
-            if (voiceDetail!=null)
-                player.startPlayMusic(this,voiceDetail?.meditationMusicList!![index])
+            if (MainActivity.voice?.id == voiceDetail?.id){
+                EventBus.getDefault().post(EmptyEvent(Const.EventCode.PAUSE_OR_RESUME_THINK))
+                if (MainActivity.playing) //播放中
+                    iv_play.setImageResource(R.mipmap.player_pause)
+                else
+                    iv_play.setImageResource(R.mipmap.play_detail)
+            }else{
+                if (MainActivity.playing)
+                    EventBus.getDefault().post(EmptyEvent(Const.EventCode.FINISH_THINK))
+                MainActivity.voice = voiceDetail
+                EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_THINK))
+                iv_play.setImageResource(R.mipmap.player_pause)
+            }
         }
 
         iv_share.setOnClickListener {
@@ -46,9 +63,13 @@
             shareDialog.callback = object :StringCallback{
                 override fun onResult(rst: String) {
                     if (rst == "wx"){
-                        toast("微信分享")
+                        ShareUtils.share(this@VoiceDetailActivity,
+                            SHARE_MEDIA.WEIXIN,voiceDetail?.detailDescription,voiceDetail?.meditationTitle,
+                            Apis.SHARE_VOICE.format(voiceDetail?.id),null,"")
                     }else{
-                        toast("朋友圈分享")
+                        ShareUtils.share(this@VoiceDetailActivity,
+                            SHARE_MEDIA.WEIXIN_CIRCLE,voiceDetail?.detailDescription,voiceDetail?.meditationTitle,
+                            Apis.SHARE_VOICE.format(voiceDetail?.id),null,"")
                     }
                 }
             }
@@ -59,20 +80,24 @@
             val timeSettingDialog = TimeSettingDialog()
             timeSettingDialog.callback = object :StringCallback{
                 override fun onResult(rst: String) {
-                    toast("设置倒计时$rst")
+                    Log.e(Const.Tag,"设置倒计时$rst")
+                    MainActivity.finishTime = System.currentTimeMillis()+rst.toLong()*60*1000
+                    EventBus.getDefault().post(EmptyEvent(Const.EventCode.THINK_TIMER))
+                    startTimer()
                 }
             }
             timeSettingDialog.showAllowingStateLoss(supportFragmentManager,"time")
         }
 
         iv_recycle.setOnClickListener {
-            isRecycle = !isRecycle
-            iv_recycle.setImageResource(if (isRecycle) R.mipmap.ic_recycle else R.mipmap.danquxunhuan)
-            toast(if (isRecycle) "当前播放模式已设置为顺序播放" else "当前播放模式已设置为单曲循环")
+            MainActivity.isRecycle = !MainActivity.isRecycle
+            iv_recycle.setImageResource(if (MainActivity.isRecycle) R.mipmap.danquxunhuan else R.mipmap.ic_recycle)
+            whiteToast(if (MainActivity.isRecycle) "当前播放模式已设置为单曲循环" else "当前播放模式已设置为顺序播放")
+            SPUtils.instance().put(Const.User.IS_RECYCLE,MainActivity.isRecycle).apply()
         }
         tv_comment.setOnClickListener {
             val commentDialog = CommentDialog()
-            commentDialog.arguments = bundleOf("id" to id)
+            commentDialog.arguments = bundleOf("id" to voiceDetail?.id)
             commentDialog.showAllowingStateLoss(supportFragmentManager,"comment")
         }
         iv_volume.setOnClickListener {
@@ -83,28 +108,70 @@
 
     override fun initView() {
         titleBar.gone()
-        isRecycle = SPUtils.instance().getBoolean(Const.User.IS_RECYCLE,true)
-        getDetail()
+        MainActivity.isRecycle = SPUtils.instance().getBoolean(Const.User.IS_RECYCLE,false)
+        iv_recycle.setImageResource(if (MainActivity.isRecycle) R.mipmap.danquxunhuan else R.mipmap.ic_recycle)
+        voiceDetail?.apply {
+            iv_collect.setImageResource(if (favorite == 1) R.mipmap.collected else R.mipmap.uncollect)
+            iv_bg.setImageURI(backgroundUrl)
+            tv_name.text = meditationTitle
+            tv_subtitle.text = detailDescription
+            tv_comment.text = questionCount
+            if (MainActivity.voice?.id == id&&MainActivity.playing) //是本音频并且播放中
+                iv_play.setImageResource(R.mipmap.player_pause)
+            else
+                iv_play.setImageResource(R.mipmap.play_detail)
+            val seconds = (if (MainActivity.voice?.id == id) meditationSecondList?.getOrNull(MainActivity.index) else meditationSecondList?.firstOrNull() )?: 0
+            tv_total.text = "%02d:%02d".format(seconds/60,seconds%60)
+            if (MainActivity.voice?.id == id&&MainActivity.finishTime!=0L)//有倒计时存在
+                startTimer()
+        }
+        EventBus.getDefault().register(this)
     }
 
-    private fun getDetail() {
-        HttpManager.getMeditationDetails(id).request(this){_,data->
-            this.voiceDetail = data
-            data?.apply {
-                iv_collect.setImageResource(if (favorite == 1) R.mipmap.collected else R.mipmap.uncollect)
-                iv_bg.setImageURI(backgroundUrl)
-                tv_name.text = meditationTitle
-                tv_subtitle.text = detailDescription
-                tv_comment.text = questionCount
+    private fun startTimer(){
+        if (countDownTimer!=null)
+            countDownTimer!!.cancel()
+        tv_timer.visible()
+        val offset = MainActivity.finishTime - System.currentTimeMillis()
+        countDownTimer = object :CountDownTimer(offset,1000){
+            override fun onTick(millisUntilFinished: Long) {
+                tv_timer.text = "%02d:%02d".format(millisUntilFinished/1000/60,millisUntilFinished/1000%60)
+            }
+
+            override fun onFinish() {
+                tv_timer.gone()
             }
         }
+        countDownTimer?.start()
     }
 
     private fun collect(){
-        HttpManager.favorite(id).request(this){_,data->
+        HttpManager.favorite(voiceDetail?.id?:"").request(this){_,data->
             voiceDetail?.favorite = if (voiceDetail?.favorite == 1) 2 else 1
             iv_collect.setImageResource(if (voiceDetail?.favorite == 1) R.mipmap.collected else R.mipmap.uncollect)
         }
     }
 
+    @Subscribe
+    fun onEvent(e:EmptyEvent){
+        if (e.code == Const.EventCode.FINISH_THINK){
+            iv_play.setImageResource(R.mipmap.play_detail)
+            sb_voice.progress = 0
+            tv_progress.text = "00:00"
+            tv_timer.gone()
+            countDownTimer?.cancel()
+        }else if (e.code == Const.EventCode.GOT_THINK_DURATION&&MainActivity.voice?.id == voiceDetail?.id){
+            tv_total.text = "%02d:%02d".format(MainActivity.currentDuration/60,MainActivity.currentDuration%60)
+            sb_voice.max = MainActivity.currentDuration
+        }else if (e.code == Const.EventCode.GOT_THINK_POSITION&&MainActivity.voice?.id == voiceDetail?.id){
+            tv_progress.text = "%02d:%02d".format(MainActivity.currentPosition/1000/60,MainActivity.currentPosition/1000%60)
+            sb_voice.progress = MainActivity.currentPosition/1000
+        }
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        EventBus.getDefault().unregister(this)
+        countDownTimer?.cancel()
+    }
 }
\ No newline at end of file

--
Gitblit v1.7.1