From 718f31c92e2029d05260810435a2c70cef6e6ce5 Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期四, 24 四月 2025 10:45:55 +0800
Subject: [PATCH] save

---
 app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt |  192 +++++++++++++++++++++++++++++++++++------------
 1 files changed, 141 insertions(+), 51 deletions(-)

diff --git a/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt b/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt
index 10cdb14..e4331dd 100644
--- a/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt
@@ -4,11 +4,13 @@
 import androidx.recyclerview.widget.LinearLayoutManager
 import cn.sinata.xldutils.fragment.BaseFragment
 import cn.sinata.xldutils.gone
-import cn.sinata.xldutils.utils.SPUtils
+import cn.sinata.xldutils.invisible
 import cn.sinata.xldutils.utils.ellipsize
 import cn.sinata.xldutils.visible
-import com.sinata.xqmuse.MainActivity
+import com.google.android.exoplayer2.upstream.DataSpec
+import com.google.android.exoplayer2.upstream.RawResourceDataSource
 import com.sinata.xqmuse.R
+import com.sinata.xqmuse.ThinkAudioService
 import com.sinata.xqmuse.network.HttpManager
 import com.sinata.xqmuse.network.entity.*
 import com.sinata.xqmuse.network.requestByF
@@ -21,11 +23,11 @@
 import com.sinata.xqmuse.ui.login.LoginActivity
 import com.sinata.xqmuse.ui.mine.VipActivity
 import com.sinata.xqmuse.utils.Const
+import com.sinata.xqmuse.utils.cache.ProxyVideoCacheManager
 import com.sinata.xqmuse.utils.event.EmptyEvent
 import com.sinata.xqmuse.utils.interfaces.StringCallback
 import kotlinx.android.synthetic.main.fragment_home.*
 import org.greenrobot.eventbus.EventBus
-import org.jetbrains.anko.startActivity
 import org.jetbrains.anko.support.v4.startActivity
 import org.jetbrains.anko.support.v4.toast
 
@@ -36,13 +38,13 @@
     private val topMenuAdapter = TopMenuAdapter(topMenu)
     private var today:HomeItem? = null //今日冥想
     private val privacy = arrayListOf<CommonItemBean>() //私人订制
