lmw
2024-12-24 bfd1ad288092a4b4a010ea230466f5e86a4e3de4
fix bug
1个文件已添加
23个文件已修改
318 ■■■■ 已修改文件
app/src/main/java/com/sinata/xqmuse/MainActivity.kt 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/dialog/BuyRuleDialog.kt 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/entity/VoiceDetail.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/BuyCourseActivity.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/BuyVoiceActivity.kt 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/HomeAdapter.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/mine/WalletActivity.kt 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/tree/TreeFragment.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/bg_black_alpha50_bottom_10.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_guide.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_guide2.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_qa.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_tag.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_voice_detail.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_wallet.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/dialog_tip_tree.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_tree.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_banner_card.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_course_grid.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_home_list.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_voice_grid.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/MainActivity.kt
@@ -49,7 +49,7 @@
    var teacherVideoView:VideoView? = null
    private var bgPlayer:AudioUtils? = null//背景音乐播放器
    private var thinkBgPlayer:AudioUtils? = null//冥想背景音播放器
    private var thinkPlayer:AudioUtils? = null//冥想背景音播放器
//    private var thinkPlayer:AudioUtils? = null//冥想背景音播放器
    private var guideAudio:String? = null
    private var guidePlayer:AudioUtils? = null//引导音频播放器
@@ -91,13 +91,13 @@
            if (playing){
                player_play.setImageResource(R.mipmap.player_pause)
                thinkBgPlayer?.resume()
                thinkPlayer?.resume()
//                thinkPlayer?.resume()
                thinkHandler?.sendEmptyMessage(MSG_PROGRESS)
                startTime = System.currentTimeMillis()
            }else{
                player_play.setImageResource(R.mipmap.player_start)
                thinkBgPlayer?.pause()
                thinkPlayer?.pause()
//                thinkPlayer?.pause()
                thinkHandler?.removeMessages(MSG_PROGRESS)
                saveThinkRecord()
            }
@@ -184,30 +184,11 @@
        if (voice?.meditationMusicList?.isNullOrEmpty() == false){
            if (thinkBgPlayer == null){
                thinkBgPlayer = AudioUtils()
                thinkPlayer = AudioUtils()
                thinkBgPlayer!!.setOnAudioStatusUpdateListener(this)
                thinkPlayer!!.setOnAudioStatusUpdateListener(object :AudioUtils.OnAudioStatusUpdateListener{
                    override fun onUpdate(db: Double, time: Long) {
                    }
                    override fun onStop(filePath: String?) {
                    }
                    override fun onStartPlay() {
                    }
                    override fun onFinishPlay() {
                        EventBus.getDefault().post(EmptyEvent(Const.EventCode.FINISH_THINK))
                    }
                    override fun onGetDuration(duration: Int) {
                    }
                })
            }
            val volume = SPUtils.instance().getInt(Const.User.VOLUME_THINK,50)
            thinkPlayer?.setVolume(volume.toFloat()/100)
            thinkBgPlayer?.setVolume(volume.toFloat()/100)
            thinkBgPlayer?.startPlayMusic(this, voice?.meditationMusicList?.get(index))
            thinkPlayer?.startPlayMusic(this, voice?.tutorAudioUrl)
            currentDuration = voice?.meditationSecondList?.get(index)?:0
            EventBus.getDefault().post(EmptyEvent(Const.EventCode.GOT_THINK_DURATION))
            playing = true
@@ -230,7 +211,6 @@
        index = 0
        finishTime = 0L
        thinkBgPlayer?.stopPlayMusic(true)
        thinkPlayer?.stopPlayMusic(true)
        playing = false
        thinkHandler?.removeMessages(0)
        cl_player.gone()
@@ -379,19 +359,17 @@
            player_play.callOnClick()
        }else if(e.code == Const.EventCode.CHANGE_THINK_VOLUME){
            val v = SPUtils.instance().getInt(Const.User.VOLUME_THINK,50)
            thinkPlayer?.setVolume(v.toFloat()/100)
            thinkBgPlayer?.setVolume(v.toFloat()/100)
        }else if(e.code == Const.EventCode.START_GUIDE_AUDIO){
            inGuide = true
            startGuide()
            bgPlayer?.pause()
            thinkBgPlayer?.pause()
            thinkPlayer?.pause()
        }else if(e.code == Const.EventCode.FINISH_GUIDE_AUDIO){
            inGuide = false
            guidePlayer?.stopPlayMusic(false)
            if (voice!=null&& playing){
                thinkBgPlayer?.resume()
                thinkPlayer?.resume()
            }
            if (voice == null)
                bgPlayer?.resume()
@@ -480,11 +458,13 @@
        }else{//顺序
            index++
            if (index>=voice?.meditationMusicList?.size?:0)//列表已播完
                index = 0
                EventBus.getDefault().post(EmptyEvent(Const.EventCode.FINISH_THINK))
            else{
            currentDuration = voice?.meditationSecondList?.get(index)?:0
            EventBus.getDefault().post(EmptyEvent(Const.EventCode.GOT_THINK_DURATION))
            if (playing)
                thinkBgPlayer?.startPlayMusic(this, voice?.meditationMusicList?.get(index))
            }
        }
    }
