lmw
2024-11-20 ec282d9bf134fbda578ff901e4a620222a851d3f
fix bug
1个文件已删除
3个文件已添加
55个文件已修改
307 ■■■■■ 已修改文件
app/src/main/AndroidManifest.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/MainActivity.kt 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/dialog/CommentDialog.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/Apis.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/HttpManager.kt 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/entity/Msg.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/entity/TreeInfo.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/entity/WaterResult.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/entity/req/ReqAnswer.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/network/entity/req/ReqWxLogin.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/BGMSettingActivity.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/SplashActivity.kt 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/CourseDetailActivity.kt 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/HelpFragment.kt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/MyCourseActivity.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/OfflineCourseActivity.kt 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/StudyActivity.kt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/TeacherFragment.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/adapter/CourseBannerAdapter.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/course/adapter/CourseGridAdapter.kt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/discovery/adapter/MsgAdapter.kt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/guide/QAActivity.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/guide/TagActivity.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/CardBannerAdapter.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/HomeBannerAdapter.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/LandscapeBannerAdapter.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/VoiceGridAdapter.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/login/LoginActivity.kt 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/mine/LevelActivity.kt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/mine/MineFragment.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/mine/RechargeActivity.kt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/mine/ShareActivity.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/mine/VipActivity.kt 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/ui/tree/TreeFragment.kt 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/utils/Const.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/sinata/xqmuse/utils/HtmlUtils.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_bgm.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_course_deatil.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_guide.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_guide2.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_level.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_my_course.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_offline_course.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_qa_detail.xml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_vip.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_voice_detail.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/dialog_comment.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_mine.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_push.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_teacher.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_tree.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_banner_course.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/ic_contact.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/ic_share_black.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/uncollect_b.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/raw/bg_movie.mov 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/raw/bg_movie.mp4 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml
@@ -57,8 +57,8 @@
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:scheme="jkfitness"
                    android:host="jkcyl.cn" />
                    android:scheme="xqmuse"
                    android:host="xqmuse.cn" />
            </intent-filter>
        </activity>
        <activity
@@ -142,7 +142,7 @@
        <activity android:name=".ui.tree.ExchangeRecordActivity" android:label="兑换记录"/>
        <activity android:name=".ui.course.PaySuccessActivity" android:label="支付结果"/>
        <activity android:name=".ui.course.HelpCenterActivity" />
        <activity android:name=".ui.course.CourseSearchResultActivity" android:label="心泉·疗愈"/>
        <activity android:name=".ui.course.CourseSearchResultActivity" android:label="泉疗愈"/>
        <activity android:name=".ui.course.StudyActivity" android:configChanges="orientation|screenSize|keyboardHidden"/>
        <activity android:name=".ui.home.BuyVoiceActivity" android:label="确认订单"/>
app/src/main/java/com/sinata/xqmuse/MainActivity.kt
@@ -1,9 +1,11 @@
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
@@ -245,7 +247,7 @@
     * 保存冥想记录
     */
    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
@@ -395,7 +397,7 @@
        }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)
        }
    }
@@ -407,10 +409,13 @@
        }
    }
    @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()
