lmw
2024-11-26 b8d8f9b855fdd453d06d78d2565f091db208ec8e
app/src/main/java/com/sinata/xqmuse/MainActivity.kt
@@ -1,10 +1,13 @@
package com.sinata.xqmuse
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.provider.Settings
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter
import cn.sinata.xldutils.gone
@@ -30,6 +33,7 @@
import com.sinata.xqmuse.utils.AudioUtils
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.event.IntEvent
import kotlinx.android.synthetic.main.activity_main.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -63,6 +67,9 @@
    private var startTime = 0L //开始疗愈的时间戳
    var hasTreeFirstShow = false //此字段用来判断 树苗的首次弹窗是否已经触发,和isFirst字段配合使用
    var isBGMChanged = false //此字段用来判断 在疗愈播放中,修改了背景音乐,在疗愈结束后 需要更新BGM音源
    override fun initClick() {
        player_close.setOnClickListener {
            TipDialog.show(supportFragmentManager,"是否关闭当前音频?",object :TipDialog.OnClickCallback{
@@ -94,6 +101,7 @@
                thinkHandler?.removeMessages(MSG_PROGRESS)
                saveThinkRecord()
            }
            (fragments[0] as HomeFragment).refreshTodayPlayingState()
        }
    }
@@ -106,7 +114,7 @@
        if (!intent.getStringExtra("code").isNullOrEmpty()){
            startActivity<ShareActivity>("code" to intent.getStringExtra("code"))
        }
        if (isFirst) //解决首次启动eventbus注册慢的问题
        if (isFirst) //解决首次安装启动eventbus注册慢的问题
            startActivity<GuideActivity>()
        thinkHandler = object :Handler(Looper.myLooper()!!){
@@ -209,6 +217,7 @@
            player_play.setImageResource(R.mipmap.player_pause)
            thinkHandler?.sendEmptyMessage(MSG_PROGRESS)
            startTime = System.currentTimeMillis()  //记录开始冥想的时间
            (fragments[0] as HomeFragment).refreshTodayPlayingState() //对比当前音频是否是每日疗愈
        }
    }