@@ -503,7 +483,7 @@
        var voice: VoiceDetail? = null //冥想详情
        var index = 0 //当前播放序号
        var currentDuration = 0 //当前音频长度(秒)
        var currentPosition = 0 //当前音频进度(秒)
        var currentPosition = 0L //当前音频进度(毫秒)
        var finishTime = 0L //自动结束的时间戳
    }
}
app/src/main/java/com/sinata/xqmuse/dialog/BuyRuleDialog.kt
@@ -29,6 +29,9 @@
        arguments?.getString("title")?:""
    }
    var callback:StringCallback? = null
    private val sHead by lazy {
        "<html><head><meta name=\"viewport\" content=\"width=device-width, " + "initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />" + "<style>img{max-width:100% !important;height:auto !important;}</style>" + "<style>body{max-width:100% !important;}</style>" + "</head><body>"
    }
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
@@ -50,7 +53,13 @@
        settings.defaultTextEncodingName = "utf-8"
        settings.domStorageEnabled = true
        sc_content.webChromeClient = object : WebChromeClient() {}
        sc_content.loadData(rule,"text/html; charset=utf-8", "utf-8")
        sc_content.loadDataWithBaseURL(
            null,
            sHead + rule,
            "text/html",
            "utf-8",
            null
        )
        tv_cancel.setOnClickListener {
            callback?.onResult("refuse")
            dismiss()
app/src/main/java/com/sinata/xqmuse/network/entity/VoiceDetail.kt
@@ -29,7 +29,6 @@
    val sanskrit: Int,
    val isVip: Int,
    val sortNum: Int,
    val tutorAudioUrl: String,
    val virtualLearnedNum: Int
):Parcelable{
    fun goDetail(context: Context){
app/src/main/java/com/sinata/xqmuse/ui/course/BuyCourseActivity.kt
@@ -169,6 +169,13 @@
            val s = "余额抵扣 当前可用 ¥$balance"
            rb_balance.text = SpanBuilder(s).size(4,s.length,11).color(this@BuyCourseActivity,4,s.length,R.color.textColor99).build()
            rb_balance.isChecked = !(balance.isNullOrEmpty()||balance.toDouble() == 0.0)
            if ((data?.generalPrice?:"0.0").toDouble() == 0.0){
                rb_ali.isEnabled = false
                rb_wx.isEnabled = false
                rb_ali.alpha = 0.6f
                rb_wx.alpha = 0.6f
            }
        }
    }
