lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
app/src/main/java/com/sinata/xqmuse/ui/mine/MineFragment.kt
@@ -1,149 +1,155 @@
package com.sinata.xqmuse.ui.mine
import androidx.recyclerview.widget.GridLayoutManager
import android.app.Activity
import android.content.Intent
import cn.sinata.xldutils.fragment.BaseFragment
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.SpanBuilder
import cn.sinata.xldutils.utils.hidePhone
import cn.sinata.xldutils.visible
import com.sinata.xqmuse.MainActivity
import com.sinata.xqmuse.R
import com.sinata.xqmuse.JkApplication
import com.sinata.xqmuse.dialog.PhoneDialog
import com.sinata.xqmuse.dialog.SingleWheelDialog
import com.sinata.xqmuse.dialog.TipDialog
import com.sinata.xqmuse.network.Apis
import com.sinata.xqmuse.network.HttpManager
import com.sinata.xqmuse.network.entity.UserInfo
import com.sinata.xqmuse.network.entity.MineInfo
import com.sinata.xqmuse.network.requestByF
import com.sinata.xqmuse.ui.H5Activity
import com.sinata.xqmuse.ui.OnlyWebActivity
import com.sinata.xqmuse.ui.course.MyCourseActivity
import com.sinata.xqmuse.ui.course.ReceiveGiftActivity
import com.sinata.xqmuse.ui.login.LoginActivity
import com.sinata.xqmuse.ui.mine.adapter.MenuAdapter
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.extention.clickDelay
import com.sinata.xqmuse.utils.interfaces.StringCallback
import kotlinx.android.synthetic.main.fragment_mine.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.jetbrains.anko.backgroundResource
import org.jetbrains.anko.support.v4.startActivity
import org.jetbrains.anko.support.v4.startActivityForResult
import org.jetbrains.anko.support.v4.toast
class MineFragment : BaseFragment() {
    override fun contentViewId() = R.layout.fragment_mine
    private var userInfo: UserInfo? = null
    private val menus = arrayListOf("我的课程","收藏课程","我的动态","个人钱包","成就等级","优惠券管理","银行绑定","好友推广")
    private val adapter = MenuAdapter(menus)
    private var userInfo: MineInfo? = null
    override fun onFirstVisibleToUser() {
        EventBus.getDefault().register(this)
        rv_menu.layoutManager = GridLayoutManager(requireContext(),4)
        rv_menu.adapter = adapter
        adapter.setOnItemClickListener { view, position ->
            when(position){
                0->startActivity<MyCourseActivity>()
                1->startActivity<CollectedCourseActivity>()
                2->startActivity<MyDynamicActivity>()
                3->startActivity<WalletActivity>()
                4->startActivity<LevelActivity>("count" to (userInfo?.clockIn?:0))
                5->startActivity<CouponActivity>()
                6->startActivity<BindCardActivity>()
                7->startActivity<ShareActivity>()
            }
        queryUnread()
        showUserInfo()
        holder_info.setOnClickListener {
            startActivityForResult<UserInfoActivity>(1)
        }
        tv_center.clickDelay {
            startActivity<UserInfoActivity>("user" to userInfo)
        tv_watch_his.setOnClickListener {
            startActivity<WatchHisActivity>()
        }
        tv_feed.clickDelay {
            startActivity<FeedbackActivity>()
        tv_collect.setOnClickListener {
            startActivity<WatchHisActivity>("type" to WatchHisActivity.COLLECTED)
        }
        tv_about.clickDelay {
            HttpManager.getH5(4).requestByF(this){ _, data->
                data?.let {
                    startActivity<H5Activity>("title" to "关于我们","url" to it)
                }
            }
        tv_has_buy.setOnClickListener {
            startActivity<WatchHisActivity>("type" to WatchHisActivity.HAS_BUY)
        }
        tv_contact.clickDelay {
            HttpManager.getPhone().requestByF(this){_,data->
                PhoneDialog.show(childFragmentManager,data?:"")
            }
        bg_vip.setOnClickListener {
            startActivity<VipActivity>()
        }
        tv_guide.clickDelay {
            startActivity<UseGuideActivity>()
        tv_service.setOnClickListener {
            startActivity<ServiceActivity>()
        }
        tv_privacy_rule.clickDelay {
            HttpManager.getH5(2).requestByF(this){ _, data->
                data?.let {
                    startActivity<H5Activity>("title" to "隐私协议","url" to it)
                }
            }
        tv_level.setOnClickListener {
            startActivity<LevelActivity>()
        }
        tv_user_rule.clickDelay {
            HttpManager.getH5(1).requestByF(this){ _, data->
                data?.let {
                    startActivity<H5Activity>("title" to "用户协议","url" to it)
                }
            }
        }
        tv_set_unit.clickDelay {
            SingleWheelDialog.show(childFragmentManager,"APP体重单位", arrayListOf("斤","公斤","磅"),object :StringCallback{
                override fun onResult(rst: String) {
                    HttpManager.setUnit(if (rst == "斤") 2 else if (rst == "公斤") 1 else 3).requestByF(this@MineFragment){_,_->
                        myToast("设置成功")
                        EventBus.getDefault().post(EmptyEvent(Const.EventCode.USER_INFO_CHANGED))
                    }
                }
            })
        }
        tv_address.clickDelay {
            startActivity<ReceiveGiftActivity>()
        iv_setting.setOnClickListener {
            startActivity<SettingActivity>("data" to userInfo)
        }
        tv_setting.setOnClickListener {
            startActivity<SettingActivity>()
            iv_setting.callOnClick()
        }
        tv_logout.setOnClickListener {
            TipDialog.show(childFragmentManager,"确认退出登录吗?",object : TipDialog.OnClickCallback{
                override fun onOk() {
                    SPUtils.instance().put(Const.User.TOKEN,"").put(Const.User.USER_ID,"")
                        .put("isHint",false)
                        .put("MsgTime","")
                        .apply()
                    (requireActivity().application as JkApplication).exit()
                    startActivity<LoginActivity>()
                }
                override fun onCancel() {
                }
            })
        tv_share.setOnClickListener {
            userInfo?.apply {
                startActivity<ShareActivity>("userId" to userInfo?.id)
            }
        }
        showUserInfo()
        iv_msg.setOnClickListener {
            startActivity<MsgActivity>()
        }
        tv_rank.setOnClickListener {
            userInfo?.apply {
                startActivity<OnlyWebActivity>("title" to "爱心助力榜单","url" to Apis.RANK.format(id),"type" to 0,"pushList" to Apis.PUSH_LIST.format(id))
            }
        }
        tv_account.setOnClickListener {
            userInfo?.apply {
                startActivity<WalletActivity>("userId" to userInfo?.id)
            }
        }
        tv_more_record.setOnClickListener {
            startActivity<MyCourseActivity>()
        }
        tv_study_record.setOnClickListener {
            startActivity<MyCourseActivity>()
        }
    }
    @Subscribe
    fun refreshInfo(e: EmptyEvent){
        if (e.code == Const.EventCode.REFRESH_USER_INFO){
        if (e.code == Const.EventCode.CHANGE_USER){
            showUserInfo()
        } else if (e.code == Const.EventCode.USER_INFO_CHANGED){
            showUserInfo()
        }
    }
    private fun showUserInfo() {
        userInfo = (requireActivity() as MainActivity).homeData
        userInfo?.apply {
            iv_avatar.setImageURI(headImg)
            tv_name.text = name
            iv_level.setImageResource(getLevelRes())
            tv_invite_code.text = "邀请码:${code}"
            tv_height.text = height
            tv_weight.text = weight
            tv_bmi.text = bMI
            tv_unit.text = getUnitName()
            tv_fat_state.text = bMIInfo
    fun showUserInfo() {
        if (!isAdded)
            return
        if (!SPUtils.instance().getString(Const.User.TOKEN).isNullOrEmpty())
            HttpManager.getUserInfo().requestByF(this){_,data->
                userInfo = data
                data?.apply {
                    iv_avatar.setImageURI(avatar)
                    tv_name.text = nickname
                    tv_phone.text = cellPhone.hidePhone()
                    tv_vip.text = if (isVip == 2){
                        bg_vip.backgroundResource = R.mipmap.no_vip
                        tv_describe.text = "升级为会员,解锁会员专属体验"
                        "你还未开通会员服务"
                    } else{
                        bg_vip.backgroundResource = R.mipmap.bg_vip
                        tv_describe.text = "您将享受所有会员专享音频,尽情畅游泉疗愈世界"
                        "${vipExpireTime?.substring(0,10)}到期"
                    }
                    iv_vip.setImageURI(data.levelIcon)
                    tv_day.text = cumulative
                    tv_continue.text = continuity?:"0"
                    val format = "%d小时%d分".format(today / 60, today % 60)
                    tv_today.text = SpanBuilder(format).size(format.indexOf("小"),format.indexOf("小")+2,11).size(format.length-1,format.length,11).build()
                }
            }
        else{
            userInfo = null
            iv_avatar.setImageURI("")
            tv_name.text = ""
            tv_phone.text = ""
            tv_vip.text = "你还未开通会员服务"
            tv_describe.text = "升级为会员,解锁会员专属体验"
        }
    }
    fun queryUnread(){
        if (!SPUtils.instance().getString(Const.User.TOKEN).isNullOrEmpty())
            HttpManager.queryNotice().requestByF(this){_,data->
                if (data == true) iv_unread.visible() else iv_unread.gone()
            }
    }
    override fun onDestroy() {
        super.onDestroy()
        EventBus.getDefault().unregister(this)
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK)
            showUserInfo()
    }
}