-    private val privacyAdapter by lazy { HomeBannerAdapter(privacy,requireContext()) }
+    private val privacyAdapter by lazy { HomeBannerAdapter(privacy, requireContext()) }
 
     private val list = arrayListOf<HomeListBean>()
     private val adapter = HomeAdapter(list)
 
     override fun onFirstVisibleToUser() {
-        rv_menu.layoutManager = GridLayoutManager(requireContext(),4)
+        rv_menu.layoutManager = GridLayoutManager(requireContext(), 4)
         rv_menu.adapter = topMenuAdapter
         banner_privacy.adapter = privacyAdapter
         rv_list.layoutManager = LinearLayoutManager(requireContext())
@@ -50,10 +52,12 @@
         adapter.callback = object :StringCallback{
             override fun onResult(rst: String) {
                 showDialog()
-                HttpManager.getMeditationDetails(rst).requestByF(this@HomeFragment,success = {_,data->
-                    dismissDialog()
-                    data?.goDetail(requireContext())
-                }){_,_->
+                HttpManager.getMeditationDetails(rst).requestByF(
+                    this@HomeFragment,
+                    success = { _, data ->
+                        dismissDialog()
+                        data?.goDetail(requireContext())
+                    }){ _, _->
                     dismissDialog()
                 }
             }
@@ -64,13 +68,23 @@
         getList()
         getBottomMenu()
         initClick()
-        changeBg()
     }
 
     fun refreshData(){
         getToday()
         getPrivacy()
         getList()
+        EventBus.getDefault().post(EmptyEvent(Const.EventCode.CHANGE_BGM)) //BGM切换流程
+    }
+
+    fun refreshDataByResume(){
+        if (list.isNotEmpty()){
+            getTopMenu()
+            getToday()
+            getPrivacy()
+            getList()
+            getBottomMenu()
+        }
     }
 
     private fun initClick() {
@@ -80,10 +94,10 @@
         iv_privacy.setOnClickListener {
             startActivity<GuideActivity>()
         }
-        iv_guide.setOnClickListener {
+        tv_3.setOnClickListener {
             HttpManager.getH5(4).requestByF(this){ _, data->
                 data?.let {
-                    startActivity<H5Activity>("title" to "新手冥想指南","url" to it.content)
+                    startActivity<H5Activity>("title" to "新手冥想指南", "url" to it.content)
                 }
             }
         }
@@ -94,31 +108,42 @@
             startActivity<BGMSettingActivity>()
         }
         topMenuAdapter.setOnItemClickListener { view, position ->
-            startActivity<TypeVoiceActivity>("title" to topMenu[position].categoryName,"id" to topMenu[position].id)
+            startActivity<TypeVoiceActivity>(
+                "title" to topMenu[position].categoryName,
+                "id" to topMenu[position].id
+            )
         }
         iv_today.setOnClickListener {
             if (today!=null){
-                if (MainActivity.voice?.id == today?.meditationId){
+                if (today?.isShow == 1){ //跳转播放微电影
+                    startActivity<MicroVideoActivity>(
+                        "url" to today?.meditationVideo?.videoUrl,
+                        "title" to today?.meditationVideo?.title
+                    )
+                }else if (ThinkAudioService.voice?.id == today?.meditationId){
                     EventBus.getDefault().post(EmptyEvent(Const.EventCode.PAUSE_OR_RESUME_THINK))
-                    if (MainActivity.playing) //播放中
+                    if (ThinkAudioService.playing) //播放中
                         iv_play_today.setImageResource(R.mipmap.player_pause)
                     else
                         iv_play_today.setImageResource(R.mipmap.play)
                 }else{
                     showDialog()
-                    HttpManager.getMeditationDetails(today!!.meditationId).requestByF(this,success = {_,data->
-                        dismissDialog()
-                        if (data?.chargeType == 2&&data.isVip != 1){ //会员免费
-                            startActivity<VipActivity>()
-                        }else if (data?.chargeType == 3&&data.isBuy != 1){ //单独收费且未购买
-                            startActivity<BuyVoiceActivity>("id" to data.id)
-                        }else{
-                            if (MainActivity.playing)
-                                EventBus.getDefault().post(EmptyEvent(Const.EventCode.FINISH_THINK))
-                            MainActivity.voice = data
-                            EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_THINK))
-                        }
-                    }){_,_->
+                    HttpManager.getMeditationDetails(today!!.meditationId).requestByF(
+                        this,
+                        success = { _, data ->
+                            dismissDialog()
+                            if (data?.chargeType == 2 && data.isVip != 1) { //会员免费
+                                startActivity<VipActivity>()
+                            } else if (data?.chargeType == 3 && data.isBuy != 1) { //单独收费且未购买
+                                startActivity<BuyVoiceActivity>("id" to data.id)
+                            } else {
+                                if (ThinkAudioService.playing)
+                                    EventBus.getDefault()
+                                        .post(EmptyEvent(Const.EventCode.FINISH_THINK))
+                                ThinkAudioService.voice = data
+                                EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_THINK))
+                            }
+                        }){ _, _->
                         dismissDialog()
                     }
                 }
@@ -126,34 +151,64 @@
         }
         banner_privacy.setOnBannerListener { data, position ->
             showDialog()
-            HttpManager.getMeditationDetails(privacy[position].id).requestByF(this,success = {_,data->
-                dismissDialog()
-                data?.goDetail(requireContext())
-            }){_,_->
+            HttpManager.getMeditationDetails(privacy[position].id).requestByF(
+                this,
+                success = { _, data ->
+                    dismissDialog()
+                    data?.goDetail(requireContext())
+                }){ _, _->
                 dismissDialog()
             }
         }
         iv_pri_empty.setOnClickListener { startActivity<LoginActivity>() }
     }
 
-    fun changeBg(){
-        val bg = SPUtils.instance().getString(Const.User.BG)
-        if (!bg.isNullOrEmpty())
+    fun changeBg(bg: String, video: String){
+        if (video.isNotEmpty()){
+            iv_home.invisible()
+            player.visible()
+            player.release()
+            val cacheServer = ProxyVideoCacheManager.getProxy(context)
+            val proxyUrl = cacheServer.getProxyUrl(video)
+            player.setUrl(proxyUrl)
+            player.setLooping(true)
+            player.start()
+        } else if (bg.isNotEmpty()){
             iv_home.setImageURI(bg)
+            player.release()
+            player.gone()
+            iv_home.visible()
+        }else{
+            iv_home.invisible()
+            player.visible()
+            player.release()
+            //ExoPlayer
+            val dataSpec = DataSpec(RawResourceDataSource.buildRawResourceUri(R.raw.default_bg))
+            val rawResourceDataSource = RawResourceDataSource(requireContext())
+            try {
+                rawResourceDataSource.open(dataSpec)
+            } catch (e: RawResourceDataSource.RawResourceDataSourceException) {
+                e.printStackTrace()
+            }
+            val url = rawResourceDataSource.uri.toString()
+            player.setUrl(url)
+            player.setLooping(true)
+            player.start()
+        }
     }
 
     private fun getTopMenu(){
-        HttpManager.getCategoryListByType(1).requestByF(this){_,data->
+        HttpManager.getCategoryListByType(1).requestByF(this){ _, data->
             topMenu.clear()
-            topMenu.addAll(data?: arrayListOf())
+            topMenu.addAll(data ?: arrayListOf())
             topMenuAdapter.notifyDataSetChanged()
         }
     }
 
     private fun getBottomMenu(){
-        HttpManager.getCategoryListByType(2).requestByF(this){_,data->
+        HttpManager.getCategoryListByType(2).requestByF(this){ _, data->
             adapter.menus.clear()
-            adapter.menus.addAll(data?: arrayListOf())
+            adapter.menus.addAll(data ?: arrayListOf())
             if (list.isNotEmpty()){
                 list.add(1, HomeListBean(null, arrayListOf()))
                 adapter.notifyDataSetChanged()
@@ -162,42 +217,77 @@
     }
 
     fun getToday() {
-        HttpManager.getTodayMeditation().requestByF(this){_,data->
+        HttpManager.getTodayMeditation().requestByF(this){ _, data->
             today = data
-            if (today?.clientMeditationVO?.backgroundUrl.isNullOrEmpty()){
-                iv_daily_empty.visible()
+            if (data?.isShow == 0){
+                tv_1.text = "每日疗愈"
+                tv_sub_1.text = "Daily Meditation"
+                if (today?.clientMeditationVO?.backgroundUrl.isNullOrEmpty()){
+                    iv_daily_empty.visible()
+                }else{
+                    iv_daily_empty.gone()
+                    iv_today.setImageURI(today?.imageUrl)
+                    tv_length_today.text = "${today?.clientMeditationVO?.meditationTitle?.ellipsize(
+                        12
+                    )} | ${"%02d:%02d".format((data?.time ?: 0) / 60, (data?.time ?: 0) % 60)}"
+                    tv_today_count.text = "${(today?.clientMeditationVO?.realLearnedNum?:0)+(today?.clientMeditationVO?.virtualLearnedNum?:0)}人已参加学习"
+                }
             }else{
-                iv_daily_empty.gone()
-                iv_today.setImageURI(today?.imageUrl)
-                tv_length_today.text = "${today?.clientMeditationVO?.meditationTitle?.ellipsize(12)} | ${"%02d:%02d".format((data?.time?:0)/60,(data?.time?:0)%60)}"
-                tv_today_count.text = "${(today?.clientMeditationVO?.realLearnedNum?:0)+(today?.clientMeditationVO?.virtualLearnedNum?:0)}人已参加学习"
+                tv_1.text = "泉疗愈 微电影"
+                tv_sub_1.text = "Spring Healing Microfilm"
+                if (today?.meditationVideo?.videoUrl.isNullOrEmpty()){
+                    iv_daily_empty.visible()
+                }else{
+                    iv_daily_empty.gone()
+                    iv_today.setImageURI(today?.meditationVideo?.imageUrl)
+                    tv_length_today.text = "${today?.meditationVideo?.title?.ellipsize(18)} | ${"%02d:%02d".format(
+                        (today?.meditationVideo?.videoSecond ?: 0) / 60,
+                        (today?.meditationVideo?.videoSecond ?: 0) % 60
+                    )}"
+                    tv_today_count.text = ""
+                }
             }
         }
     }
 
     fun refreshTodayPlayingState(){
-        if (MainActivity.voice?.id == today?.meditationId&&MainActivity.playing)
+        if (ThinkAudioService.voice?.id == today?.meditationId&&ThinkAudioService.playing)
             iv_play_today.setImageResource(R.mipmap.player_pause)
         else
             iv_play_today.setImageResource(R.mipmap.play)
     }
 
     fun getPrivacy() {
-        HttpManager.getPersonalityPlan().requestByF(this){_,data->
+        HttpManager.getPersonalityPlan().requestByF(this){ _, data->
             privacy.clear()
-            privacy.addAll(data?: arrayListOf())
+            privacy.addAll(data ?: arrayListOf())
             privacyAdapter.notifyDataSetChanged()
         }
     }
 
     private fun getList() {
-        HttpManager.getMeditationAndCateList().requestByF(this){_,data->
+        HttpManager.getMeditationAndCateList().requestByF(this){ _, data->
             list.clear()
-            list.addAll(data?: arrayListOf())
+            list.addAll(data ?: arrayListOf())
             if (adapter.menus.isNotEmpty()){
                 list.add(1, HomeListBean(null, arrayListOf()))
                 adapter.notifyDataSetChanged()
             }
         }
     }
+
+    override fun onPause() {
+        super.onPause()
+        player?.pause()
+    }
+
+    override fun onResume() {
+        super.onResume()
+        player?.resume()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        player?.release()
+    }
 }
\ No newline at end of file

--
Gitblit v1.7.1