app/src/main/java/com/sinata/xqmuse/ui/home/BuyVoiceActivity.kt
@@ -44,8 +44,7 @@
        tv_action.setOnClickListener {
            if (cb_rule.isChecked){
                if (cb_rule.isChecked){
                    if (rb_balance.isChecked&&((data?.balance?:"0.0").toDouble()>=(data?.generalPrice?:"0.0").toDouble())){//余额勾选,并且可用余额大于课程价格,直接扣余额
                if ((data?.generalPrice?:"0.0").toDouble() == 0.0||rb_balance.isChecked&&((data?.balance?:"0.0").toDouble()>=(data?.generalPrice?:"0.0").toDouble())){//余额勾选,并且可用余额大于课程价格,直接扣余额
                        payBalance()
                    }else if (rb_ali.isChecked){
                        pay(2)
@@ -54,8 +53,6 @@
                    }else{
                        toast("请选择支付方式")
                    }
                }else
                    toast("请阅读并同意《购买协议》")
            }else
                toast("请阅读并同意《购买协议》")
        }
@@ -118,6 +115,12 @@
                val s = "余额抵扣 当前可用 ¥$balance"
                rb_balance.text = SpanBuilder(s).size(4,s.length,11).color(this@BuyVoiceActivity,4,s.length,R.color.textColor99).build()
                rb_balance.isChecked = !(balance.isNullOrEmpty()||balance.toDouble() == 0.0)
                if ((data?.generalPrice?:"0.0").toDouble() == 0.0){
                    rb_ali.isEnabled = false
                    rb_wx.isEnabled = false
                    rb_ali.alpha = 0.6f
                    rb_wx.alpha = 0.6f
                }
            }
        }
    }
app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt
@@ -19,11 +19,13 @@
import com.sinata.xqmuse.ui.home.adapter.HomeBannerAdapter
import com.sinata.xqmuse.ui.home.adapter.TopMenuAdapter
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.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
@@ -106,10 +108,16 @@
                    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))
                        }
                    }){_,_->
                        dismissDialog()
                    }
app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt
@@ -146,7 +146,7 @@
                    iv_play.setImageResource(R.mipmap.player_pause)
                //恢复进度
                tv_progress.text = "%02d:%02d".format(MainActivity.currentPosition/1000/60,MainActivity.currentPosition/1000%60)
                sb_voice.progress = MainActivity.currentPosition/1000
                sb_voice.progress = (MainActivity.currentPosition/1000).toInt()
            }
        }
        EventBus.getDefault().register(this)
@@ -189,7 +189,7 @@
            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
            sb_voice.progress = (MainActivity.currentPosition/1000).toInt()
        }
    }
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/HomeAdapter.kt
@@ -64,7 +64,7 @@
                banner_card.visible()
                val cardBannerAdapter = CardBannerAdapter(data.clientMeditationVOList,context)
                banner_card.adapter = cardBannerAdapter
                banner_card.setBannerGalleryEffect(100,15,0.9f)
                banner_card.setBannerGalleryEffect(110,12,0.92f)
                banner_card.setOnBannerListener { _, position ->
                    callback?.onResult(data.clientMeditationVOList[position].id)
                }
app/src/main/java/com/sinata/xqmuse/ui/mine/WalletActivity.kt
@@ -42,8 +42,6 @@
        }
        tv_withdraw.clickDelay {
            toast("暂未开放")
            return@clickDelay
            startActivity<WithdrawActivity>("balance" to balance)
        }
