diff --git a/app/src/main/java/com/nnbc123/app/home/HomeViewModel.kt b/app/src/main/java/com/nnbc123/app/home/HomeViewModel.kt index 43e033033..d5a3e9959 100644 --- a/app/src/main/java/com/nnbc123/app/home/HomeViewModel.kt +++ b/app/src/main/java/com/nnbc123/app/home/HomeViewModel.kt @@ -44,8 +44,8 @@ class HomeViewModel : BaseViewModel() { private val _collectLiveData = MutableLiveData>() val collectLiveData: LiveData> = _collectLiveData - private val _tagLiveData = MutableLiveData>() - val tagLiveData: LiveData> = _tagLiveData + private val _tagLiveData = MutableLiveData>() + val tagLiveData: LiveData> = _tagLiveData private val _emptyLiveData = MutableLiveData() val emptyLiveData: LiveData = _emptyLiveData @@ -56,6 +56,9 @@ class HomeViewModel : BaseViewModel() { private val _resourceJumpLiveData = MutableLiveData() val resourceJumpLiveData: LiveData = _resourceJumpLiveData + private val _homeChatPickLiveData = MutableLiveData() + val homeChatPickLiveData: LiveData = _homeChatPickLiveData + private val _singleAnchorHomeLiveData = MutableLiveData>() val singleAnchorHomeLiveData: LiveData> = _singleAnchorHomeLiveData @@ -108,7 +111,18 @@ class HomeViewModel : BaseViewModel() { _resourceJumpLiveData.value = HomeModel.getResourceJumpInfo(id) } ) + } + fun getHomeChatPick() { + safeLaunch( + onError = { + _homeChatPickLiveData.value = null + it.message.toast() + }, + block = { + _homeChatPickLiveData.value = HomeModel.getHomeChatPick() + } + ) } fun getHotRoom(pageNum: Int, pageSize: Int) { diff --git a/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt b/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt index 9168a3c90..eace07a34 100644 --- a/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt +++ b/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt @@ -199,225 +199,226 @@ class MeFragment : BaseFragment(), View.OnClickListener { height = ScreenUtil.dip2px(146f) } } - - if (cacheItemView[pagePos] == null) { - recyclerView = RecyclerView(requireContext()) - recyclerView.layoutParams = ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ) - recyclerView.layoutManager = - GridLayoutManager(context, if (pagerList[pagePos].size < 4) 3 else 4) - giftAdapter = MeCenterAdapter() - recyclerView.adapter = giftAdapter - cacheItemView.put(pagePos, recyclerView) - } else { - recyclerView = cacheItemView[pagePos] - giftAdapter = recyclerView.adapter as MeCenterAdapter - } - giftAdapter.setNewData(pagerList[pagePos]) - container.addView(recyclerView) - return recyclerView } - override fun destroyItem(container: ViewGroup, position: Int, any: Any) { - val recyclerView = cacheItemView[position] - container.removeView(recyclerView) + if (cacheItemView[pagePos] == null) { + recyclerView = RecyclerView(requireContext()) + recyclerView.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + recyclerView.layoutManager = + GridLayoutManager(context, if (pagerList[pagePos].size < 4) 3 else 4) + giftAdapter = MeCenterAdapter() + recyclerView.adapter = giftAdapter + cacheItemView.put(pagePos, recyclerView) + } else { + recyclerView = cacheItemView[pagePos] + giftAdapter = recyclerView.adapter as MeCenterAdapter } + giftAdapter.setNewData(pagerList[pagePos]) + container.addView(recyclerView) + return recyclerView } - mBinding.viewPagerEntrance.setCurrentItem(centerIndex, false) - } - private fun onGetRelationShipEvent(event: RelationShipEvent) { - if (event.event == RelationShipEvent.EVENT_FRIEND_UPDATE) { - requestUpdateUserInfo() + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + val recyclerView = cacheItemView[position] + container.removeView(recyclerView) } } + mBinding.viewPagerEntrance.setCurrentItem(centerIndex, false) + } - override fun onResume() { - super.onResume() - setUserData() + private fun onGetRelationShipEvent(event: RelationShipEvent) { + if (event.event == RelationShipEvent.EVENT_FRIEND_UPDATE) { requestUpdateUserInfo() } + } - @SuppressLint("SetTextI18n") - private fun setUserData() { - mUserInfo = UserModel.get().cacheLoginUserInfo - mUserInfo?.let { - mBinding.userInfo = mUserInfo - mBinding.tvUserId.text = String.format( - Locale.getDefault(), - getString(R.string.text_user_id), it.erbanNo.toString() - ) - val star = StarUtils.getConstellation(Date(it.birth)) - mBinding.tvConstellation.text = star - setUserLevel(it.userLevelVo) - initNewUserCharge(it) - mBinding.flPmMode.isVisible = it.isParentMode - if (it.isParentMode) { - mBinding.meItemSkill.isVisible = false - } - it.userHeadwear?.effect?.let { effect -> - if (mBinding.ivHeadWear.tag != effect) { - NobleUtil.loadHeadWear(effect, mBinding.ivHeadWear) - mBinding.ivHeadWear.tag = effect - } + override fun onResume() { + super.onResume() + setUserData() + requestUpdateUserInfo() + } + + @SuppressLint("SetTextI18n") + private fun setUserData() { + mUserInfo = UserModel.get().cacheLoginUserInfo + mUserInfo?.let { + mBinding.userInfo = mUserInfo + mBinding.tvUserId.text = String.format( + Locale.getDefault(), + getString(R.string.text_user_id), it.erbanNo.toString() + ) + val star = StarUtils.getConstellation(Date(it.birth)) + mBinding.tvConstellation.text = star + setUserLevel(it.userLevelVo) + initNewUserCharge(it) + mBinding.flPmMode.isVisible = it.isParentMode + if (it.isParentMode) { + mBinding.meItemSkill.isVisible = false + } + it.userHeadwear?.effect?.let { effect -> + if (mBinding.ivHeadWear.tag != effect) { + NobleUtil.loadHeadWear(effect, mBinding.ivHeadWear) + mBinding.ivHeadWear.tag = effect } } - } - private fun initNewUserCharge(userinfo: UserInfo) { - if (userinfo.isShowLimitCharge) { - val count = - (userinfo.limitChargeEndTime - CurrentTimeUtils.getCurrentTime()) / 1000 / 60 + 1 - if (count <= 0) { - mBinding.flNewUserCharge.isVisible = false - return - } - mBinding.flNewUserCharge.isVisible = true - newUserDisposable?.dispose() - newUserDisposable = - Observable.intervalRange(0, count, 0, 1, TimeUnit.MINUTES) - .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)) - .observeOn(AndroidSchedulers.mainThread()) - .doOnComplete { + } + + private fun initNewUserCharge(userinfo: UserInfo) { + if (userinfo.isShowLimitCharge) { + val count = + (userinfo.limitChargeEndTime - CurrentTimeUtils.getCurrentTime()) / 1000 / 60 + 1 + if (count <= 0) { + mBinding.flNewUserCharge.isVisible = false + return + } + mBinding.flNewUserCharge.isVisible = true + newUserDisposable?.dispose() + newUserDisposable = + Observable.intervalRange(0, count, 0, 1, TimeUnit.MINUTES) + .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)) + .observeOn(AndroidSchedulers.mainThread()) + .doOnComplete { + userinfo.isShowLimitCharge = false + mBinding.flNewUserCharge.isVisible = false + } + .subscribe({ + val residueTime = + userinfo.limitChargeEndTime - CurrentTimeUtils.getCurrentTime() + if (residueTime <= 0) { userinfo.isShowLimitCharge = false mBinding.flNewUserCharge.isVisible = false + } else { + mBinding.tvNewUserChargeEndTime.text = + TimeUtil.getElapseTimeForNewUserCharge(residueTime) } - .subscribe({ - val residueTime = - userinfo.limitChargeEndTime - CurrentTimeUtils.getCurrentTime() - if (residueTime <= 0) { - userinfo.isShowLimitCharge = false - mBinding.flNewUserCharge.isVisible = false - } else { - mBinding.tvNewUserChargeEndTime.text = - TimeUtil.getElapseTimeForNewUserCharge(residueTime) - } - }, { - mBinding.flNewUserCharge.isVisible = false - it.printStackTrace() - }) + }, { + mBinding.flNewUserCharge.isVisible = false + it.printStackTrace() + }) + StatisticManager.Instance() + .onEvent(StatisticsProtocol.EVENT_USERCENTER_NUGIFT_POP_SHOW, "新人专享礼物入口曝光") + } else { + mBinding.flNewUserCharge.isVisible = false + } + } + + private fun setUserLevel(userLevelVo: UserLevelVo?) { + mBinding.ivUserCharm.visibility = View.GONE + mBinding.ivUserLevel.visibility = View.GONE + if (userLevelVo != null) { + val userLevelUrl = userLevelVo.getExperUrl() + val userCharmUrl = userLevelVo.getCharmUrl() + if (!TextUtils.isEmpty(userLevelUrl)) { + mBinding.ivUserLevel.visibility = View.VISIBLE + ImageLoadUtils.loadImage(mContext, userLevelUrl, mBinding.ivUserLevel) + } + if (!TextUtils.isEmpty(userCharmUrl)) { + mBinding.ivUserCharm.visibility = View.VISIBLE + ImageLoadUtils.loadImage(mContext, userCharmUrl, mBinding.ivUserCharm) + } + } + } + + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onLoginUserInfoUpdateEvent(event: LoginUserInfoUpdateEvent?) { + setUserData() + meViewModel.refreshData() + } + + @SuppressLint("SetTextI18n") + @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) + fun onVisitorUnreadCountEvent(event: VisitorUnreadCountEvent) { + if (event.visitNum == 0) { + mBinding.tvRedDot.visibility = View.GONE + } else { + mBinding.tvRedDot.visibility = View.VISIBLE + mBinding.tvRedDot.text = + if (event.visitNum > 99) "99+" else event.visitNum.toString() + } + } + + private fun requestUpdateUserInfo() { + UserModel.get().updateCurrentUserInfo().subscribe() + } + + override fun onClick(v: View) { + when (v.id) { + R.id.iv_user_head, R.id.rl_user_info -> { + if (UserUtils.isPmMode()) return + mUserInfo?.let { UIHelper.showUserInfoAct(mContext, it.uid) } + } + R.id.iv_edit -> + mUserInfo?.let { UIHelper.showUserInfoModifyAct(mContext, it.uid) } + + R.id.tv_user_attentions, R.id.tv_user_attention_text -> startActivity( + Intent( + mContext, + AttentionListActivity::class.java + ) + ) + R.id.tv_user_fans, R.id.tv_user_fan_text -> startActivity( + Intent( + mContext, + FansListActivity::class.java + ) + ) + R.id.me_item_setting -> UIHelper.showSettingAct(mContext) + R.id.me_item_vip -> { + VipMainActivity.start(mContext) StatisticManager.Instance() - .onEvent(StatisticsProtocol.EVENT_USERCENTER_NUGIFT_POP_SHOW, "新人专享礼物入口曝光") - } else { - mBinding.flNewUserCharge.isVisible = false - } - } - - private fun setUserLevel(userLevelVo: UserLevelVo?) { - mBinding.ivUserCharm.visibility = View.GONE - mBinding.ivUserLevel.visibility = View.GONE - if (userLevelVo != null) { - val userLevelUrl = userLevelVo.getExperUrl() - val userCharmUrl = userLevelVo.getCharmUrl() - if (!TextUtils.isEmpty(userLevelUrl)) { - mBinding.ivUserLevel.visibility = View.VISIBLE - ImageLoadUtils.loadImage(mContext, userLevelUrl, mBinding.ivUserLevel) - } - if (!TextUtils.isEmpty(userCharmUrl)) { - mBinding.ivUserCharm.visibility = View.VISIBLE - ImageLoadUtils.loadImage(mContext, userCharmUrl, mBinding.ivUserCharm) - } - } - } - - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onLoginUserInfoUpdateEvent(event: LoginUserInfoUpdateEvent?) { - setUserData() - meViewModel.refreshData() - } - - @SuppressLint("SetTextI18n") - @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) - fun onVisitorUnreadCountEvent(event: VisitorUnreadCountEvent) { - if (event.visitNum == 0) { - mBinding.tvRedDot.visibility = View.GONE - } else { - mBinding.tvRedDot.visibility = View.VISIBLE - mBinding.tvRedDot.text = - if (event.visitNum > 99) "99+" else event.visitNum.toString() - } - } - - private fun requestUpdateUserInfo() { - UserModel.get().updateCurrentUserInfo().subscribe() - } - - override fun onClick(v: View) { - when (v.id) { - R.id.iv_user_head, R.id.rl_user_info -> { - if (UserUtils.isPmMode()) return - mUserInfo?.let { UIHelper.showUserInfoAct(mContext, it.uid) } - } - R.id.iv_edit -> - mUserInfo?.let { UIHelper.showUserInfoModifyAct(mContext, it.uid) } - - R.id.tv_user_attentions, R.id.tv_user_attention_text -> startActivity( - Intent( - mContext, - AttentionListActivity::class.java + .onEvent(StatisticsProtocol.EVENT_VIP_ENTRANCE_ME_CLICK, "贵族我的入口点击事件") + //后面产品新加的 + StatisticManager.Instance() + .onEvent( + StatisticsProtocol.EVENT_USERCENTER_NOBLE_CARD_CLICK, + "个人中心贵族卡片片点击" ) - ) - R.id.tv_user_fans, R.id.tv_user_fan_text -> startActivity( - Intent( - mContext, - FansListActivity::class.java - ) - ) - R.id.me_item_setting -> UIHelper.showSettingAct(mContext) - R.id.me_item_vip -> { - VipMainActivity.start(mContext) - StatisticManager.Instance() - .onEvent(StatisticsProtocol.EVENT_VIP_ENTRANCE_ME_CLICK, "贵族我的入口点击事件") - //后面产品新加的 - StatisticManager.Instance() - .onEvent( - StatisticsProtocol.EVENT_USERCENTER_NOBLE_CARD_CLICK, - "个人中心贵族卡片片点击" - ) - } - R.id.me_item_skill -> start( - mContext, - SkillHomeActivity.PAGE_TYPE_SELF, - AuthModel.get().currentUid - ) - R.id.tv_user_visitor -> VisitorListActivity.start(mContext) - R.id.me_item_wallet -> { - ChargeActivity.start(mContext) - StatisticManager.Instance() - .onEvent( - StatisticsProtocol.EVENT_USERCENTER_RECHARGE_CARD_CLICK, - "个人中心充值卡片点击" - ) - } - R.id.me_item_room -> OpenRoomHelper.openHomePartyRoom(requireActivity() as BaseActivity) - R.id.me_item_level -> CommonWebViewActivity.start( - mContext, - UriProvider.getUserLevelUrl() - ) - R.id.tv_user_history -> RoomHistoryListActivity.start(mContext) - R.id.fl_new_user_charge -> { - NewUserChargeGiftDialog.start(mContext) - StatisticManager.Instance() - .onEvent( - StatisticsProtocol.EVENT_USERCENTER_NUGIFT_POP_CLICK, - "usercenter_nugift_pop_click" - ) - } - R.id.ll_pm_mode, R.id.tv_me_youth_mode -> PatriarchModeActivity.start(mContext) - R.id.tv_me_real_name -> CommonWebViewActivity.start( - mContext, - UriProvider.getTutuRealNamePage() - ) - R.id.tv_me_service -> { - CustomerServerHelper.contactCustomerServer(mContext) - } - else -> {} } + R.id.me_item_skill -> start( + mContext, + SkillHomeActivity.PAGE_TYPE_SELF, + AuthModel.get().currentUid + ) + R.id.tv_user_visitor -> VisitorListActivity.start(mContext) + R.id.me_item_wallet -> { + ChargeActivity.start(mContext) + StatisticManager.Instance() + .onEvent( + StatisticsProtocol.EVENT_USERCENTER_RECHARGE_CARD_CLICK, + "个人中心充值卡片点击" + ) + } + R.id.me_item_room -> OpenRoomHelper.openHomePartyRoom(requireActivity() as BaseActivity) + R.id.me_item_level -> CommonWebViewActivity.start( + mContext, + UriProvider.getUserLevelUrl() + ) + R.id.tv_user_history -> RoomHistoryListActivity.start(mContext) + R.id.fl_new_user_charge -> { + NewUserChargeGiftDialog.start(mContext) + StatisticManager.Instance() + .onEvent( + StatisticsProtocol.EVENT_USERCENTER_NUGIFT_POP_CLICK, + "usercenter_nugift_pop_click" + ) + } + R.id.ll_pm_mode, R.id.tv_me_youth_mode -> PatriarchModeActivity.start(mContext) + R.id.tv_me_real_name -> CommonWebViewActivity.start( + mContext, + UriProvider.getTutuRealNamePage() + ) + R.id.tv_me_service -> { + CustomerServerHelper.contactCustomerServer(mContext) + } + else -> {} } + } - } \ No newline at end of file +} \ No newline at end of file diff --git a/app/src/main/java/com/nnbc123/app/home/fragment/PartyFragment.kt b/app/src/main/java/com/nnbc123/app/home/fragment/PartyFragment.kt index b5c944a25..3767c69a2 100644 --- a/app/src/main/java/com/nnbc123/app/home/fragment/PartyFragment.kt +++ b/app/src/main/java/com/nnbc123/app/home/fragment/PartyFragment.kt @@ -81,7 +81,8 @@ class PartyFragment : BaseFragment(), MainMagicIndicatorAdapter.OnItemSelectList homeViewModel.getPartyBanner() } - private fun onGetHomeTagSuccess(tagInfoList: List) { + private fun onGetHomeTagSuccess(tagInfoList: MutableList) { + tagInfoList.add(HomeTagInfo("推荐")) var changed = false val oldTabInfoList: List = ArrayList(mTabInfoList) for (tagInfo in tagInfoList) { diff --git a/app/src/main/java/com/nnbc123/app/home/fragment/RecommendFragment.kt b/app/src/main/java/com/nnbc123/app/home/fragment/RecommendFragment.kt index a73eee4fb..52f2af8a2 100644 --- a/app/src/main/java/com/nnbc123/app/home/fragment/RecommendFragment.kt +++ b/app/src/main/java/com/nnbc123/app/home/fragment/RecommendFragment.kt @@ -149,9 +149,23 @@ class RecommendFragment : BaseFragment(), } } + mBinding.ivResource3.setOnClickListener { + dialogManager.showProgressDialog(mContext) + homeViewModel.getHomeChatPick() + } + homeViewModel.homeChatPickLiveData.observe(viewLifecycleOwner) { + dialogManager.dismissDialog() + it?.let { + if (it.isNotEmpty()) { + AVRoomActivity.start(context, it.toLong()) + } + } + } + homeViewModel.giftServiceLiveData.observe(viewLifecycleOwner) { rvDelegate.loadData(it) } + mBinding.rvGiftService.setOnTouchListener { _, _ -> true } disposable = Observable.intervalRange(0, Int.MAX_VALUE.toLong(), 0, 5, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .filter { rvDelegate.adapter.itemCount > 0 && isResumed } diff --git a/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar0.png b/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar0.png new file mode 100644 index 000000000..1f0d94071 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar0.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar1.png b/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar1.png new file mode 100644 index 000000000..8105057ad Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar1.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar2.png b/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar2.png new file mode 100644 index 000000000..ddee6250d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_home_pick_avatar2.png differ diff --git a/app/src/main/res/drawable/shape_circle_82fbff_small.xml b/app/src/main/res/drawable/shape_circle_82fbff_small.xml new file mode 100644 index 000000000..15156ead8 --- /dev/null +++ b/app/src/main/res/drawable/shape_circle_82fbff_small.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_recommend.xml b/app/src/main/res/layout/fragment_recommend.xml index 39842af9e..13ab51412 100644 --- a/app/src/main/res/layout/fragment_recommend.xml +++ b/app/src/main/res/layout/fragment_recommend.xml @@ -125,6 +125,48 @@ app:layout_constraintStart_toStartOf="@id/iv_resource_1" app:layout_constraintWidth_percent="0.65" /> + + + + + + + + + + + + ? = launchRequest { api.getCommonRoom(tabId, pageNum, pageSize) @@ -131,7 +136,7 @@ object HomeModel : BaseModel() { } - suspend fun getHomeTag(): List? = + suspend fun getHomeTag(): MutableList? = launchRequest { api.getHomeTag() } @@ -300,6 +305,14 @@ object HomeModel : BaseModel() { @GET("home/pickResource") suspend fun getResourceJumpInfo(@Query("id") id: Int): ServiceResult + /** + * 首页资源位跳转 + * + * @return + */ + @GET("home/chat/pick") + suspend fun getHomeChatPick(): ServiceResult + /** * 首页热门房间 * @@ -329,7 +342,7 @@ object HomeModel : BaseModel() { * @return */ @GET("home/tagV2") - suspend fun getHomeTag(): ServiceResult> + suspend fun getHomeTag(): ServiceResult> /** * 首页派对 Tag List diff --git a/mob.gradle b/mob.gradle index fc5ca7062..28cdbd8f2 100644 --- a/mob.gradle +++ b/mob.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.mob.sdk' MobSDK { - appKey "32075fcbba527" - appSecret "9db6e523d459ebd5e102ff2c261f640a" + appKey "37a065a03f499" + appSecret "6e211fcc6f586b9a9e01f02aeaecb757" ShareSDK { //平台配置信息