app/src/main/java/com/sinata/xqmuse/dialog/CommentDialog.kt
@@ -81,7 +81,7 @@
    private fun getData(){
        HttpManager.getMeditationQuestionPage(voiceId,page).request(requireActivity() as BaseActivity,success = { _, data->
            tv_title.text = "${data?.total}条提问"
            tv_count.text = "${data?.total}条提问"
            if (page == 1)
                list.clear()
            list.addAll(data?.list?: arrayListOf())
app/src/main/java/com/sinata/xqmuse/network/Apis.kt
@@ -3,8 +3,8 @@
object Apis {
    private var isTest = true
    private const val TEST_URL = "http://192.168.110.64:9000/" //内网
//    private const val TEST_URL = "https://xq.xqzhihui.com/api/" //外网
//    private const val TEST_URL = "http://192.168.110.64:9000/" //内网
    private const val TEST_URL = "https://xq.xqzhihui.com/api/" //外网
    private const val LINE_URL = "https://jkcyl.cn/app/" //正式服
    val BASE_URL = if (isTest) TEST_URL else LINE_URL
app/src/main/java/com/sinata/xqmuse/network/HttpManager.kt
@@ -320,15 +320,15 @@
    /**
     * 验证码登录
     */
    fun captchaLogin(code: String, phone: String): Flowable<ResultData<LoginBean>> {
        return request().captchaLogin("{\"cellPhone\":\"${phone}\",\"captcha\":\"${code}\"}")
    fun captchaLogin(device: String, code: String, phone: String): Flowable<ResultData<LoginBean>> {
        return request().captchaLogin("{\"device\":\"${device}\",\"cellPhone\":\"${phone}\",\"captcha\":\"${code}\"}")
    }
    /**
     * wx登录
     */
    fun wxLogin(openid: String?, name: String?,sex: Int?,avatar: String?): Flowable<ResultData<WxLoginBean>> {
        return request().wxLogin(Gson().toJson(ReqWxLogin(avatar,name,sex,openid)))
    fun wxLogin(device: String, openid: String?, name: String?,sex: Int?,avatar: String?): Flowable<ResultData<WxLoginBean>> {
        return request().wxLogin(Gson().toJson(ReqWxLogin(device,avatar,name,sex,openid)))
    }
    /**
app/src/main/java/com/sinata/xqmuse/network/entity/Msg.kt
@@ -16,7 +16,7 @@
    val meditationQuestionId: String,
    val noticeType: Int,
    var readStatus: Int,
    val time: String,
    val createTime: String,
    val title: String
)
app/src/main/java/com/sinata/xqmuse/network/entity/TreeInfo.kt
@@ -11,7 +11,7 @@
    val isSign: Int,
    val nextLevel: Int,
    val sowAgain: Int,
    val status: Int,
    var status: Int,
    val taskOne: Int,
    val taskTwo: Int,
    var treeLevelType: Int
app/src/main/java/com/sinata/xqmuse/network/entity/WaterResult.kt
@@ -2,7 +2,9 @@
data class WaterResult(
    val growthValue: Int,
    val treeLevelType: Int,
    val isNext: Boolean,
    val nextLevel: Int,
    val energyValue: Int,
    val status: Int
)
app/src/main/java/com/sinata/xqmuse/network/entity/req/ReqAnswer.kt
@@ -5,6 +5,7 @@
@Parcelize
data class ReqAnswer(
    var device: String,
    var tagIds: String,
    val userAnswerOneDTOList: ArrayList<UserAnswerOneDTO>
):Parcelable
app/src/main/java/com/sinata/xqmuse/network/entity/req/ReqWxLogin.kt
@@ -1,6 +1,7 @@
package com.sinata.xqmuse.network.entity.req
data class ReqWxLogin(
    val device: String?,
    val headImgUrl: String?,
    val nickname: String?,
    val sex: Int?,
app/src/main/java/com/sinata/xqmuse/ui/BGMSettingActivity.kt
@@ -83,6 +83,8 @@
            val indexOf = list.map { it.audioFile }.indexOf(bgm)
            if (indexOf>=0){
                banner_landscape.currentItem = indexOf
            }else if (list.size>2){
                banner_landscape.currentItem = 1
            }
            cardBannerAdapter.notifyDataSetChanged()
        }
app/src/main/java/com/sinata/xqmuse/ui/SplashActivity.kt
@@ -48,15 +48,15 @@
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
        getImg()
//        val data = intent.data
//        if (data!=null){
//            val url = data.toString()
//            Log.e("mmp","路径:${url}")
//            if (url.startsWith("jkfitness://jkcyl.cn?code=")){
        val data = intent.data
        if (data!=null){
            val url = data.toString()
            Log.e("mmp","路径:${url}")
//            if (url.startsWith("xqmuse://xqmuse.cn?mid=")){ //何健豪:不做跳转详情
//                code = url.substring(url.indexOf("=")+1)
//                Log.e("mmp","解析参数:code=${code}")
//                Log.e("mmp","解析参数:音频id=${code}")
//            }
//        }
        }
        AMapLocationClient.updatePrivacyShow(this,true,true)
        AMapLocationClient.updatePrivacyAgree(this,true)
        AMapUtilCoreApi.setCollectInfoEnable(false)
app/src/main/java/com/sinata/xqmuse/ui/course/CourseDetailActivity.kt
@@ -28,6 +28,7 @@
import com.sinata.xqmuse.ui.course.adapter.ChapterAdapter
import com.sinata.xqmuse.ui.course.adapter.CourseGridAdapter
import com.sinata.xqmuse.utils.AppBarStateChangeListener
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.interfaces.StringCallback
import com.umeng.socialize.bean.SHARE_MEDIA
import kotlinx.android.synthetic.main.activity_course_deatil.*
@@ -79,11 +80,11 @@
                override fun onResult(rst: String) {
                    if (rst == "wx"){
                        ShareUtils.share(this@CourseDetailActivity,
                            SHARE_MEDIA.WEIXIN,data?.courseTitle,"分享你一个课程",
                            SHARE_MEDIA.WEIXIN,data?.courseTitle, Const.SHARE.SHARE_COURSE_TITLE,
                            Apis.SHARE_COURSE.format(data?.id),null,"")
                    }else{
                        ShareUtils.share(this@CourseDetailActivity,
                            SHARE_MEDIA.WEIXIN_CIRCLE,data?.courseTitle,"分享你一个课程",
                            SHARE_MEDIA.WEIXIN_CIRCLE,data?.courseTitle,Const.SHARE.SHARE_COURSE_TITLE,
                            Apis.SHARE_COURSE.format(data?.id),null,"")
                    }
                }
@@ -154,11 +155,17 @@
                    State.EXPANDED -> {
                        //展开状态
                        iv_back.imageResource = R.mipmap.icon_back_white
                        iv_share.imageResource = R.mipmap.ic_share
                        if (data?.isCollect!=1)
                            iv_collect.imageResource = R.mipmap.uncollect
                        tvTitle.textColorResource = R.color.white
                    }
                    State.COLLAPSED -> {
                        //折叠状态
                        iv_back.imageResource = R.mipmap.back
                        iv_share.imageResource = R.mipmap.ic_share_black
                        if (data?.isCollect!=1)
                            iv_collect.imageResource = R.mipmap.uncollect_b
                        tvTitle.textColorResource = R.color.textColor
                    }
                }
app/src/main/java/com/sinata/xqmuse/ui/course/HelpFragment.kt
@@ -16,15 +16,15 @@
    override fun onFirstVisibleToUser() {
        when(type){
            TYPE_ACCOUNT->{
                tv_msg.text = "如你当前登录心泉·疗愈的手机号码不是购买课程时填写的手机号码,请点击下方按钮,使用购买课程的手机号码登录即可。"
                tv_msg.text = "如你当前登录泉疗愈的手机号码不是购买课程时填写的手机号码,请点击下方按钮,使用购买课程的手机号码登录即可。"
                tv_action.text = "换个手机号登录"
            }
            TYPE_PHONE->{
                tv_msg.text = "如你希望变更心泉·疗愈的手机号码,请点击下方按钮,根据页面提示录入新的手机号码"
                tv_msg.text = "如你希望变更泉疗愈的手机号码,请点击下方按钮,根据页面提示录入新的手机号码"
                tv_action.text = "前往改绑手机号"
            }
            TYPE_WX->{
                tv_msg.text = "如你希望变更心泉·疗愈的微信号,请点击下方按钮,根据页面提示授权登录其他微信号"
                tv_msg.text = "如你希望变更泉疗愈的微信号,请点击下方按钮,根据页面提示授权登录其他微信号"
                tv_action.text = "前往改绑微信号"
            }
        }
app/src/main/java/com/sinata/xqmuse/ui/course/MyCourseActivity.kt
@@ -56,6 +56,7 @@
        rv_free.adapter = freeAdapter
        rv_my.layoutManager = GridLayoutManager(this,2)
        rv_my.adapter = myAdapter
        myAdapter.isOrder = true
        refreshLayout.setOnRefreshListener {
            getData()
@@ -81,6 +82,11 @@
                tv_empty.gone()
                tv_action.gone()
            }
            if (freeList.isNullOrEmpty()){
                tv_empty2.visible()
            }else{
                tv_empty2.gone()
            }
        }){_,_->
            refreshLayout.finishRefresh(false)
        }
app/src/main/java/com/sinata/xqmuse/ui/course/OfflineCourseActivity.kt
@@ -16,10 +16,13 @@
import com.sinata.xqmuse.network.entity.CourseDetail
import com.sinata.xqmuse.network.request
import com.sinata.xqmuse.ui.TransparentStatusBarActivity
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.glide.GlideUtil
import com.sinata.xqmuse.utils.interfaces.StringCallback
import com.umeng.socialize.bean.SHARE_MEDIA
import kotlinx.android.synthetic.main.activity_offline_course.*
import org.jetbrains.anko.backgroundColor
import org.jetbrains.anko.backgroundResource
import xyz.doikki.videocontroller.StandardVideoController
import xyz.doikki.videoplayer.player.BaseVideoView.*
@@ -37,11 +40,11 @@
                override fun onResult(rst: String) {
                    if (rst == "wx"){
                        ShareUtils.share(this@OfflineCourseActivity,
                            SHARE_MEDIA.WEIXIN,data?.courseTitle,"分享你一个课程",
                            SHARE_MEDIA.WEIXIN,data?.courseTitle, Const.SHARE.SHARE_COURSE_TITLE,
                            Apis.SHARE_OFFLINE.format(data?.id),null,"")
                    }else{
                        ShareUtils.share(this@OfflineCourseActivity,
                            SHARE_MEDIA.WEIXIN_CIRCLE,data?.courseTitle,"分享你一个课程",
                            SHARE_MEDIA.WEIXIN_CIRCLE,data?.courseTitle,Const.SHARE.SHARE_COURSE_TITLE,
                            Apis.SHARE_OFFLINE.format(data?.id),null,"")
                    }
                }
@@ -77,6 +80,8 @@
        settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
        webView.webChromeClient = object : WebChromeClient() {}
        webView.webViewClient = object : WebViewClient() {}
        webView.backgroundColor = 0
        webView.background.alpha = 0
        data?.apply {
            iv_collect.setImageResource(if (data?.isCollect == 1) R.mipmap.collected else R.mipmap.uncollect)
            if ((detailUrl?:"").isVideo()){
@@ -85,7 +90,7 @@
                controller.addDefaultControlComponent(courseTitle, false)
                mVideoView.setVideoController(controller) //设置控制器
                mVideoView.setUrl(detailUrl) //设置视频地址
                GlideUtil.load(this@OfflineCourseActivity, detailUrl, iv_cover, 0)
                GlideUtil.load(this@OfflineCourseActivity, coverUrl, iv_cover, 0)
            }else{
                cl_title.gone()
                iv_cover.gone()
app/src/main/java/com/sinata/xqmuse/ui/course/StudyActivity.kt
@@ -94,14 +94,16 @@
            BaseVideoView.STATE_PLAYBACK_COMPLETED ->{
                chapters[adapter.current].isOver = 1
                saveProgress(1,0)
                if (adapter.current == chapters.lastIndex){
                    iv_cover.visible()
                    ivPlay.visible()
                }else{
                    adapter.current++
//                if (adapter.current == chapters.lastIndex){ //测试外包:不自动播放下一章节
//                    iv_cover.visible()
//                    ivPlay.visible()
//                }else{
//                    adapter.current++
//                    startPlay()
//                }
                    adapter.notifyDataSetChanged()
                    startPlay()
                }
            }
        }
app/src/main/java/com/sinata/xqmuse/ui/course/TeacherFragment.kt
@@ -18,6 +18,7 @@
import kotlinx.android.synthetic.main.fragment_teacher.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.jetbrains.anko.backgroundColor
import xyz.doikki.videocontroller.StandardVideoController
class TeacherFragment : BaseFragment() {
@@ -43,6 +44,8 @@
        settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
        webView.webChromeClient = object : WebChromeClient() {}
        webView.webViewClient = object : WebViewClient() {}
        webView.backgroundColor = 0
        webView.background.alpha = 0
        rv_course.layoutManager = GridLayoutManager(requireContext(),2)
        rv_course.adapter = adapter
        getData()
app/src/main/java/com/sinata/xqmuse/ui/course/adapter/CourseBannerAdapter.kt
@@ -6,6 +6,7 @@
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
import com.facebook.drawee.view.SimpleDraweeView
import com.sinata.xqmuse.R
import com.sinata.xqmuse.network.entity.Banner
import com.sinata.xqmuse.utils.glide.GlideUtil
@@ -25,12 +26,13 @@
        size: Int
    ) {
        val bannerViewHolder = holder as BannerViewHolder
        GlideUtil.load(context,data?.url,bannerViewHolder.img,0)
        bannerViewHolder.img.setImageURI(data?.url)
//        GlideUtil.load(context,data?.url,bannerViewHolder.img,0)
        bannerViewHolder.bg.visibility = View.GONE
    }
    inner class BannerViewHolder(v:View) :RecyclerView.ViewHolder(v){
        var img:ImageView = v.findViewById(R.id.iv_img) as ImageView
        var img:SimpleDraweeView = v.findViewById(R.id.iv_img) as SimpleDraweeView
        var bg:View = v.findViewById(R.id.bg) as View
    }
}
app/src/main/java/com/sinata/xqmuse/ui/course/adapter/CourseGridAdapter.kt
@@ -10,6 +10,7 @@
import com.facebook.drawee.view.SimpleDraweeView
import com.sinata.xqmuse.R
import com.sinata.xqmuse.network.entity.CourseBean
import com.sinata.xqmuse.utils.HtmlUtils
import java.util.ArrayList
class CourseGridAdapter(list: ArrayList<CourseBean>,val isVoice:Boolean = false):HFRecyclerAdapter<CourseBean>(list, R.layout.item_course_grid) {
@@ -17,7 +18,7 @@
    override fun onBind(holder: ViewHolder, position: Int, data: CourseBean) {
        holder.bind<SimpleDraweeView>(R.id.iv_bg).setImageURI(if (data.coverUrl.contains(",")) data.coverUrl.split(",").getOrNull(1) else data.coverUrl)
        holder.setText(R.id.tv_title,if (isVoice) data.meditationTitle else data.courseTitle)
        holder.setText(R.id.tv_subtitle,if (isVoice) data.coverDescription else data.description)
        holder.setText(R.id.tv_subtitle,if (isVoice) data.coverDescription else if (!data.description.isNullOrEmpty()) data.description else HtmlUtils.getTextFromHtml(data.briefIntroduction))
        holder.setText(R.id.tv_count,(if (isVoice) data.realLearnedNum else data.count).toString())
        val iv_vip = holder.bind<View>(R.id.iv_vip)
app/src/main/java/com/sinata/xqmuse/ui/discovery/adapter/MsgAdapter.kt
@@ -5,6 +5,7 @@
import android.widget.TextView
import cn.sinata.xldutils.adapter.HFRecyclerAdapter
import cn.sinata.xldutils.adapter.util.ViewHolder
import cn.sinata.xldutils.utils.ellipsize
import com.facebook.drawee.view.SimpleDraweeView
import com.sinata.xqmuse.R
import com.sinata.xqmuse.network.entity.Msg
@@ -15,10 +16,9 @@
        val iv = holder.bind<ImageView>(R.id.iv)
        iv.setImageResource(if (data.noticeType == 2) R.mipmap.ic_msg1 else R.mipmap.ic_notice)
//        holder.setText(R.id.tv_type,if (data.noticeType == 2) "回复消息" else "系统消息")
        holder.setText(R.id.tv_type,data.title)
        holder.setText(R.id.tv_type,data.title.ellipsize(8))
        holder.bind<View>(R.id.iv_unread).visibility = if (data.readStatus == 1) View.VISIBLE else View.GONE
        holder.setText(R.id.tv_time,data.time)
        holder.setText(R.id.tv_time,data.createTime)
        holder.setText(R.id.tv_content,data.content)
    }
}
app/src/main/java/com/sinata/xqmuse/ui/guide/QAActivity.kt
@@ -20,7 +20,7 @@
    override fun setContentView() = R.layout.activity_qa
    private val questions = arrayListOf("您是否内心纠结敏感多疑?","您是否辗转反侧彻夜难眠?","您是否情绪失控暴躁易怒?","您是否沉迷情感倍受伤害?","您是否人生迷茫踌躇彷徨?")
    private var answer: ReqAnswer = ReqAnswer("", arrayListOf())
    private var answer: ReqAnswer = ReqAnswer("","", arrayListOf())
    private var index = 0
    override fun initClick() {
app/src/main/java/com/sinata/xqmuse/ui/guide/TagActivity.kt
@@ -1,5 +1,7 @@
package com.sinata.xqmuse.ui.guide
import android.annotation.SuppressLint
import android.provider.Settings
import android.util.Log
import android.widget.LinearLayout
import androidx.core.view.children
@@ -27,6 +29,7 @@
    private val answer by lazy { intent.getParcelableExtra<ReqAnswer>("answer") }
    private val tags by lazy { intent.getParcelableArrayListExtra<TagBean>("tags") }
    @SuppressLint("HardwareIds")
    override fun initClick() {
        tv_skip.setOnClickListener {
            onBackPressed()
@@ -48,6 +51,7 @@
                    startActivity<MainActivity>()
                }else{
                    tv_action.isEnabled = false
                    answer?.device = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID)
                    HttpManager.saveUserAnswers(answer!!).request(this,success = {_,_->
                        toast("保存成功")
                        startActivity<MainActivity>()
app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt
@@ -162,7 +162,7 @@
                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}人已参加学习"
                tv_today_count.text = "${(today?.clientMeditationVO?.realLearnedNum?:0)+(today?.clientMeditationVO?.virtualLearnedNum?:0)}人已参加学习"
            }
        }
    }
@@ -172,7 +172,6 @@
            iv_play_today.setImageResource(R.mipmap.player_pause)
        else
            iv_play_today.setImageResource(R.mipmap.play)
    }
    fun getPrivacy() {
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/CardBannerAdapter.kt
@@ -35,7 +35,7 @@
        bannerViewHolder.iv_bg.setImageURI(data?.coverUrl?.split(",")?.get(1))
        bannerViewHolder.tv_title.text = data?.meditationTitle
        bannerViewHolder.tv_subtitle.text = data?.coverDescription?.ellipsize(6)
        bannerViewHolder.tv_count.text = (data?.realLearnedNum?:0).toString()
        bannerViewHolder.tv_count.text = ((data?.realLearnedNum?:0)+(data?.virtualLearnedNum?:0)).toString()
        when(data?.chargeType){ //1=免费 2=会员免费 3=单独收费
            2->{
                bannerViewHolder.iv_vip.visible()
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/HomeBannerAdapter.kt
@@ -34,9 +34,6 @@
            bannerViewHolder.iv_bg.setImageURI(coverUrl)
        bannerViewHolder.tv_name.text = data?.meditationTitle
        bannerViewHolder.tv_subtitle.text = data?.coverDescription
        bannerViewHolder.iv_play.setOnClickListener {
            context.toast("播放")
        }
    }
    inner class BannerViewHolder(v:View) :RecyclerView.ViewHolder(v){
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/LandscapeBannerAdapter.kt
@@ -34,7 +34,7 @@
        bannerViewHolder.iv_bg.setImageURI(data?.coverUrl?.split(",")?.get(0))
        bannerViewHolder.tv_title.text = data?.meditationTitle
        bannerViewHolder.tv_subtitle.text = data?.coverDescription?.ellipsize(18)
        bannerViewHolder.tv_count.text = (data?.realLearnedNum?:0).toString()
        bannerViewHolder.tv_count.text = ((data?.realLearnedNum?:0)+(data?.virtualLearnedNum?:0)).toString()
        when(data?.chargeType){ //1=免费 2=会员免费 3=单独收费
            2->{
                bannerViewHolder.iv_vip.visible()
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/VoiceGridAdapter.kt
@@ -17,7 +17,7 @@
        holder.bind<SimpleDraweeView>(R.id.iv_bg).setImageURI(data.coverUrl?.split(",")?.elementAtOrNull(1))
        holder.setText(R.id.tv_title,data?.meditationTitle)
        holder.setText(R.id.tv_subtitle,data?.coverDescription)
        holder.setText(R.id.tv_count,(data?.realLearnedNum?:0).toString())
        holder.setText(R.id.tv_count,(data.realLearnedNum+data.virtualLearnedNum).toString())
        val iv_vip = holder.bind<View>(R.id.iv_vip)
        val tv_price = holder.bind<TextView>(R.id.tv_price)
app/src/main/java/com/sinata/xqmuse/ui/login/LoginActivity.kt
@@ -52,6 +52,10 @@
    private var user = ""
    private var privacy = ""
    private val device by lazy {
        Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID)
    }
    @SuppressLint("CheckResult")
    override fun initClick() {
        cb_pwd.setOnClickListener {
@@ -219,7 +223,7 @@
        }
        tv_action.isEnabled = false
        HttpManager.captchaLogin(code, et_phone.text.toString())
        HttpManager.captchaLogin(device,code, et_phone.text.toString())
            .request(this, success = { _, data ->
                data?.let {
                    loginSuccess(it.accessToken)
@@ -259,7 +263,7 @@
        val avatar = p2?.get("profile_image_url")
        val gender = p2?.get("gender")
        val nickname = p2?.get("name")
        HttpManager.wxLogin(openid, nickname,if (gender == "0") 1 else 2,avatar).request(this,false,{ _, data ->
        HttpManager.wxLogin(device,openid, nickname,if (gender == "0") 1 else 2,avatar).request(this,false,{ _, data ->
            data?.let {
                if (it.bindStatus ==1){
                    startActivityForResult<BindPhoneActivity>(200,"token" to it.accessToken,"openid" to openid)
app/src/main/java/com/sinata/xqmuse/ui/mine/LevelActivity.kt
@@ -57,7 +57,8 @@
                "utf-8",
                null
            )
            mProgressBar.progress = (data?.growthValue?:0)*100/(data?.nextLevel?:100)
            mProgressBar.max = data?.nextLevel?:100
            mProgressBar.progress = data?.growthValue?:0
        }
    }
}
app/src/main/java/com/sinata/xqmuse/ui/mine/MineFragment.kt
@@ -49,7 +49,7 @@
            startActivity<WatchHisActivity>("type" to WatchHisActivity.HAS_BUY)
        }
        bg_vip.setOnClickListener {
            startActivityForResult<VipActivity>(1)
            startActivity<VipActivity>()
        }
        tv_service.setOnClickListener {
            startActivity<ServiceActivity>()
@@ -93,6 +93,8 @@
    fun refreshInfo(e: EmptyEvent){
        if (e.code == Const.EventCode.CHANGE_USER){
            showUserInfo()
        } else if (e.code == Const.EventCode.USER_INFO_CHANGED){
            showUserInfo()
        }
    }
@@ -110,7 +112,7 @@
                        "你还未开通会员服务"
                    } else{
                        bg_vip.backgroundResource = R.mipmap.bg_vip
                        tv_describe.text = "您将享受所有会员专享音频,尽情畅游心泉·疗愈世界"
                        tv_describe.text = "您将享受所有会员专享音频,尽情畅游泉疗愈世界"
                        "${vipExpireTime?.substring(0,10)}到期"
                    }
                    iv_vip.setImageURI(data.levelIcon)
app/src/main/java/com/sinata/xqmuse/ui/mine/RechargeActivity.kt
@@ -85,8 +85,9 @@
                }else{
                    PayUtil.aliPay(this,data?.orderInfo?:"")
                }
                onPaySuccess() //todo test
            }
        onPaySuccess()
    }
    override fun onPaySuccess() {
app/src/main/java/com/sinata/xqmuse/ui/mine/ShareActivity.kt
@@ -66,9 +66,9 @@
            shareDialog.callback = object :StringCallback{
                override fun onResult(rst: String) {
                    if (rst == "wx"){
                        ShareUtils.share(this@ShareActivity,SHARE_MEDIA.WEIXIN,"分享内容","分享标题",Apis.SHARE_APP.format(userId),null,"")
                        ShareUtils.share(this@ShareActivity,SHARE_MEDIA.WEIXIN,Const.SHARE.SHARE_CONTENT,Const.SHARE.SHARE_TITLE,Apis.SHARE_APP.format(userId),null,"")
                    }else if (rst == "circle"){
                        ShareUtils.share(this@ShareActivity,SHARE_MEDIA.WEIXIN_CIRCLE,"分享内容","分享标题",Apis.SHARE_APP.format(userId),null,"")
                        ShareUtils.share(this@ShareActivity,SHARE_MEDIA.WEIXIN_CIRCLE,Const.SHARE.SHARE_CONTENT,Const.SHARE.SHARE_TITLE,Apis.SHARE_APP.format(userId),null,"")
                    }else{
                        RxPermissions(this@ShareActivity).request(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe {
                            if (it)
app/src/main/java/com/sinata/xqmuse/ui/mine/VipActivity.kt
@@ -15,10 +15,12 @@
import com.sinata.xqmuse.ui.TransparentStatusBarActivity
import com.sinata.xqmuse.ui.mine.adapter.VipPriceAdapter
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.interfaces.StringCallback
import com.sinata.xqmuse.utils.pay.PayListener
import com.sinata.xqmuse.utils.pay.PayUtil
import kotlinx.android.synthetic.main.activity_vip.*
import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.backgroundResource
import org.jetbrains.anko.toast
@@ -58,6 +60,10 @@
                                    PayUtil.weChatPay(data!!)
                                }else{
                                    PayUtil.aliPay(this@VipActivity,data?.orderInfo?:"")
                                    tv_action.postDelayed({ //TEST CALLBACK
                                        onPaySuccess()
                                    },3000)
                                }
                            }
                    }
@@ -98,7 +104,7 @@
                    "你还未开通会员服务"
                } else{
                    bg_vip.backgroundResource = R.mipmap.bg_vip
                    tv_describe.text = "您将享受所有会员专享音频,尽情畅游心泉·疗愈世界"
                    tv_describe.text = "您将享受所有会员专享音频,尽情畅游泉疗愈世界"
                    "${vipExpireTime?.substring(0,10)}到期"
                }
            }
@@ -139,6 +145,7 @@
    override fun onPaySuccess() {
        showVipInfo()
        EventBus.getDefault().post(EmptyEvent(Const.EventCode.USER_INFO_CHANGED))
    }
    override fun onPayCancel() {
app/src/main/java/com/sinata/xqmuse/ui/tree/TreeFragment.kt
@@ -49,9 +49,9 @@
        Log.e("虚拟导航栏高度", "$virtualBarHeigh")
        val navigationBarHeight = getNavigationBarHeight()
        Log.e("导航栏高度", "$navigationBarHeight")
        if (virtualBarHeigh >= getNavigationBarHeight()) //如果虚拟导航栏高度大于或等于导航栏高度,说明虚拟导航栏在显示,需要减去导航栏的高度
            behavior.setPeekHeight(dip(63) - getNavigationBarHeight(), true)
        else
//        if (virtualBarHeigh >= getNavigationBarHeight()) //如果虚拟导航栏高度大于或等于导航栏高度,说明虚拟导航栏在显示,需要减去导航栏的高度
//            behavior.setPeekHeight(dip(63) + getNavigationBarHeight(), true)
//        else
            behavior.setPeekHeight(dip(63), true)
        tv_rule.setOnClickListener {
            HttpManager.getH5(6).requestByF(this){ _, data->
@@ -94,19 +94,23 @@
            else
                HttpManager.watering().requestByF(this){_,data->
                    data?.apply {
                        EventBus.getDefault().post(EmptyEvent(Const.EventCode.USER_INFO_CHANGED)) //刷新成长值
                        tv_max.text = "/$nextLevel"
                        tv_growth.text = growthValue.toString()
                        val targetHeight = growthValue.toDouble()/nextLevel*dip(155)
                        val layoutParams = progress.layoutParams
                        showGrowthAnim(layoutParams.height, max(1,targetHeight.toInt()))
                        showWater()
                        tree?.energyValue = 0
                        tree?.energyValue = energyValue
                        tv_power.text = "当前能量值:${(tree?.energyValue?:0)}"
                        if (isNext){
                            tree!!.treeLevelType++
                        if (tree!!.treeLevelType != data.treeLevelType){
                            tree!!.treeLevelType = data.treeLevelType
                            showTreeAnim(tree!!.getTreeApng(),true)
                            audioPlayer.startPlayMusic(requireContext(),tree!!.getLevelUpAudio())
                            TreeTipDialog.show(childFragmentManager,"升级","恭喜!你的树苗已升级为${tree!!.getLevelName()}阶段!")
                        }else if (tree!!.status != 2){
                            tree!!.status = 2
                            showTreeAnim(tree!!.getTreeApng(),tree!!.treeLevelType != 1)
                        }
                    }
                }
app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java
@@ -285,10 +285,10 @@
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    Log.e("mmp", "播放完成 从新循环 path:" + filePath);
//                    Log.e("mmp", "播放完成 从新循环 path:" + filePath);
                    mMediaPlayer.start();
                    if (isPause){
                        Log.e("mmp", "循环播放异步暂停");
//                        Log.e("mmp", "循环播放异步暂停");
                        mMediaPlayer.pause();
                    }
                }
app/src/main/java/com/sinata/xqmuse/utils/Const.kt
@@ -20,6 +20,12 @@
    val OSS_DOMAIN = "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/"
    object SHARE{
        const val SHARE_TITLE = "分享疗愈时光,让宁静触手可及"
        const val SHARE_CONTENT = "这份疗愈之旅,带来了意想不到的平静和安宁。愿与你一同分享,让我们在繁忙的生活中找到片刻的温柔,静享属于我们的宁静时光。"
        const val SHARE_COURSE_TITLE = "传递心灵温暖,一起感受疗愈力量"
    }
    object TREE {
        val first = OSS_DOMAIN+"xinquan/1d3254a9966b476789491032d8bb908a.wav"
        val LEVEL_2 = OSS_DOMAIN+"xinquan/d8daa4d5490f40f9a68a8469ad697660.wav"
app/src/main/java/com/sinata/xqmuse/utils/HtmlUtils.java
@@ -58,6 +58,8 @@
    }
    public static String getTextFromHtml(String htmlStr) {
        if (htmlStr == null||htmlStr.isEmpty())
            return "";
        htmlStr = delHTMLTag(htmlStr);
        htmlStr = htmlStr.replaceAll(" ", "");
//        if (htmlStr.length() > 50) {
app/src/main/res/layout/activity_bgm.xml
@@ -16,7 +16,7 @@
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:text="心泉·疗愈"
        android:text="泉疗愈"
        android:textSize="18sp"
        android:textStyle="bold"
        android:textColor="@color/textColor"
app/src/main/res/layout/activity_course_deatil.xml
@@ -90,6 +90,8 @@
                    android:layout_marginTop="25dp"
                    android:textColor="@color/textColor"
                    tools:text="心里咨询课程"
                    android:singleLine="true"
                    android:ellipsize="end"
                    android:textStyle="bold"
                    android:layout_marginStart="20sp"
                    android:layout_marginEnd="10dp"
app/src/main/res/layout/activity_guide.xml
@@ -8,7 +8,7 @@
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:screenScaleType="type_center_crop"
        app:playerBackgroundColor="@color/black"
        app:playerBackgroundColor="@color/colorPrimary"
        android:id="@+id/player"/>
    <TextView
@@ -59,7 +59,7 @@
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="47dp"
        android:textSize="41sp"
        android:text="心泉·疗愈空间"
        android:text="泉疗愈空间"
        android:textColor="@color/white"
        android:id="@+id/tv_1"/>
    <TextView
@@ -68,7 +68,7 @@
        app:layout_constraintTop_toBottomOf="@id/tv_1"
        android:gravity="center"
        android:lineSpacingExtra="10dp"
        android:text="亲爱的家人,温暖喜悦问候您\n我是心泉老师\n欢迎来到心泉·疗愈空间\n愿这一方空间为您带来\n平和 喜悦 放松 宁静"
        android:text="亲爱的家人,温暖喜悦问候您\n我是心泉老师\n欢迎来到泉疗愈空间\n愿这一方空间为您带来\n放松 平和 宁静 与喜悦"
        android:textColor="@color/white"
        android:layout_marginTop="36dp"
        android:textSize="18sp"/>
app/src/main/res/layout/activity_guide2.xml
@@ -27,7 +27,7 @@
        android:textSize="22sp"
        android:textColor="#404040"
        android:lineSpacingExtra="10dp"
        android:text="请您遵从本心\n回答以下问题\n挑选您喜欢的空间环境\n为您定制专属您的\n心泉·疗愈空间"/>
        android:text="请您遵从本心\n回答以下问题\n挑选您喜欢的空间环境\n为您定制专属您的\n泉疗愈空间"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
app/src/main/res/layout/activity_level.xml
@@ -56,7 +56,6 @@
            app:layout_constraintTop_toBottomOf="@id/iv_level"
            android:layout_marginTop="20dp"
            android:layout_marginHorizontal="14dp"
            android:max="100"
            android:id="@+id/mProgressBar"/>
        <TextView
            android:layout_width="wrap_content"
app/src/main/res/layout/activity_my_course.xml
@@ -116,6 +116,20 @@
                android:layout_marginHorizontal="14dp"
                android:layout_marginTop="9dp"
                app:layout_constraintTop_toBottomOf="@id/tv_2" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toBottomOf="@id/tv_2"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                android:id="@+id/tv_empty2"
                android:text="暂无推荐"
                android:textSize="12sp"
                android:layout_marginTop="30dp"
                android:textColor="@color/textColor66"
                android:drawableTop="@mipmap/wu"
                android:drawablePadding="20dp"
                android:gravity="center"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.core.widget.NestedScrollView>
app/src/main/res/layout/activity_offline_course.xml
@@ -66,6 +66,8 @@
                    app:layout_constraintTop_toTopOf="parent"
                    android:layout_marginTop="25dp"
                    android:textColor="@color/textColor"
                    android:singleLine="true"
                    android:ellipsize="end"
                    tools:text="心里咨询课程"
                    android:textStyle="bold"
                    android:layout_marginStart="20sp"
@@ -99,6 +101,8 @@
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/webView"
                android:layout_marginStart="21dp"
                android:background="@color/page_bg"
                android:layout_marginTop="19dp"/>
            <LinearLayout
                android:layout_width="wrap_content"
@@ -184,6 +188,7 @@
        android:id="@+id/iv_contact"
        android:src="@mipmap/ic_contact"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginEnd="4dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="180dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/activity_qa_detail.xml
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
@@ -48,6 +50,26 @@
        android:layout_marginHorizontal="16dp"
        app:layout_constraintTop_toBottomOf="@id/tv_answer"
        android:layout_marginTop="11dp"/>
        <RelativeLayout
            android:id="@+id/rl_web"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toBottomOf="@id/tv_answer"
            android:layout_marginTop="30dp"
            android:background="@drawable/bg_grey_10dp_web"
            android:padding="10dp"
            android:layout_marginHorizontal="16dp">
            <WebView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="300dp"
                android:background="@color/transparent"
                android:id="@+id/webView"/>
        </RelativeLayout>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
@@ -55,9 +77,11 @@
        android:textSize="12sp"
        android:textColor="@color/textColor66"
        android:text="咨询客服"
            app:layout_constraintTop_toBottomOf="@id/iv_code"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginTop="4dp"
        android:layout_marginBottom="30dp"/>
    <com.facebook.drawee.view.SimpleDraweeView
@@ -65,29 +89,14 @@
        android:layout_width="96dp"
        android:layout_height="96dp"
        android:layout_gravity="center"
        app:layout_constraintBottom_toTopOf="@id/tv_1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginTop="40dp"
        app:actualImageScaleType="fitXY"
            app:layout_constraintTop_toBottomOf="@+id/rl_web"
        app:placeholderImage="@color/page_bg"
        android:layout_marginBottom="4dp"/>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/tv_answer"
        android:layout_marginTop="30dp"
        android:background="@drawable/bg_grey_10dp_web"
        app:layout_constraintBottom_toTopOf="@id/iv_code"
        android:layout_marginBottom="45dp"
        android:padding="10dp"
        android:layout_marginHorizontal="16dp">
        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/transparent"
            android:id="@+id/webView"/>
    </RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
app/src/main/res/layout/activity_vip.xml
@@ -93,7 +93,7 @@
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="心泉·疗愈会员"
                android:text="泉疗愈会员"
                app:layout_constraintTop_toTopOf="@id/bg_vip"
                app:layout_constraintStart_toStartOf="@id/bg_vip"
                android:layout_marginStart="19dp"
app/src/main/res/layout/activity_voice_detail.xml
@@ -17,7 +17,7 @@
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:text="心泉·疗愈"
        android:text="泉疗愈"
        android:textSize="18sp"
        android:textStyle="bold"
        android:textColor="@color/white"
app/src/main/res/layout/dialog_comment.xml
@@ -10,7 +10,7 @@
        android:paddingBottom="30dp"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/tv_title"
            android:id="@+id/tv_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0条提问"
@@ -25,8 +25,8 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/iv_close"
            app:layout_constraintTop_toTopOf="@id/tv_title"
            app:layout_constraintBottom_toBottomOf="@id/tv_title"
            app:layout_constraintTop_toTopOf="@id/tv_count"
            app:layout_constraintBottom_toBottomOf="@id/tv_count"
            app:layout_constraintEnd_toEndOf="parent"
            android:padding="10dp"
            android:layout_marginEnd="5dp"
@@ -35,12 +35,12 @@
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:background="@color/textColor66"
            app:layout_constraintTop_toBottomOf="@id/tv_title"
            app:layout_constraintTop_toBottomOf="@id/tv_count"
            android:layout_margin="21dp"/>
        <com.scwang.smart.refresh.layout.SmartRefreshLayout
            android:layout_width="match_parent"
            android:layout_height="420dp"
            app:layout_constraintTop_toBottomOf="@id/tv_title"
            app:layout_constraintTop_toBottomOf="@id/tv_count"
            android:layout_marginTop="22dp"
            android:id="@+id/refreshLayout">
            <com.scwang.smart.refresh.header.ClassicsHeader
app/src/main/res/layout/fragment_mine.xml
@@ -100,7 +100,7 @@
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="心泉·疗愈会员"
                android:text="泉疗愈会员"
                app:layout_constraintTop_toTopOf="@id/bg_vip"
                app:layout_constraintStart_toStartOf="@id/bg_vip"
                android:layout_marginStart="19dp"
app/src/main/res/layout/fragment_push.xml
@@ -20,7 +20,6 @@
                android:id="@+id/banner"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="16dp"
                android:src="@mipmap/bg_guide"
                app:layout_constraintDimensionRatio="390:205"
                app:layout_constraintTop_toTopOf="parent" />
app/src/main/res/layout/fragment_teacher.xml
@@ -51,6 +51,7 @@
            android:layout_height="wrap_content"
            app:layout_constraintTop_toBottomOf="@id/tv_1"
            android:layout_marginTop="18dp"
            android:background="@color/white"
            android:id="@+id/webView"/>
        <TextView
app/src/main/res/layout/fragment_tree.xml
@@ -186,7 +186,7 @@
            app:layout_behavior="@string/bottom_sheet_behavior"
            android:id="@+id/bottom"
            android:background="@drawable/bg_white_top_20dp"
            android:layout_height="311dp">
            android:layout_height="290dp">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="53dp"
app/src/main/res/layout/item_banner_course.xml
@@ -3,10 +3,10 @@
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ImageView
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        app:actualImageScaleType="fitXY"
        android:id="@+id/iv_img"/>
    <View
        android:layout_width="match_parent"
app/src/main/res/mipmap-xxhdpi/ic_contact.png

app/src/main/res/mipmap-xxhdpi/ic_share_black.png
app/src/main/res/mipmap-xxhdpi/uncollect_b.png
app/src/main/res/raw/bg_movie.mov
Binary files differ
app/src/main/res/raw/bg_movie.mp4
Binary files differ