@@ -58,30 +56,6 @@
        }
    }
    private fun withdraw(){
        WithdrawDialog.show(supportFragmentManager,balance,object :StringCallback{
            override fun onResult(rst: String) {
                HttpManager.withdrawal(rst.toDouble()).request(this@WalletActivity,false, {_,_->
                    startActivity<WithdrawRecordActivity>()
                    myToast("提交成功")
                    getData()
                }){_,msg->
                    if (msg.contains("绑定")){
                        TipDialog.show(supportFragmentManager,"提现失败,请先绑定银行卡。",object : TipDialog.OnClickCallback{
                            override fun onOk() {
                                startActivity<BindCardActivity>()
                            }
                            override fun onCancel() {
                            }
                        },"去绑定")
                    }else
                        myToast(msg)
                }
            }
        })
    }
    private fun initView() {
        EventBus.getDefault().register(this)
app/src/main/java/com/sinata/xqmuse/ui/tree/TreeFragment.kt
@@ -78,7 +78,7 @@
            EventBus.getDefault().post(EmptyEvent(Const.EventCode.SWITCH_HOME))
        }
        iv_water.clickDelay {
//            showWater()
            showWater()
//            tree?.energyValue = 0
//            tree!!.treeLevelType++
//            showTreeAnim(tree!!.getTreeApng(),true)
app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java
@@ -11,7 +11,12 @@
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.sinata.xqmuse.utils.exo.ExoMediaPlayer;
import com.sinata.xqmuse.utils.exo.ExoMediaPlayerFactory;
import java.io.File;
import java.io.IOException;
@@ -32,7 +37,7 @@
    public static final int MAX_LENGTH = 1000 * 600;// 最大录音时长十分钟,实际行程设置为5分钟上传一次
    private OnAudioStatusUpdateListener audioStatusUpdateListener;
    private MediaPlayer mMediaPlayer;
    private SimpleExoPlayer mMediaPlayer;
    private float volume = 0.5f; //播放音量
@@ -231,34 +236,34 @@
        if (mMediaPlayer != null) {
            stopPlayMusic(false);
        }
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setVolume(volume,volume);
        mMediaPlayer = new SimpleExoPlayer.Builder(context).build();
        mMediaPlayer.setVolume(volume);
        isPause = false;
        try {
            Log.e("mmp", "开始播放 path:" + filePath);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
            mMediaPlayer.prepareAsync();
            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            MediaItem mediaItem = MediaItem.fromUri(Uri.parse(filePath));
            mMediaPlayer.setMediaItem(mediaItem);
            mMediaPlayer.prepare();
            mMediaPlayer.play();
            mMediaPlayer.addListener(new Player.Listener(){
                @Override
                public void onPrepared(MediaPlayer mp) {
                    // 装载完毕回调
                    mMediaPlayer.start();
                    if (audioStatusUpdateListener != null){
                        audioStatusUpdateListener.onGetDuration(mMediaPlayer.getDuration());
                        audioStatusUpdateListener.onStartPlay();
                    }
                public void onPlayerError(PlaybackException error) {
                    Log.e("mmp","播放错误:"+error.getMessage());
                }
            });
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
                    if (playbackState == Player.STATE_BUFFERING)
                        Log.e("mmp","缓冲中...STATE_BUFFERING");
                    else if (playbackState == Player.STATE_READY){
                        Log.e("mmp","缓冲完成,音频准备就绪:STATE_READY");
                    } else if (playbackState == Player.STATE_ENDED){
                        Log.e("mmp","播放完成:STATE_ENDED");
                    stopPlayMusic(true);
//                    baseEvent.setMsg(filePath);
//                    EventBus.getDefault().post(baseEvent);
                    } else if (playbackState == Player.STATE_IDLE){
                        Log.e("mmp","播放器空闲:STATE_IDLE");
                    }
                }
            });
        } catch (Exception e) {
@@ -276,34 +281,16 @@
        if (mMediaPlayer != null) {
            stopPlayMusic(false);
        }
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setVolume(volume,volume);
        mMediaPlayer = new SimpleExoPlayer.Builder(context).build();
        mMediaPlayer.setVolume(volume);
        isPause = false;
        try {
            Log.e("mmp", "循环播放 path:" + filePath);
            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
            mMediaPlayer.prepareAsync();
            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    // 装载完毕回调
                    mMediaPlayer.start();
                    if (audioStatusUpdateListener != null)
                        audioStatusUpdateListener.onStartPlay();
                }
            });
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
//                    Log.e("mmp", "播放完成 从新循环 path:" + filePath);
                    mMediaPlayer.start();
                    if (isPause){
//                        Log.e("mmp", "循环播放异步暂停");
                        mMediaPlayer.pause();
                    }
                }
            });
            MediaItem mediaItem = MediaItem.fromUri(Uri.parse(filePath));
            mMediaPlayer.setMediaItem(mediaItem);
            mMediaPlayer.prepare();
            mMediaPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
            mMediaPlayer.play();
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -318,7 +305,7 @@
    public void resume(){
        if (mMediaPlayer != null) {
            mMediaPlayer.start();
            mMediaPlayer.play();
            isPause = false;
        }
    }