@@ -220,20 +229,25 @@
        voice = null
        index = 0
        finishTime = 0L
        thinkBgPlayer?.stopPlayMusic()
        thinkPlayer?.stopPlayMusic()
        thinkBgPlayer?.stopPlayMusic(true)
        thinkPlayer?.stopPlayMusic(true)
        playing = false
        thinkHandler?.removeMessages(0)
        cl_player.gone()
        if (JkApplication.isForeground)
            bgPlayer?.resume()
        (fragments[0] as HomeFragment).refreshTodayPlayingState() //对比当前音频是否是每日疗愈
        if (JkApplication.isForeground){
            if (isBGMChanged) //BGM已经被切换,重新播放新BGM
                startBgm()
            else //BGM未改变,直接续播
                bgPlayer?.resume()
        }
    }
    /**
     * 保存冥想记录
     */
    private fun saveThinkRecord() {
        if (voice == null||startTime == 0L)
        if (voice == null||startTime == 0L||SPUtils.instance().getString(Const.User.TOKEN).isNullOrEmpty())
            return
        val time = ((System.currentTimeMillis() - startTime) / 1000).toInt()
        startTime = 0L
@@ -297,7 +311,7 @@
    }
    override fun onTabSelect(position: Int) {
        if (position !=0 &&position !=3 && SPUtils.instance().getString(Const.User.TOKEN).isNullOrEmpty()){
        if (position == 4 && SPUtils.instance().getString(Const.User.TOKEN).isNullOrEmpty()){
            toast("请先登录")
            startActivity<LoginActivity>()
            tab_bar.currentTab = 0
@@ -306,6 +320,15 @@
        view_pager.currentItem = position
        if (position == 2){
            (fragments[2] as TreeFragment).getTree()
            if (cl_player.visibility == View.VISIBLE){
                cl_player.alpha = 0f
                cl_player.gone()
            }
        }else{
            if (cl_player.alpha == 0f){
                cl_player.visible()
                cl_player.alpha = 1f
            }
        }
        if (position == 4){
            (fragments[4] as MineFragment).queryUnread()
@@ -334,18 +357,19 @@
        }else if (e.code == Const.EventCode.SWITCH_COURSE){
            tab_bar.currentTab = 1
            onTabSelect(1)
        }else if(e.code == Const.EventCode.SWITCH_DISCOVERY){
            tab_bar.currentTab = 2
            onTabSelect(2)
        }else if(e.code == Const.EventCode.CHANGE_EXPLORE){
            tab_bar.currentTab = 3
            onTabSelect(3)
        }else if(e.code == Const.EventCode.APP_FOREGROUND){
            bgPlayer?.resume()
            if (voice==null)
                bgPlayer?.resume()
        }else if(e.code == Const.EventCode.APP_BACKGROUND){
            bgPlayer?.pause()
        }else if(e.code == Const.EventCode.CHANGE_BGM){
            startBgm()
            if (voice == null)
                startBgm()
            else
                isBGMChanged = true //正在播放疗愈,无法立即切换背景音乐
            (fragments[0] as HomeFragment).changeBg()
        }else if(e.code == Const.EventCode.START_THINK){
            startThink()
@@ -364,23 +388,35 @@
            thinkPlayer?.pause()
        }else if(e.code == Const.EventCode.FINISH_GUIDE_AUDIO){
            inGuide = false
            guidePlayer?.stopPlayMusic()
            bgPlayer?.resume()
            guidePlayer?.stopPlayMusic(false)
            if (voice!=null&& playing){
                thinkBgPlayer?.resume()
                thinkPlayer?.resume()
            }
            if (voice == null)
                bgPlayer?.resume()
        }else if(e.code == Const.EventCode.REFRESH_PRIVATE){ //重新答题后,刷新私人定制
            (fragments[0] as HomeFragment).getPrivacy()
        }else if(e.code == Const.EventCode.THINK_TIMER){ //开启倒计时
            thinkHandler?.sendEmptyMessage(1)
            thinkHandler?.sendEmptyMessage(MSG_COUNTDOWN)
        }
    }
    @Subscribe
    fun onIntEvent(e:IntEvent){
        if (e.code == Const.EventCode.THINK_SEEK_PROGRESS){
            thinkBgPlayer?.seekTo(e.i)
            player_play.callOnClick()
        }
    }
    @SuppressLint("HardwareIds")
    private fun checkAnswer() {
        val answer = SPUtils.instance().getString(Const.User.ANSWER)
        if (!answer.isNullOrEmpty()){ //已登录并且有答案
            HttpManager.saveUserAnswers(Gson().fromJson(answer, ReqAnswer::class.java)).request(this,false,success = { _, _->
            val reqAnswer = Gson().fromJson(answer, ReqAnswer::class.java)
            reqAnswer?.device = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID)
            HttpManager.saveUserAnswers(reqAnswer).request(this,false,success = { _, _->
                SPUtils.instance().put(Const.User.ANSWER,"").apply()
                Log.e(Const.Tag,"私人定制已保存")
                (fragments[0] as HomeFragment).getPrivacy()
@@ -407,6 +443,12 @@
        } else if (view_pager.currentItem == 2){
            (fragments[2] as TreeFragment).getTree()
        }
        if (isFirst&&!hasTreeFirstShow&&!SPUtils.instance().getString(Const.User.ANSWER).isNullOrEmpty()){ //如果是第一次安装并且还没显示树苗打卡引导并且答完题了 就去树苗引导
            tab_bar.currentTab = 2
            onTabSelect(2)
            (fragments[2] as TreeFragment).showFirst()
            hasTreeFirstShow = true
        }
    }
    override fun onPause() {
@@ -416,7 +458,7 @@
    override fun onDestroy() {
        super.onDestroy()
        bgPlayer?.stopPlayMusic()
        bgPlayer?.stopPlayMusic(false)
        EventBus.getDefault().unregister(this)
    }