From 718f31c92e2029d05260810435a2c70cef6e6ce5 Mon Sep 17 00:00:00 2001 From: lmw <125975490@qq.com> Date: 星期四, 24 四月 2025 10:45:55 +0800 Subject: [PATCH] save --- app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt | 251 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 211 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt b/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt index 1eb42a5..e4331dd 100644 --- a/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/sinata/xqmuse/ui/home/HomeFragment.kt @@ -1,47 +1,35 @@ package com.sinata.xqmuse.ui.home -import android.graphics.Color import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import cn.sinata.xldutils.fragment.BaseFragment import cn.sinata.xldutils.gone -import cn.sinata.xldutils.utils.SPUtils -import cn.sinata.xldutils.utils.SpanBuilder -import cn.sinata.xldutils.utils.myToast -import cn.sinata.xldutils.utils.toTime +import cn.sinata.xldutils.invisible +import cn.sinata.xldutils.utils.ellipsize import cn.sinata.xldutils.visible -import com.github.mikephil.charting.components.XAxis -import com.github.mikephil.charting.components.YAxis -import com.github.mikephil.charting.data.Entry -import com.github.mikephil.charting.data.LineData -import com.github.mikephil.charting.data.LineDataSet -import com.github.mikephil.charting.formatter.ValueFormatter -import com.github.mikephil.charting.interfaces.datasets.ILineDataSet -import com.sinata.xqmuse.MainActivity +import com.google.android.exoplayer2.upstream.DataSpec +import com.google.android.exoplayer2.upstream.RawResourceDataSource import com.sinata.xqmuse.R -import com.sinata.xqmuse.dialog.ChooseStarDialog -import com.sinata.xqmuse.dialog.ChooseWeightDialog -import com.sinata.xqmuse.dialog.NoticeDialog +import com.sinata.xqmuse.ThinkAudioService import com.sinata.xqmuse.network.HttpManager import com.sinata.xqmuse.network.entity.* import com.sinata.xqmuse.network.requestByF +import com.sinata.xqmuse.ui.BGMSettingActivity +import com.sinata.xqmuse.ui.H5Activity +import com.sinata.xqmuse.ui.guide.GuideActivity import com.sinata.xqmuse.ui.home.adapter.HomeAdapter import com.sinata.xqmuse.ui.home.adapter.HomeBannerAdapter -import com.sinata.xqmuse.ui.home.adapter.LuckAdapter import com.sinata.xqmuse.ui.home.adapter.TopMenuAdapter -import com.sinata.xqmuse.ui.mine.UserInfoActivity +import com.sinata.xqmuse.ui.login.LoginActivity +import com.sinata.xqmuse.ui.mine.VipActivity import com.sinata.xqmuse.utils.Const +import com.sinata.xqmuse.utils.cache.ProxyVideoCacheManager import com.sinata.xqmuse.utils.event.EmptyEvent -import com.sinata.xqmuse.utils.extention.clickDelay -import com.sinata.xqmuse.utils.extention.getArrowIcon -import com.sinata.xqmuse.utils.extention.getStarIcon import com.sinata.xqmuse.utils.interfaces.StringCallback import kotlinx.android.synthetic.main.fragment_home.* import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe import org.jetbrains.anko.support.v4.startActivity -import java.util.* -import kotlin.math.absoluteValue +import org.jetbrains.anko.support.v4.toast class HomeFragment : BaseFragment() { override fun contentViewId() = R.layout.fragment_home @@ -50,40 +38,177 @@ private val topMenuAdapter = TopMenuAdapter(topMenu) private var today:HomeItem? = null //今日冥想 private val privacy = arrayListOf<CommonItemBean>() //私人订制 - private val privacyAdapter by lazy { HomeBannerAdapter(privacy,requireContext()) } + private val privacyAdapter by lazy { HomeBannerAdapter(privacy, requireContext()) } private val list = arrayListOf<HomeListBean>() private val adapter = HomeAdapter(list) override fun onFirstVisibleToUser() { - rv_menu.layoutManager = GridLayoutManager(requireContext(),4) + rv_menu.layoutManager = GridLayoutManager(requireContext(), 4) rv_menu.adapter = topMenuAdapter banner_privacy.adapter = privacyAdapter rv_list.layoutManager = LinearLayoutManager(requireContext()) rv_list.adapter = adapter + adapter.callback = object :StringCallback{ + override fun onResult(rst: String) { + showDialog() + HttpManager.getMeditationDetails(rst).requestByF( + this@HomeFragment, + success = { _, data -> + dismissDialog() + data?.goDetail(requireContext()) + }){ _, _-> + dismissDialog() + } + } + } getTopMenu() getToday() getPrivacy() getList() getBottomMenu() + initClick() + } + + fun refreshData(){ + getToday() + getPrivacy() + getList() + EventBus.getDefault().post(EmptyEvent(Const.EventCode.CHANGE_BGM)) //BGM切换流程 + } + + fun refreshDataByResume(){ + if (list.isNotEmpty()){ + getTopMenu() + getToday() + getPrivacy() + getList() + getBottomMenu() + } } private fun initClick() { + iv_search.setOnClickListener { + startActivity<SearchActivity>() + } + iv_privacy.setOnClickListener { + startActivity<GuideActivity>() + } + tv_3.setOnClickListener { + HttpManager.getH5(4).requestByF(this){ _, data-> + data?.let { + startActivity<H5Activity>("title" to "新手冥想指南", "url" to it.content) + } + } + } + iv_daily_empty.setOnClickListener { + toast("平台暂未设置今日疗愈") + } + iv_voice.setOnClickListener { + startActivity<BGMSettingActivity>() + } + topMenuAdapter.setOnItemClickListener { view, position -> + startActivity<TypeVoiceActivity>( + "title" to topMenu[position].categoryName, + "id" to topMenu[position].id + ) + } + iv_today.setOnClickListener { + if (today!=null){ + if (today?.isShow == 1){ //跳转播放微电影 + startActivity<MicroVideoActivity>( + "url" to today?.meditationVideo?.videoUrl, + "title" to today?.meditationVideo?.title + ) + }else if (ThinkAudioService.voice?.id == today?.meditationId){ + EventBus.getDefault().post(EmptyEvent(Const.EventCode.PAUSE_OR_RESUME_THINK)) + if (ThinkAudioService.playing) //播放中 + iv_play_today.setImageResource(R.mipmap.player_pause) + else + iv_play_today.setImageResource(R.mipmap.play) + }else{ + showDialog() + HttpManager.getMeditationDetails(today!!.meditationId).requestByF( + this, + success = { _, data -> + dismissDialog() + if (data?.chargeType == 2 && data.isVip != 1) { //会员免费 + startActivity<VipActivity>() + } else if (data?.chargeType == 3 && data.isBuy != 1) { //单独收费且未购买 + startActivity<BuyVoiceActivity>("id" to data.id) + } else { + if (ThinkAudioService.playing) + EventBus.getDefault() + .post(EmptyEvent(Const.EventCode.FINISH_THINK)) + ThinkAudioService.voice = data + EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_THINK)) + } + }){ _, _-> + dismissDialog() + } + } + } + } + banner_privacy.setOnBannerListener { data, position -> + showDialog() + HttpManager.getMeditationDetails(privacy[position].id).requestByF( + this, + success = { _, data -> + dismissDialog() + data?.goDetail(requireContext()) + }){ _, _-> + dismissDialog() + } + } + iv_pri_empty.setOnClickListener { startActivity<LoginActivity>() } + } + fun changeBg(bg: String, video: String){ + if (video.isNotEmpty()){ + iv_home.invisible() + player.visible() + player.release() + val cacheServer = ProxyVideoCacheManager.getProxy(context) + val proxyUrl = cacheServer.getProxyUrl(video) + player.setUrl(proxyUrl) + player.setLooping(true) + player.start() + } else if (bg.isNotEmpty()){ + iv_home.setImageURI(bg) + player.release() + player.gone() + iv_home.visible() + }else{ + iv_home.invisible() + player.visible() + player.release() + //ExoPlayer + val dataSpec = DataSpec(RawResourceDataSource.buildRawResourceUri(R.raw.default_bg)) + val rawResourceDataSource = RawResourceDataSource(requireContext()) + try { + rawResourceDataSource.open(dataSpec) + } catch (e: RawResourceDataSource.RawResourceDataSourceException) { + e.printStackTrace() + } + val url = rawResourceDataSource.uri.toString() + player.setUrl(url) + player.setLooping(true) + player.start() + } } private fun getTopMenu(){ - HttpManager.getCategoryListByType(1).requestByF(this){_,data-> + HttpManager.getCategoryListByType(1).requestByF(this){ _, data-> topMenu.clear() - topMenu.addAll(data?: arrayListOf()) + topMenu.addAll(data ?: arrayListOf()) topMenuAdapter.notifyDataSetChanged() } } private fun getBottomMenu(){ - HttpManager.getCategoryListByType(2).requestByF(this){_,data-> + HttpManager.getCategoryListByType(2).requestByF(this){ _, data-> adapter.menus.clear() - adapter.menus.addAll(data?: arrayListOf()) + adapter.menus.addAll(data ?: arrayListOf()) if (list.isNotEmpty()){ list.add(1, HomeListBean(null, arrayListOf())) adapter.notifyDataSetChanged() @@ -91,27 +216,59 @@ } } - private fun getToday() { - HttpManager.getTodayMeditation().requestByF(this){_,data-> + fun getToday() { + HttpManager.getTodayMeditation().requestByF(this){ _, data-> today = data - iv_today.setImageURI(today?.clientMeditationVO?.backgroundUrl) - tv_length_today.text = "${today?.clientMeditationVO?.meditationTitle} | ${"00:00"}" - tv_today_count.text = "${today?.clientMeditationVO?.realLearnedNum}人已参加学习" + if (data?.isShow == 0){ + tv_1.text = "每日疗愈" + tv_sub_1.text = "Daily Meditation" + if (today?.clientMeditationVO?.backgroundUrl.isNullOrEmpty()){ + iv_daily_empty.visible() + }else{ + iv_daily_empty.gone() + iv_today.setImageURI(today?.imageUrl) + tv_length_today.text = "${today?.clientMeditationVO?.meditationTitle?.ellipsize( + 12 + )} | ${"%02d:%02d".format((data?.time ?: 0) / 60, (data?.time ?: 0) % 60)}" + tv_today_count.text = "${(today?.clientMeditationVO?.realLearnedNum?:0)+(today?.clientMeditationVO?.virtualLearnedNum?:0)}人已参加学习" + } + }else{ + tv_1.text = "泉疗愈 微电影" + tv_sub_1.text = "Spring Healing Microfilm" + if (today?.meditationVideo?.videoUrl.isNullOrEmpty()){ + iv_daily_empty.visible() + }else{ + iv_daily_empty.gone() + iv_today.setImageURI(today?.meditationVideo?.imageUrl) + tv_length_today.text = "${today?.meditationVideo?.title?.ellipsize(18)} | ${"%02d:%02d".format( + (today?.meditationVideo?.videoSecond ?: 0) / 60, + (today?.meditationVideo?.videoSecond ?: 0) % 60 + )}" + tv_today_count.text = "" + } + } } } - private fun getPrivacy() { - HttpManager.getPersonalityPlan().requestByF(this){_,data-> + fun refreshTodayPlayingState(){ + if (ThinkAudioService.voice?.id == today?.meditationId&&ThinkAudioService.playing) + iv_play_today.setImageResource(R.mipmap.player_pause) + else + iv_play_today.setImageResource(R.mipmap.play) + } + + fun getPrivacy() { + HttpManager.getPersonalityPlan().requestByF(this){ _, data-> privacy.clear() - privacy.addAll(data?: arrayListOf()) + privacy.addAll(data ?: arrayListOf()) privacyAdapter.notifyDataSetChanged() } } private fun getList() { - HttpManager.getMeditationAndCateList().requestByF(this){_,data-> + HttpManager.getMeditationAndCateList().requestByF(this){ _, data-> list.clear() - list.addAll(data?: arrayListOf()) + list.addAll(data ?: arrayListOf()) if (adapter.menus.isNotEmpty()){ list.add(1, HomeListBean(null, arrayListOf())) adapter.notifyDataSetChanged() @@ -119,4 +276,18 @@ } } + override fun onPause() { + super.onPause() + player?.pause() + } + + override fun onResume() { + super.onResume() + player?.resume() + } + + override fun onDestroy() { + super.onDestroy() + player?.release() + } } \ No newline at end of file -- Gitblit v1.7.1