@@ -332,11 +319,11 @@
    public void setVolume(float volume){
        this.volume = volume;
        if (mMediaPlayer!=null){
            mMediaPlayer.setVolume(volume,volume);
            mMediaPlayer.setVolume(volume);
        }
    }
    public int getCurrentPosition(){
    public long getCurrentPosition(){
        if (mMediaPlayer!=null){
            return mMediaPlayer.getCurrentPosition();
        }
@@ -369,23 +356,23 @@
     * @param filePath
     * @return
     */
    public int getMusicTime(Context context, String filePath) {
        if (mMediaPlayer != null) {
            stopPlayMusic(false);
        }
        mMediaPlayer = new MediaPlayer();
        try {
            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
            mMediaPlayer.prepare();
            int duration = mMediaPlayer.getDuration();
            if (0 != duration) {
                mMediaPlayer.release();
                return duration / 1000;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }
//    public int getMusicTime(Context context, String filePath) {
//        if (mMediaPlayer != null) {
//            stopPlayMusic(false);
//        }
//        mMediaPlayer = new MediaPlayer();
//        try {
//            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
//            mMediaPlayer.prepare();
//            int duration = mMediaPlayer.getDuration();
//            if (0 != duration) {
//                mMediaPlayer.release();
//                return duration / 1000;
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return 0;
//    }
}
app/src/main/res/drawable/bg_black_alpha50_bottom_10.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp"/>
    <solid android:color="#80000000"/>
</shape>
app/src/main/res/layout/activity_guide.xml
@@ -23,6 +23,7 @@
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:paddingStart="10dp"
        android:fontFamily="@font/fly_flower_song"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:paddingEnd="10dp"/>
@@ -38,6 +39,7 @@
        android:paddingVertical="14dp"
        android:textSize="24sp"
        android:paddingHorizontal="45dp"
        android:fontFamily="@font/fly_flower_song"
        android:textStyle="bold"
        android:background="@drawable/bg_white_line_alpha"
        android:text="个性化定制"/>
@@ -48,6 +50,7 @@
        app:layout_constraintEnd_toEndOf="parent"
        android:textSize="19sp"
        android:textColor="@color/white"
        android:fontFamily="@font/fly_flower_song"
        app:layout_constraintBottom_toTopOf="@id/tv_action"
        android:layout_marginBottom="20dp"
        android:text="愿它成为您心灵栖息的幸福家园"/>
@@ -60,6 +63,7 @@
        android:layout_marginTop="47dp"
        android:textSize="41sp"
        android:text="泉疗愈空间"
        android:fontFamily="@font/fly_flower_song"
        android:textColor="@color/white"
        android:id="@+id/tv_1"/>
    <TextView
@@ -68,6 +72,7 @@
        app:layout_constraintTop_toBottomOf="@id/tv_1"
        android:gravity="center"
        android:lineSpacingExtra="10dp"
        android:fontFamily="@font/fly_flower_song"
        android:text="亲爱的家人,温暖喜悦问候您\n我是心泉老师\n欢迎来到泉疗愈空间\n愿这一方空间为您带来\n放松 平和 宁静 与喜悦"
        android:textColor="@color/white"
        android:layout_marginTop="36dp"
app/src/main/res/layout/activity_guide2.xml
@@ -14,6 +14,7 @@
        android:text="亲爱的家人"
        android:textSize="38sp"
        android:id="@+id/tv_1"
        android:fontFamily="@font/fly_flower_song"
        android:textColor="@color/deepGreen"/>
    <TextView
        android:layout_width="wrap_content"
@@ -24,6 +25,7 @@
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="40dp"
        android:fontFamily="@font/fly_flower_song"
        android:textSize="22sp"
        android:textColor="#404040"
        android:lineSpacingExtra="10dp"
@@ -40,6 +42,7 @@
        android:textStyle="bold"
        android:textSize="20sp"
        android:textColor="#404040"
        android:fontFamily="@font/fly_flower_song"
        android:lineSpacingExtra="10dp"
        android:text="@string/tx_guide"/>
    <TextView
@@ -52,6 +55,7 @@
        android:padding="10dp"
        android:text="跳过"
        android:textStyle="bold"
        android:fontFamily="@font/fly_flower_song"
        android:id="@+id/tv_skip"
        android:textColor="@color/textColor"
        android:textSize="18sp"/>
@@ -64,6 +68,7 @@
        android:textSize="22sp"
        android:textColor="@color/white"
        android:textStyle="bold"
        android:fontFamily="@font/fly_flower_song"
        android:paddingVertical="14dp"
        android:paddingHorizontal="90dp"
        android:background="@drawable/bg_mid_green_30"
app/src/main/res/layout/activity_qa.xml
@@ -15,6 +15,7 @@
        android:textSize="19sp"
        android:text="跳过"
        android:id="@+id/tv_skip"
        android:fontFamily="@font/fly_flower_song"
        android:layout_marginBottom="50dp"/>
    <RadioGroup
        android:id="@+id/rg_qa"
@@ -28,6 +29,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="星/星/知/我/心"
            android:fontFamily="@font/fly_flower_song"
            android:textColor="@color/textColor99"
            android:textSize="16sp"
            android:layout_marginTop="50dp"
@@ -39,6 +41,7 @@
            android:layout_marginTop="12dp"
            android:textSize="24sp"
            android:textColor="@color/deepGreen"
            android:fontFamily="@font/fly_flower_song"
            android:gravity="center"
            android:text="您是否内心纠结敏感多疑"/>
        <RadioButton
@@ -50,6 +53,7 @@
            android:textSize="18sp"
            android:gravity="center"
            android:paddingVertical="14dp"
            android:fontFamily="@font/fly_flower_song"
            android:textColor="@color/selector_green_white"
            android:layout_marginHorizontal="35dp"
            android:layout_marginTop="38dp"
@@ -60,6 +64,7 @@
            android:id="@+id/rb_no"
            android:text="否"
            android:button="@null"
            android:fontFamily="@font/fly_flower_song"
            android:textSize="18sp"
            android:gravity="center"
            android:paddingVertical="14dp"
@@ -72,6 +77,7 @@
            android:layout_height="wrap_content"
            android:id="@+id/rb_maybe"
            android:text="偶尔有"
            android:fontFamily="@font/fly_flower_song"
            android:button="@null"
            android:textSize="18sp"
            android:gravity="center"
@@ -86,6 +92,7 @@
        android:id="@+id/mask"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:fontFamily="@font/fly_flower_song"
        app:layout_constraintTop_toTopOf="@id/rg_qa"
        app:layout_constraintBottom_toBottomOf="@id/rg_qa"
        app:layout_constraintStart_toStartOf="@id/rg_qa"
app/src/main/res/layout/activity_tag.xml
@@ -22,6 +22,7 @@
            android:text="跳过"
            android:textSize="18sp"
            android:textColor="@color/textColor"
            android:fontFamily="@font/fly_flower_song"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginBottom="30dp"
@@ -41,6 +42,7 @@
            android:layout_marginEnd="20dp"
            app:layout_constraintWidth_percent="0.32"
            android:gravity="center"
            android:fontFamily="@font/fly_flower_song"
            android:background="@drawable/bg_deep_green_line_30"
            android:text="上一步"/>
        <TextView
@@ -56,6 +58,7 @@
            android:background="@drawable/bg_mid_green_30"
            android:textColor="@color/white"
            android:paddingVertical="12dp"
            android:fontFamily="@font/fly_flower_song"
            android:textSize="16sp"
            android:layout_marginBottom="20dp"/>
        <LinearLayout
@@ -74,6 +77,7 @@
            android:text="您在这方空间最想\n解决和收获的是哪方面问题"
            android:gravity="center"
            app:layout_constraintStart_toStartOf="parent"
            android:fontFamily="@font/fly_flower_song"
            app:layout_constraintEnd_toEndOf="parent"
            android:textColor="@color/darkGreen"
            app:layout_constraintTop_toTopOf="parent"
app/src/main/res/layout/activity_voice_detail.xml
@@ -135,8 +135,9 @@
        android:textColor="@color/white"
        android:textStyle="bold"
        android:textSize="14sp"
        android:lineSpacingExtra="8dp"
        android:lines="2"
        android:lineSpacingExtra="3dp"
        android:maxLines="3"
        android:ellipsize="end"
        android:text="聆听大自然,感受大自然的美,感受海浪带给我们的宁静。"/>
    <TextView
        android:layout_width="match_parent"
@@ -150,7 +151,7 @@
        android:textColor="@color/white"
        android:textSize="26sp"
        android:textStyle="bold"
        android:layout_marginBottom="20dp"/>
        android:layout_marginBottom="16dp"/>
    <ImageView
        android:id="@+id/iv_play"
        android:layout_width="60dp"
app/src/main/res/layout/activity_wallet.xml
@@ -47,6 +47,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="26dp"
            android:textColor="@color/textColor"
@@ -58,6 +59,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="@id/tv_2"
            app:layout_constraintEnd_toEndOf="@id/tv_2"
            android:textColor="@color/textColor"
            app:layout_constraintTop_toBottomOf="@id/tv_2"
            android:textSize="35sp"
@@ -67,6 +69,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_3"
            android:visibility="gone"
            app:layout_constraintTop_toBottomOf="@id/tv_balance"
            app:layout_constraintStart_toStartOf="@id/tv_balance"
            android:textSize="12sp"
@@ -77,6 +80,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_4"
            android:visibility="gone"
            app:layout_constraintTop_toBottomOf="@id/tv_balance"
            app:layout_constraintStart_toEndOf="@id/tv_3"
            app:layout_constraintEnd_toEndOf="parent"
@@ -89,6 +93,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_recharge_money"
            android:visibility="gone"
            app:layout_constraintTop_toBottomOf="@id/tv_3"
            app:layout_constraintStart_toStartOf="@id/tv_balance"
            android:textSize="20sp"
@@ -100,6 +105,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_income"
            android:visibility="gone"
            app:layout_constraintTop_toBottomOf="@id/tv_3"
            app:layout_constraintStart_toStartOf="@id/tv_4"
            android:textSize="20sp"
@@ -115,7 +121,6 @@
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>
        <TextView
            android:id="@+id/tv_action"
            android:layout_width="0dp"
@@ -123,7 +128,9 @@
            app:layout_constraintStart_toEndOf="@id/center"
            android:layout_height="49dp"
            android:layout_marginStart="6dp"
            android:visibility="invisible"
            android:layout_marginTop="20dp"
            app:layout_goneMarginTop="30dp"
            android:layout_marginEnd="13dp"
            app:layout_constraintBottom_toBottomOf="parent"
            android:text="充值"
@@ -134,11 +141,12 @@
            app:layout_constraintTop_toBottomOf="@id/tv_recharge_money"/>
        <TextView
            android:id="@+id/tv_withdraw"
            android:layout_width="0dp"
            android:layout_width="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toStartOf="@id/center"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_height="49dp"
            android:layout_marginEnd="6dp"
            android:paddingHorizontal="90dp"
            android:textColor="@color/textColor"
            android:gravity="center"
            android:background="@drawable/bg_white_25dp"
app/src/main/res/layout/dialog_tip_tree.xml
@@ -17,7 +17,7 @@
            android:layout_marginTop="24dp"
            android:layout_marginEnd="14dp"
            android:gravity="center"
            android:text="心泉之树"
            android:text="生命之树"
            android:textColor="@color/colorPrimary"
            android:textSize="18sp"
            android:textStyle="bold"
@@ -31,7 +31,7 @@
            android:lineSpacingExtra="10dp"
            android:minHeight="100dp"
            android:gravity="center_vertical"
            android:text="亲爱的家人,感谢您用心的交流。\n现在,您心灵之树的种子已经植入这片沃土,请以农夫的心态用心浇灌,不久的将来,将会长成苍天大树,结出丰硕的果实。加油哦!"
            android:text="亲爱的家人,生命之树的种子已植入这片沃土,请以农夫的心态用心浇灌,为你加油哦。"
            android:textColor="@color/textColor"
            android:textSize="14sp"
            app:layout_constraintTop_toBottomOf="@id/tv_title" />
app/src/main/res/layout/fragment_tree.xml
@@ -50,14 +50,6 @@
                android:id="@+id/iv_sunshine"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/iv_water_anim"
                android:layout_marginTop="110dp"
                android:layout_marginEnd="50dp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>
            <TextView
                android:layout_width="wrap_content"
@@ -164,6 +156,16 @@
                android:paddingBottom="150dp"
                app:layout_constraintBottom_toBottomOf="@id/player"/>
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/iv_water_anim"
                android:layout_marginEnd="30dp"
                app:layout_constraintEnd_toEndOf="parent"
                android:layout_marginBottom="200dp"
                app:layout_constraintBottom_toBottomOf="@id/iv_tree"/>
            <TextView
                android:layout_width="164dp"
                android:layout_height="wrap_content"
app/src/main/res/layout/item_banner_card.xml
@@ -4,17 +4,19 @@
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:id="@+id/iv_bg"
        app:roundedCornerRadius="25dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="148:213"
        app:placeholderImage="@color/page_bg"
        app:actualImageScaleType="centerCrop"/>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_width="0dp"
        app:layout_constraintStart_toStartOf="@id/iv_bg"
        app:layout_constraintEnd_toEndOf="@id/iv_bg"
        android:layout_height="wrap_content"
app/src/main/res/layout/item_course_grid.xml
@@ -23,12 +23,12 @@
        app:layout_constraintEnd_toEndOf="@id/iv_bg"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="@id/iv_bg"
        android:background="@drawable/bg_white_alpha50_bottom_10">
        android:background="@drawable/bg_black_alpha50_bottom_10">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="17dp"
            android:layout_marginTop="15dp"
            android:layout_marginHorizontal="16dp"
            android:text="缓解压力"
            android:textSize="18sp"
@@ -47,7 +47,7 @@
            android:singleLine="true"
            android:ellipsize="end"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginBottom="17dp"
            android:layout_marginBottom="15dp"
            android:text="缓解压力"
            android:textSize="11sp"
            android:textColor="@color/white"
app/src/main/res/layout/item_home_list.xml
@@ -89,7 +89,7 @@
            android:id="@+id/banner_landscape"/>
        <com.youth.banner.Banner
            android:layout_width="match_parent"
            android:layout_height="214dp"
            android:layout_height="224dp"
            android:visibility="gone"
            app:banner_auto_loop="false"
            app:banner_infinite_loop="false"
app/src/main/res/layout/item_voice_grid.xml
@@ -22,7 +22,7 @@
        app:layout_constraintEnd_toEndOf="@id/iv_bg"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="@id/iv_bg"
        android:background="@drawable/bg_white_alpha50_bottom_25">
        android:background="@drawable/bg_black_alpha50_bottom_25">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"