diff --git a/app/src/main/java/com/chwl/app/MainActivity.java b/app/src/main/java/com/chwl/app/MainActivity.java index f0376c4a7..51cb6c87c 100644 --- a/app/src/main/java/com/chwl/app/MainActivity.java +++ b/app/src/main/java/com/chwl/app/MainActivity.java @@ -91,7 +91,6 @@ import com.chwl.core.channel_page.model.ChannelPageModel; import com.chwl.core.community.event.SquareTaskEvent; import com.chwl.core.community.event.UnReadCountEvent; import com.chwl.core.home.bean.MainTabType; -import com.chwl.core.home.event.RefreshHomeDataEvent; import com.chwl.core.home.event.VisitorUnreadCountEvent; import com.chwl.core.home.model.GameHomeModel; import com.chwl.core.home.model.HomeModel; @@ -126,10 +125,6 @@ import org.jetbrains.annotations.NotNull; import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.List; -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; /** * @author Administrator @@ -252,11 +247,6 @@ public class MainActivity extends BaseMvpActivity EventBus.getDefault().register(this); otherModelInit(); - Observable.interval(60, TimeUnit.SECONDS) - .compose(bindToLifecycle()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> EventBus.getDefault().post(new RefreshHomeDataEvent())); - homeViewModel.getAnchorInfoLiveData().observe(this, anchorInfo -> { if (anchorInfo != null) { anchorCardView.setAnchorInfo(anchorInfo); diff --git a/app/src/main/java/com/chwl/app/home/HomeMeViewModel.kt b/app/src/main/java/com/chwl/app/home/HomeMeViewModel.kt new file mode 100644 index 000000000..5010a4d12 --- /dev/null +++ b/app/src/main/java/com/chwl/app/home/HomeMeViewModel.kt @@ -0,0 +1,22 @@ +package com.chwl.app.home + +import androidx.lifecycle.MutableLiveData +import com.chwl.app.base.BaseViewModel +import com.chwl.core.auth.AuthModel +import com.chwl.core.room.bean.RoomInfo +import com.chwl.core.room.model.AvRoomModel + +class HomeMeViewModel : BaseViewModel() { + + val roomInfoLiveData = MutableLiveData() + + fun getMyRoomInfo() { + addDisposable( + AvRoomModel.get().requestRoomInfo(AuthModel.get().currentUid.toString()) + .subscribe({ + roomInfoLiveData.postValue(it) + }, { + }) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/AccompanyFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/AccompanyFragment.kt deleted file mode 100644 index 4b12ac262..000000000 --- a/app/src/main/java/com/chwl/app/home/fragment/AccompanyFragment.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.chwl.app.home.fragment - -import android.os.Bundle -import android.view.View -import androidx.fragment.app.activityViewModels -import androidx.recyclerview.widget.LinearLayoutManager -import com.chad.library.adapter.base.BaseQuickAdapter -import com.chwl.app.application.IReportConstants -import com.chwl.app.application.ReportManager -import com.chwl.app.avroom.activity.AVRoomActivity -import com.chwl.app.avroom.dialog.CreateRoomDialog -import com.chwl.app.base.BaseActivity -import com.chwl.app.base.BaseViewBindingFragment -import com.chwl.app.common.EmptyViewHelper -import com.chwl.app.databinding.FragmentAccompanyBinding -import com.chwl.app.home.HomeViewModel -import com.chwl.app.home.adapter.HomeChatAdapter -import com.chwl.app.home.adapter.RoomNewFriendsAdapter -import com.chwl.app.home.helper.OpenRoomHelper -import com.chwl.app.ui.utils.RVDelegate -import com.chwl.core.home.bean.HomeRoomInfo -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.chwl.core.room.event.RoomShieldEvent -import com.chwl.core.user.UserModel -import com.chwl.core.user.bean.UserInfo -import com.chwl.core.user.event.LoginUserInfoUpdateEvent -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -/** - 首页 - */ -class AccompanyFragment : BaseViewBindingFragment() { - private lateinit var charAdapter: HomeChatAdapter - private lateinit var roomNewFriendsAdapter: RoomNewFriendsAdapter - - private val homeViewModel: HomeViewModel by activityViewModels() - - private lateinit var rvDelegate: RVDelegate - - //是否需要刷新接口进行屏蔽房间操作 - private var isShield = false - - override fun init() { - initRefreshView() - initChatTab() - initHotRoomTab() - showGameGuide() - - binding.ivGameGuide.setOnClickListener { - //首页_扩列聊天-创建游戏房 - ReportManager.get().reportEvent( - IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf( - Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.NINE), - Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE) - ) - ) - CreateRoomDialog().apply { setGameVisible() }.show(context) - } - } - - private fun initRefreshView() { - binding.refreshLayout.setOnRefreshListener { - binding.refreshLayout.finishRefresh() - EventBus.getDefault().post(RefreshHomeDataEvent()) - } - binding.refreshLayout.isEnableLoadmore = false - binding.refreshLayout.isEnableOverScrollBounce = false - } - - private fun initChatTab() { - charAdapter = HomeChatAdapter() - charAdapter.onItemClickListener = - BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int -> - val homePlayInfo: HomeRoomInfo? = charAdapter.getItem(position) - if (homePlayInfo != null) { - //首页_扩列聊天-用户房间 - ReportManager.get().reportEvent( - IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf( - Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.SEVEN), - Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE) - ) - ) - AVRoomActivity.startForFromType( - mContext, - homePlayInfo.uid, - AVRoomActivity.FROM_TYPE_RECOMMEND - ) - } - } - binding.mRecyclerChat.adapter = charAdapter - binding.mLiCreateRoom.setOnClickListener { - //首页_扩列聊天-创建普通房 - ReportManager.get().reportEvent( - IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf( - Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.EIGHT), - Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE) - ) - ) - OpenRoomHelper.openRoom(context as BaseActivity?) - } - homeViewModel.homePlayInfoData.observe(this) { - it?.let { - if (it.isNotEmpty()) { - binding.mLiCreateRoom.visibility = View.GONE - binding.nsHost.visibility = View.VISIBLE - charAdapter.setNewData(it) - } else { - binding.mLiCreateRoom.visibility = View.VISIBLE - binding.nsHost.visibility = View.GONE - } - } - } - } - - private fun initHotRoomTab() { - roomNewFriendsAdapter = RoomNewFriendsAdapter() - rvDelegate = RVDelegate.Builder() - .setAdapter(roomNewFriendsAdapter) - .setRecyclerView(binding.recyclerView) - .setEmptyView(EmptyViewHelper.createEmptyTextView(context, "暂无新朋友")) - .setLayoutManager(LinearLayoutManager(mContext)) - .build() - homeViewModel.newFriendLiveData.observe(this) { - rvDelegate.loadData(it) - } - } - - override fun onLazyLoad() { - super.onLazyLoad() - loadData() - } - - override fun onResume() { - super.onResume() - if (isShield) { - loadData() - isShield = false - } - } - - private fun loadData() { - homeViewModel.getHomePlayV2() - homeViewModel.getNewFriendList() - } - - private fun showGameGuide(){ - val userInfo = UserModel.get().cacheLoginUserInfo - if (userInfo?.isHasPermitRoom == true) { - binding.ivGameGuide.visibility = View.GONE - } else { - binding.ivGameGuide.visibility = View.GONE - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onLoginUserInfoUpdateEvent(event: LoginUserInfoUpdateEvent?) { - showGameGuide() - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { - if (isResumed) { - loadData() - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - } - - override fun onDestroyView() { - super.onDestroyView() - EventBus.getDefault().unregister(this) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRoomShieldEvent(event: RoomShieldEvent?) { - isShield = true - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt index 6a373ce78..32ba507cb 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt @@ -43,7 +43,7 @@ class ContactsListFragment : BaseViewBindingFragment private val viewModel: HomeMessageViewModel by activityViewModels() private val publicChatAdapter = PublicChatLaneAdapter(ArrayList()) - private val stateHelper = FragmentVisibleStateHelper(this) { + private val stateHelper = FragmentVisibleStateHelper(this).start { onVisibleChanged(it) } companion object { diff --git a/app/src/main/java/com/chwl/app/home/fragment/HomeFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/HomeFragment.kt index 425c2a5ff..152f26e3f 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/HomeFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/HomeFragment.kt @@ -8,7 +8,6 @@ import com.chwl.app.R import com.chwl.app.application.IReportConstants import com.chwl.app.application.ReportManager import com.chwl.app.avroom.adapter.CommonVPAdapter -import com.chwl.app.avroom.adapter.RoomMessageIndicatorAdapter import com.chwl.app.base.BaseViewBindingFragment import com.chwl.app.databinding.FragmentHomeBinding import com.chwl.app.home.HomeViewModel diff --git a/app/src/main/java/com/chwl/app/home/fragment/HomeRecommendFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/HomeRecommendFragment.kt index 840253cfe..6eb6bf184 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/HomeRecommendFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/HomeRecommendFragment.kt @@ -2,10 +2,10 @@ package com.chwl.app.home.fragment import android.view.View import android.widget.LinearLayout -import android.widget.TextView import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener import androidx.viewpager2.adapter.FragmentStateAdapter import com.chwl.app.R import com.chwl.app.application.IReportConstants @@ -16,6 +16,7 @@ import com.chwl.app.databinding.FragmentHomeRecommendBinding import com.chwl.app.home.HomeViewModel import com.chwl.app.home.adapter.HomeBannerAdapter import com.chwl.app.home.dialog.RecommendRoomDialog +import com.chwl.app.support.FragmentVisibleStateHelper import com.chwl.app.ui.search.SearchActivity import com.chwl.app.ui.user.adapter.HomeRecommendIndicatorAdapter import com.chwl.app.ui.utils.load @@ -27,22 +28,15 @@ import com.chwl.app.utils.CommonJumpHelper import com.chwl.core.DemoCache import com.chwl.core.home.bean.BannerInfo import com.chwl.core.home.bean.HomeTagInfo -import com.chwl.core.home.event.RefreshHomeDataEvent import com.chwl.library.utils.ListUtils import com.example.lib_utils.ktx.getDrawableById import com.zhpan.bannerview.BannerViewPager -import org.greenrobot.eventbus.EventBus /** 首页 */ class HomeRecommendFragment : BaseViewBindingFragment(), - View.OnClickListener, - HomeRecommendIndicatorAdapter.OnItemSelectListener { - - private val TAB_ID_RECOMMEND = Int.MAX_VALUE - 1 - - private val TAB_ID_ACCOMPANY = Int.MAX_VALUE - 2 + View.OnClickListener { private val tabList = mutableListOf() private val homeViewModel: HomeViewModel by activityViewModels() @@ -64,7 +58,9 @@ class HomeRecommendFragment : BaseViewBindingFragment { - RecommendFragment() - } - - TAB_ID_ACCOMPANY.toLong() -> { - AccompanyFragment() - } - - else -> { - return HomeTabFragment.newInstance(itemId.toInt()) - } + return HomeTabFragment.newInstance(itemId.toInt()).apply { + autoRefreshOnVisible = true } } @@ -253,6 +239,4 @@ class HomeRecommendFragment : BaseViewBindingFragment() { + + private lateinit var roomHotAdapter: HomeHotAdapter + + private lateinit var rvDelegate: RVDelegate + + private val homeViewModel: HomeViewModel by viewModels() + + private var pageNum = 1 + private var tabId: Int? = null + companion object { + fun newInstance(tabId: Int): HomeRoomCollectListFragment { + return HomeRoomCollectListFragment().apply { + arguments = Bundle().apply { + putInt("tabId", tabId) + } + } + } + } + override fun init() { + tabId = arguments?.getInt("tabId") + initHotRoomTab() + } + + private fun initHotRoomTab() { + roomHotAdapter = HomeHotAdapter() + roomHotAdapter.onItemClickListener = + BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int -> + val homePlayInfo: HomeRoomInfo? = roomHotAdapter.getItem(position) + if (homePlayInfo != null) { + //首页_房间派对 + AVRoomActivity.start(mContext, homePlayInfo.uid) + } + } + rvDelegate = RVDelegate.Builder() + .setPageSize(20) + .setAdapter(roomHotAdapter) + .setRecyclerView(binding.mRecyclerRoom) + .setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, getString(R.string.data_empty))) + .setLayoutManager(LinearLayoutManager(mContext)) + .build() + + roomHotAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.mRecyclerRoom) + + homeViewModel.tabHomeLiveData.observe(this) { + rvDelegate.loadData(it) + } + } + + override fun onLazyLoad() { + super.onLazyLoad() + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + if (isRefresh) { + pageNum = 1 + } else { + pageNum++ + } + homeViewModel.getHomeTabName(tabId ?: 0, pageNum) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/HomeRoomHistoryListFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/HomeRoomHistoryListFragment.kt new file mode 100644 index 000000000..0e85348bd --- /dev/null +++ b/app/src/main/java/com/chwl/app/home/fragment/HomeRoomHistoryListFragment.kt @@ -0,0 +1,85 @@ +package com.chwl.app.home.fragment + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chwl.app.R +import com.chwl.app.base.BaseViewBindingFragment +import com.chwl.app.home.HomeViewModel +import com.chwl.app.home.adapter.HomeHotAdapter +import com.chwl.app.ui.utils.RVDelegate +import com.chwl.core.home.bean.HomeRoomInfo +import com.chwl.app.avroom.activity.AVRoomActivity +import com.chwl.app.common.EmptyViewHelper +import com.chwl.app.databinding.HomeTabFragmentBinding + +/** + * 最近访问记录 + */ +class HomeRoomHistoryListFragment : BaseViewBindingFragment() { + + private lateinit var roomHotAdapter: HomeHotAdapter + + private lateinit var rvDelegate: RVDelegate + + private val homeViewModel: HomeViewModel by viewModels() + + private var pageNum = 1 + private var tabId: Int? = null + companion object { + fun newInstance(tabId: Int): HomeRoomHistoryListFragment { + return HomeRoomHistoryListFragment().apply { + arguments = Bundle().apply { + putInt("tabId", tabId) + } + } + } + } + override fun init() { + tabId = arguments?.getInt("tabId") + initHotRoomTab() + } + + private fun initHotRoomTab() { + roomHotAdapter = HomeHotAdapter() + roomHotAdapter.onItemClickListener = + BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int -> + val homePlayInfo: HomeRoomInfo? = roomHotAdapter.getItem(position) + if (homePlayInfo != null) { + //首页_房间派对 + AVRoomActivity.start(mContext, homePlayInfo.uid) + } + } + rvDelegate = RVDelegate.Builder() + .setPageSize(20) + .setAdapter(roomHotAdapter) + .setRecyclerView(binding.mRecyclerRoom) + .setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, getString(R.string.data_empty))) + .setLayoutManager(LinearLayoutManager(mContext)) + .build() + + roomHotAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.mRecyclerRoom) + + homeViewModel.tabHomeLiveData.observe(this) { + rvDelegate.loadData(it) + } + } + + override fun onLazyLoad() { + super.onLazyLoad() + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + if (isRefresh) { + pageNum = 1 + } else { + pageNum++ + } + homeViewModel.getHomeTabName(tabId ?: 0, pageNum) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/HomeTabFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/HomeTabFragment.kt index 9e67bb465..efc43291d 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/HomeTabFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/HomeTabFragment.kt @@ -3,9 +3,8 @@ package com.chwl.app.home.fragment import android.os.Bundle import android.view.View import androidx.fragment.app.viewModels -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.chad.library.adapter.base.BaseQuickAdapter import com.chwl.app.R import com.chwl.app.base.BaseViewBindingFragment @@ -13,21 +12,16 @@ import com.chwl.app.home.HomeViewModel import com.chwl.app.home.adapter.HomeHotAdapter import com.chwl.app.ui.utils.RVDelegate import com.chwl.core.home.bean.HomeRoomInfo -import com.chwl.app.application.IReportConstants -import com.chwl.app.application.ReportManager import com.chwl.app.avroom.activity.AVRoomActivity import com.chwl.app.common.EmptyViewHelper import com.chwl.app.databinding.HomeTabFragmentBinding -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.chwl.core.room.event.RoomShieldEvent -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode +import com.chwl.app.support.FragmentVisibleStateHelper /** - * Peko首页 + * 首页-房间列表 */ -class HomeTabFragment : BaseViewBindingFragment() { +class HomeTabFragment : BaseViewBindingFragment(), + SwipeRefreshLayout.OnRefreshListener { private lateinit var roomHotAdapter: HomeHotAdapter @@ -35,8 +29,7 @@ class HomeTabFragment : BaseViewBindingFragment() { private val homeViewModel: HomeViewModel by viewModels() - //是否需要刷新接口进行屏蔽房间操作 - private var isShield = false + var autoRefreshOnVisible = false private var pageNum = 1 private var tabId: Int? = null @@ -52,6 +45,15 @@ class HomeTabFragment : BaseViewBindingFragment() { override fun init() { tabId = arguments?.getInt("tabId") initHotRoomTab() + if (autoRefreshOnVisible) { + FragmentVisibleStateHelper(this).apply { + start { + if (it && !isFirstVisible) { + loadData(true) + } + } + } + } } private fun initHotRoomTab() { @@ -86,14 +88,6 @@ class HomeTabFragment : BaseViewBindingFragment() { loadData(true) } - override fun onResume() { - super.onResume() - if (isShield) { - loadData(true) - isShield = false - } - } - private fun loadData(isRefresh: Boolean) { if (isRefresh) { pageNum = 1 @@ -103,26 +97,9 @@ class HomeTabFragment : BaseViewBindingFragment() { homeViewModel.getHomeTabName(tabId ?: 0, pageNum) } - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { + override fun onRefresh() { if (isResumed) { loadData(true) } } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - } - - override fun onDestroyView() { - super.onDestroyView() - EventBus.getDefault().unregister(this) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRoomShieldEvent(event: RoomShieldEvent?) { - isShield = true - } - } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/HomeTabHomeFragment.java b/app/src/main/java/com/chwl/app/home/fragment/HomeTabHomeFragment.java deleted file mode 100644 index c9ffd9e26..000000000 --- a/app/src/main/java/com/chwl/app/home/fragment/HomeTabHomeFragment.java +++ /dev/null @@ -1,220 +0,0 @@ -package com.chwl.app.home.fragment; - -import android.annotation.SuppressLint; -import android.os.Bundle; -import android.view.ViewGroup; - -import androidx.annotation.Nullable; - -import com.trello.rxlifecycle3.android.FragmentEvent; -import com.chwl.app.R; -import com.chwl.app.application.IReportConstants; -import com.chwl.app.application.ReportManager; -import com.chwl.app.avroom.activity.AVRoomActivity; -import com.chwl.app.base.BaseFragment; -import com.chwl.app.home.adapter.HomeTopAdapter; -import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil; -import com.chwl.core.home.bean.HomeTabMapInfo; -import com.chwl.core.home.event.RefreshHomeDataEvent; -import com.chwl.core.home.model.GameHomeModel; -import com.chwl.core.room.event.RoomShieldEvent; -import com.chwl.core.utils.net.RxHelper; -import com.chwl.library.utils.ListUtils; -import com.zhpan.bannerview.BannerViewPager; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Random; - -/** - * - */ -public class HomeTabHomeFragment extends BaseFragment { - private static final Comparator comp = (o1, o2) -> { - int seq = o1.getSeq() - o2.getSeq(); - return Integer.compare(seq, 0); - }; - - private BannerViewPager mBanner; - - //是否需要刷新接口进行屏蔽房间操作 - private boolean isShield = false; - - public static HomeTabHomeFragment newInstance() { - HomeTabHomeFragment fragment = new HomeTabHomeFragment(); - return fragment; - } - - @Override - public int getRootLayoutId() { - return R.layout.fragment_home_room_tab; - } - - @Override - public void onFindViews() { - super.onFindViews(); - mBanner = mView.findViewById(R.id.mBanner); - } - - /** - * 请求数据 - */ - @SuppressLint("CheckResult") - private void getData() { - GameHomeModel.get() - .getHomeTabHome() - .compose(RxHelper.handleSchedulers()) - .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)) - .subscribe((serviceResult, throwable) -> { - if (throwable == null) { - if (ListUtils.isListEmpty(serviceResult)) { - return; - } - - List roomsList = new ArrayList<>(serviceResult);//未处理的数 - List randomList = new ArrayList<>();//不是置顶的 - List finalList = new ArrayList<>();//最终的6条数据 - - for (int i = 0; i < roomsList.size(); i++) { - roomsList.get(i).setItemType(HomeTabMapInfo.TYPE_NORMAL);//对原始数据设置type - } - for (int i = 0; i < roomsList.size(); i++) { - if (roomsList.get(i).isIsTop()) { - finalList.add(roomsList.get(i)); - } else { - randomList.add(roomsList.get(i)); - } - } - sortSeqRoom(finalList); - refreshRoomData(finalList, randomList); - - } - }); - } - - /** - * 刷新数据 - */ - private void refreshRoomData(List finalList, List randomList) { - List finalList1 = new ArrayList<>(finalList);//最终的6条数据 - List randomList1 = new ArrayList<>(randomList);//不是置顶的 - mBanner.setAdapter(new HomeTopAdapter()); - mBanner.post(() -> { - int width = UIUtil.getScreenWidth(mContext) - (UIUtil.dip2px(mContext, 10) * 3); - int revealWidth = width / 3; - ViewGroup.LayoutParams bannerLayoutParams = mBanner.getLayoutParams(); - bannerLayoutParams.height = revealWidth + UIUtil.dip2px(mContext, 32); - mBanner.setLayoutParams(bannerLayoutParams); - setupBanner( - revealWidth, - revealWidth, - getConvertData(finalList1, randomList1) - ); - }); - } - - private void setupBanner( - int leftRevealWidth, - int rightRevealWidth, - List list - ) { - mBanner.setPageMargin(UIUtil.dip2px(mContext, 10)) - .setScrollDuration(800) - .setRevealWidth(leftRevealWidth, rightRevealWidth) - .setOnPageClickListener((clickedView, position) -> { - //首页_热门房间 - HashMap map = new HashMap<>(3); - map.put(IReportConstants.HOMEPAGE_TYPE, IReportConstants.FIVE); - map.put(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE); - ReportManager.get().reportEvent(IReportConstants.MODULE_HOMEPAGE_CLICK, map); - AVRoomActivity.startForFromType(mContext, list.get(position).getRoomUid(), AVRoomActivity.FROM_TYPE_RECOMMEND); - }) - .create(list); - } - - /** - * 转化房间数组,不足6的加上虚位以待 - * - * @param - * @return - */ - private List getConvertData(List finalList, List randomList) { - List finalList1 = new ArrayList<>(finalList);//最终的6条数据 - List randomList1 = new ArrayList<>(randomList);//不是置顶的 - int ROOM_COUNT = 6;//首页显示6条数据 - randomList1 = randomList(randomList1); - finalList1.addAll(randomList1); - - if (finalList1.size() >= ROOM_COUNT) { - finalList1 = finalList1.subList(0, ROOM_COUNT); - } - return finalList1; - } - - /** - * **************************** 排序 *********************************** - */ - private void sortSeqRoom(List list) { - if (list.size() == 0) { - return; - } - Collections.sort(list, comp); - } - - private List randomList(List sourceList) { - if (sourceList == null || sourceList.size() == 0) { - return sourceList; - } - ArrayList randomList = new ArrayList(sourceList.size()); - do { - int randomIndex = Math.abs(new Random().nextInt(sourceList.size())); - randomList.add(sourceList.remove(randomIndex)); - } while (sourceList.size() > 0); - return randomList; - } - - - @Override - public void initiate() { - getData(); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - EventBus.getDefault().register(this); - } - - @Override - public void onResume() { - super.onResume(); - if(isShield){ - getData(); - isShield = false; - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - EventBus.getDefault().unregister(this); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshHomeDataEvent(RefreshHomeDataEvent event) { - if (isResumed()) getData(); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRoomShieldEvent(RoomShieldEvent event){ - isShield = true; - } - -} diff --git a/app/src/main/java/com/chwl/app/home/fragment/HomeWithMeFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/HomeWithMeFragment.kt index 1fcf524cf..688880702 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/HomeWithMeFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/HomeWithMeFragment.kt @@ -1,53 +1,47 @@ package com.chwl.app.home.fragment -import android.widget.LinearLayout -import android.widget.TextView -import androidx.fragment.app.Fragment +import androidx.core.view.isGone +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels -import androidx.viewpager2.adapter.FragmentStateAdapter +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.chwl.app.R +import com.chwl.app.avroom.adapter.CommonVPAdapter import com.chwl.app.base.BaseViewBindingFragment import com.chwl.app.databinding.HomeMeFragmentBinding -import com.chwl.app.home.HomeViewModel +import com.chwl.app.home.HomeMeViewModel import com.chwl.app.home.helper.OpenRoomHelper +import com.chwl.app.support.FragmentVisibleStateHelper import com.chwl.app.ui.user.adapter.HomeRecommendIndicatorAdapter +import com.chwl.app.ui.utils.loadAvatar +import com.chwl.app.ui.utils.loadImage import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator -import com.chwl.core.home.bean.HomeTagInfo -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.example.lib_utils.ktx.getDrawableById +import com.chwl.core.room.bean.RoomInfo import com.example.lib_utils.ktx.singleClick -import org.greenrobot.eventbus.EventBus /** -首页 +首页-我的 */ -class HomeWithMeFragment : BaseViewBindingFragment(), - HomeRecommendIndicatorAdapter.OnItemSelectListener { +class HomeWithMeFragment : BaseViewBindingFragment() { - private val TAB_ID_RECOMMEND = Int.MAX_VALUE - 1 - - private val TAB_ID_ACCOMPANY = Int.MAX_VALUE - 2 - - private val tabList = mutableListOf() - private val homeViewModel: HomeViewModel by activityViewModels() + private val viewModel: HomeMeViewModel by activityViewModels() override fun init() { initListener() initTab() - homeViewModel.homeTagLiveData.observe(this) { - loadTabList(transformTabList(it)) + initObserve() + FragmentVisibleStateHelper(this).start { + if (it) { + viewModel.getMyRoomInfo() + } } - homeViewModel.getHomeTagInfo() } private fun initListener() { binding.refreshLayout.setOnRefreshListener { it.finishRefresh() - EventBus.getDefault().post(RefreshHomeDataEvent()) - homeViewModel.getBannerInfo() - if (binding.viewPager.adapter?.itemCount == 0) { - homeViewModel.getHomeTagInfo() + childFragmentManager.fragments.forEach { + (it as? SwipeRefreshLayout.OnRefreshListener)?.onRefresh() } } binding.refreshLayout.isEnableLoadmore = false @@ -58,86 +52,59 @@ class HomeWithMeFragment : BaseViewBindingFragment(), } private fun initTab() { - binding.viewPager.adapter = - object : FragmentStateAdapter(childFragmentManager, lifecycle) { - override fun getItemId(position: Int): Long { - return tabList[position].id.toLong() - } - - override fun containsItem(itemId: Long): Boolean { - return tabList.firstOrNull { it.id.toLong() == itemId } != null - } - - override fun createFragment(position: Int): Fragment { - val itemId = getItemId(position) - return when (itemId) { - TAB_ID_RECOMMEND.toLong() -> { - RecommendFragment() - } - - TAB_ID_ACCOMPANY.toLong() -> { - AccompanyFragment() - } - - else -> { - return HomeTabFragment.newInstance(itemId.toInt()) - } - } - } - - override fun getItemCount(): Int { - return tabList.size - } - } - ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager) - } - - private fun resetTabIndicator(list: List) { + val tabList = listOf(getString(R.string.lately), getString(R.string.collect)) + val fragmentList = listOf(HomeRoomHistoryListFragment(), HomeRoomCollectListFragment()) val commonNavigator = CommonNavigator(context) - if (list.size <= 4) { - commonNavigator.isAdjustMode = true - } val magicIndicatorAdapter = HomeRecommendIndicatorAdapter( context, - list + tabList ) magicIndicatorAdapter.setOnItemSelectListener { position, _ -> binding.viewPager.currentItem = position } commonNavigator.adapter = magicIndicatorAdapter binding.magicIndicator.navigator = commonNavigator - val titleContainer: LinearLayout = commonNavigator.titleContainer // must after setNavigator - titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE - titleContainer.dividerPadding = resources.getDimensionPixelOffset(R.dimen.dp_15) - titleContainer.dividerDrawable = getDrawableById(R.drawable.home_recommend_tab_splitter) binding.magicIndicator.onPageSelected(binding.viewPager.currentItem) + binding.viewPager.offscreenPageLimit = fragmentList.size + binding.viewPager.adapter = CommonVPAdapter( + childFragmentManager, + lifecycle, + fragmentList + ) + ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager) } - private fun transformTabList(list: List): List { - return list - } - - private fun loadTabList(list: List) { - // 预防脏数据导致fragment复用问题 - val newList = list.distinctBy { - it.id + private fun initObserve() { + viewModel.roomInfoLiveData.observe(this) { + updateRoomInfo(it) } - val currentListId = tabList.joinToString { it.id.toString() } - val newListId = newList.joinToString { it.id.toString() } - if (currentListId == newListId) { - return + } + + private fun updateRoomInfo(roomInfo: RoomInfo?) { + binding.tvRoomName.text = roomInfo?.title + binding.tvRoomTopic.text = roomInfo?.roomDesc + binding.ivRoomCover.loadImage(roomInfo?.backPic ?: "") + binding.tvOnlineNumber.text = roomInfo?.onlineNum?.toString() ?: "0" + loadRoomUsers(null) + } + + private fun loadRoomUsers(list: List?) { + val avatarViewList = arrayOf( + binding.ivRoomUser0, + binding.ivRoomUser1, + binding.ivRoomUser2, + binding.ivRoomUser3, + binding.ivRoomUser4 + ) + avatarViewList.forEachIndexed { index, imageView -> + val item = list?.getOrNull(index) + if (item == null) { + imageView.setImageDrawable(null) + imageView.isGone = true + } else { + imageView.loadAvatar(item) + imageView.isVisible = true + } } - tabList.clear() - tabList.addAll(newList) - binding.viewPager.adapter?.notifyDataSetChanged() - resetTabIndicator(tabList.map { it.name }) - } - - override fun onDestroyView() { - super.onDestroyView() - tabList.clear() - } - - override fun onItemSelect(position: Int, view: TextView?) { } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt index 14c677bfa..e946e7043 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt @@ -136,10 +136,9 @@ class MeFragment : BaseFragment(), View.OnClickListener { loadVipInfo(it) } - FragmentVisibleStateHelper(this) { + FragmentVisibleStateHelper(this).start { onVisibleChanged(it) } - } private fun setCenterData(list: List?) { diff --git a/app/src/main/java/com/chwl/app/home/fragment/PartyFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/PartyFragment.kt deleted file mode 100644 index 7824c96bf..000000000 --- a/app/src/main/java/com/chwl/app/home/fragment/PartyFragment.kt +++ /dev/null @@ -1,144 +0,0 @@ -package com.chwl.app.home.fragment - -import android.os.Bundle -import android.view.Gravity -import android.widget.TextView -import androidx.databinding.DataBindingUtil -import androidx.fragment.app.Fragment -import androidx.fragment.app.activityViewModels -import com.coorchice.library.utils.LogUtils -import com.netease.nim.uikit.common.util.sys.ScreenUtil -import com.chwl.app.R -import com.chwl.app.avroom.adapter.CommonVPAdapter -import com.chwl.app.avroom.adapter.RoomVPAdapter -import com.chwl.app.base.BaseFragment -import com.chwl.app.databinding.FragmentPartyBinding -import com.chwl.app.home.HomeViewModel -import com.chwl.app.home.adapter.PartyMagicIndicatorAdapter -import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper -import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator -import com.chwl.core.home.bean.HomeTagInfo -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.chwl.library.utils.ResUtil -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -/** - 首页 - */ -class PartyFragment : BaseFragment(), PartyMagicIndicatorAdapter.OnItemSelectListener { - private lateinit var mBinding: FragmentPartyBinding - private val mFragments: ArrayList = ArrayList() - private val mTabInfoList: ArrayList = ArrayList() - private val homeViewModel: HomeViewModel by activityViewModels() - private var currentIndex = 1 - - companion object { - fun newInstance(): PartyFragment { - val args = Bundle() - val fragment = PartyFragment() - fragment.arguments = args - return fragment - } - } - - override fun getRootLayoutId(): Int { - return R.layout.fragment_party - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - } - - override fun onDestroy() { - super.onDestroy() - EventBus.getDefault().unregister(this) - } - - override fun onFindViews() { - mBinding = DataBindingUtil.bind(mView)!! - } - - override fun initiate() { - homeViewModel.tagLiveData.observe(this) { - it?.let { - onGetHomeTagSuccess(it) - } - } - } - - override fun onResume() { - super.onResume() - homeViewModel.getTagInfo() - } - - private fun onGetHomeTagSuccess(info: List) { - var changed = false - val oldTabInfoList: List = ArrayList(mTabInfoList) - for (tagInfo in info) { - if (!oldTabInfoList.contains(tagInfo.name)) { - changed = true - break - } - } - //只有HomeTagInfo发生改变才刷新数据 - if (changed) { - LogUtils.e("$changed:oldTabInfoList") - mTabInfoList.clear() - mFragments.clear() - for (i in info.indices) { - //过滤对象是空和没有标签名同时也没有子标签的情况 - var title: CharSequence? - var fragment: Fragment? - var name = info[i].name - if (name != null) { - name = name.trim { it <= ' ' } - } - title = name - mTabInfoList.add(title) - val tabId: Int = info[i].id - fragment = when (title) { - ResUtil.getString(R.string.home_fragment_partyfragment_01) -> { - RoomLikeFragment.newInstance() - } - ResUtil.getString(R.string.home_fragment_partyfragment_02) -> { - RoomGameFragment.newInstance() - } - else -> { - RoomCommonFragment.newInstance(tabId) - } - } - mFragments.add(fragment) - } - val commonNavigator = CommonNavigator(context) - commonNavigator.setTitleWrapContent(false) - commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F) - commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL) - val magicIndicatorAdapter = PartyMagicIndicatorAdapter(mTabInfoList) - magicIndicatorAdapter.textSize = 14 - magicIndicatorAdapter.setOnItemSelectListener(this) - commonNavigator.adapter = magicIndicatorAdapter - mBinding.magicIndicator.navigator = commonNavigator - mBinding.viewPager.offscreenPageLimit = 2 - mBinding.viewPager.adapter = CommonVPAdapter( - childFragmentManager, lifecycle, - mFragments - ) - ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager) - onItemSelect(currentIndex, null) - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { - if (isResumed) homeViewModel.getTagInfo() - } - - override fun onItemSelect(position: Int, view: TextView?) { - currentIndex = position - mBinding.viewPager.currentItem = currentIndex - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/RecommendFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/RecommendFragment.kt deleted file mode 100644 index 2bdd6f43e..000000000 --- a/app/src/main/java/com/chwl/app/home/fragment/RecommendFragment.kt +++ /dev/null @@ -1,111 +0,0 @@ -package com.chwl.app.home.fragment - -import android.os.Bundle -import android.view.View -import androidx.fragment.app.activityViewModels -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import com.chad.library.adapter.base.BaseQuickAdapter -import com.chwl.app.R -import com.chwl.app.application.IReportConstants -import com.chwl.app.application.ReportManager -import com.chwl.app.avroom.activity.AVRoomActivity -import com.chwl.app.base.BaseViewBindingFragment -import com.chwl.app.common.EmptyViewHelper -import com.chwl.app.databinding.FragmentRecommendBinding -import com.chwl.app.home.HomeViewModel -import com.chwl.app.home.adapter.HomeHotAdapter -import com.chwl.app.ui.utils.RVDelegate -import com.chwl.core.home.bean.HomeRoomInfo -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.chwl.core.room.event.RoomShieldEvent -import com.chwl.library.utils.ResUtil -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -/** - 首页 - */ -class RecommendFragment : BaseViewBindingFragment() { - - private lateinit var roomHotAdapter: HomeHotAdapter - - private lateinit var rvDelegate: RVDelegate - - private val homeViewModel: HomeViewModel by activityViewModels() - - //是否需要刷新接口进行屏蔽房间操作 - private var isShield = false - - override fun init() { - initHotRoomTab() - } - - private fun initHotRoomTab() { - roomHotAdapter = HomeHotAdapter() - roomHotAdapter.onItemClickListener = - BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int -> - val homePlayInfo: HomeRoomInfo? = roomHotAdapter.getItem(position) - if (homePlayInfo != null) { - //首页_房间派对 - ReportManager.get().reportEvent( - IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf( - Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.TEN), - Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE) - ) - ) - AVRoomActivity.start(mContext, homePlayInfo.uid) - } - } - rvDelegate = RVDelegate.Builder() - .setAdapter(roomHotAdapter) - .setRecyclerView(binding.mRecyclerRoom) - .setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, ResUtil.getString(R.string.hot_recommend_empty))) - .setLayoutManager(LinearLayoutManager(mContext, RecyclerView.VERTICAL, false)) - .build() - homeViewModel.homeHotRoomLiveData.observe(this) { - rvDelegate.loadData(it) - } - } - - override fun onLazyLoad() { - super.onLazyLoad() - loadData() - } - - override fun onResume() { - super.onResume() - if (isShield) { - loadData() - isShield = false - } - } - - private fun loadData() { - homeViewModel.getHotRoom() - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { - if (isResumed) { - loadData() - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - } - - override fun onDestroyView() { - super.onDestroyView() - EventBus.getDefault().unregister(this) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRoomShieldEvent(event: RoomShieldEvent?) { - isShield = true - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/RoomCommonFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/RoomCommonFragment.kt deleted file mode 100644 index bc6f31131..000000000 --- a/app/src/main/java/com/chwl/app/home/fragment/RoomCommonFragment.kt +++ /dev/null @@ -1,116 +0,0 @@ -package com.chwl.app.home.fragment - -import android.annotation.SuppressLint -import android.os.Bundle -import androidx.fragment.app.viewModels -import androidx.recyclerview.widget.LinearLayoutManager -import com.chwl.app.R -import com.chwl.app.avroom.activity.AVRoomActivity -import com.chwl.app.base.BaseViewBindingFragment -import com.chwl.app.common.EmptyViewHelper -import com.chwl.app.databinding.FragmentRoomCommonBinding -import com.chwl.app.home.RoomCommonViewModel -import com.chwl.app.home.adapter.RoomCommonAdapter -import com.chwl.app.ui.utils.RVDelegate -import com.chwl.core.home.bean.HomeRoomInfo -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.chwl.core.room.event.RoomShieldEvent -import com.chwl.library.utils.ResUtil -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -class RoomCommonFragment : BaseViewBindingFragment() { - - companion object { - fun newInstance(tabID: Int): RoomCommonFragment { - val args = Bundle() - args.putInt("tab_id", tabID) - val fragment = RoomCommonFragment() - fragment.arguments = args - return fragment - } - } - - private val tabID: Int by lazy { arguments?.getInt("tab_id") ?: -1 } - private var pageNum: Int = 1 - private val pageSize = 20 - - private lateinit var mAdapter: RoomCommonAdapter - private lateinit var rvDelegate: RVDelegate - - private var roomCommonViewModel: RoomCommonViewModel? = null - - //是否需要刷新接口进行屏蔽房间操作 - private var isShield = false - - override fun init() { - val roomCommonViewModel: RoomCommonViewModel by viewModels() - this.roomCommonViewModel = roomCommonViewModel - mAdapter = RoomCommonAdapter() - rvDelegate = RVDelegate.Builder() - .setAdapter(mAdapter) - .setLayoutManager(LinearLayoutManager(mContext)) - .setPageSize(20) - .setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomcommonfragment_01))) - .setRefreshLayout(binding.refreshLayout) - .setRecyclerView(binding.recyclerView) - .build() - mAdapter.setOnItemClickListener { _, _, position -> - mAdapter.getItem(position)?.let { - AVRoomActivity.start(context, it.roomUid) - } - } - mAdapter.setOnLoadMoreListener({ - loadData(false) - }, binding.recyclerView) - binding.refreshLayout.setOnRefreshListener { - loadData(true) - } - roomCommonViewModel.commonRoomLiveData.observe(this) { - rvDelegate.loadData(it) - } - - } - - override fun onLazyLoad() { - super.onLazyLoad() - loadData(true) - } - - override fun onResume() { - super.onResume() - if(isShield){ - loadData(true) - isShield = false - } - } - - @SuppressLint("CheckResult") - fun loadData(isRefresh: Boolean) { - binding.refreshLayout.isRefreshing = isRefresh - pageNum = if (isRefresh) 1 else (pageNum + 1) - roomCommonViewModel?.getCommonRoom(tabID, pageNum, pageSize) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - } - - override fun onDestroyView() { - super.onDestroyView() - EventBus.getDefault().unregister(this) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { - if (isResumed) loadData(true) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRoomShieldEvent(event: RoomShieldEvent?){ - isShield = true - } - -} diff --git a/app/src/main/java/com/chwl/app/home/fragment/RoomGameFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/RoomGameFragment.kt deleted file mode 100644 index 454f7b2be..000000000 --- a/app/src/main/java/com/chwl/app/home/fragment/RoomGameFragment.kt +++ /dev/null @@ -1,126 +0,0 @@ -package com.chwl.app.home.fragment - -import android.os.Bundle -import androidx.fragment.app.viewModels -import androidx.recyclerview.widget.LinearLayoutManager -import com.chwl.app.R -import com.chwl.app.avroom.activity.AVRoomActivity -import com.chwl.app.base.BaseViewBindingFragment -import com.chwl.app.common.EmptyViewHelper -import com.chwl.app.databinding.FragmentRoomGameBinding -import com.chwl.app.home.HomeViewModel -import com.chwl.app.home.adapter.RoomGameAdapter -import com.chwl.app.ui.utils.RVDelegate -import com.chwl.core.home.bean.HomeRoomInfo -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.chwl.core.room.event.RoomShieldEvent -import com.chwl.library.utils.ResUtil -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -class RoomGameFragment : BaseViewBindingFragment() { - - companion object { - fun newInstance(): RoomGameFragment { - val args = Bundle() - val fragment = RoomGameFragment() - fragment.arguments = args - return fragment - } - } - - private lateinit var roomHotAdapter: RoomGameAdapter - private var page = 1 - private lateinit var rvDelegate: RVDelegate - private val pageSize = 20 - private var homeViewModel: HomeViewModel? = null - - //是否需要刷新接口进行屏蔽房间操作 - private var isShield = false - - override fun init() { - val homeViewModel: HomeViewModel by viewModels() - this.homeViewModel = homeViewModel - - roomHotAdapter = RoomGameAdapter() - rvDelegate = RVDelegate.Builder() - .setAdapter(roomHotAdapter) - .setRecyclerView(binding.recyclerView) - .setEmptyView( - EmptyViewHelper.createEmptyTextView( - context, - ResUtil.getString(R.string.home_fragment_roomgamefragment_01) - ) - ) - .setLayoutManager(LinearLayoutManager(mContext)) - .setRefreshLayout(binding.refreshLayout) - .setPageSize(pageSize) - .build() - - roomHotAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) - - binding.refreshLayout.setOnRefreshListener { - loadData(true) - } - homeViewModel.gameRoomLiveData.observe(this) { - rvDelegate.loadData(it) - } - - binding.tvMatch.setOnClickListener { - homeViewModel.fastPickGameRoom() - } - - homeViewModel.pickRoomLiveData.observe(this) { - it?.let { - AVRoomActivity.start(mContext, it.uid) - } - } - } - - override fun onLazyLoad() { - super.onLazyLoad() - loadData(true) - } - - override fun onResume() { - super.onResume() - if(isShield){ - loadData(true) - isShield = false - } - } - - private fun loadData(isRefresh: Boolean) { - - binding.refreshLayout.isRefreshing = isRefresh - - if (isRefresh) { - page = 1 - } else { - page++ - } - homeViewModel?.getGameRoom(page, pageSize) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - } - - override fun onDestroyView() { - super.onDestroyView() - EventBus.getDefault().unregister(this) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { - if (isResumed) loadData(true) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRoomShieldEvent(event: RoomShieldEvent?){ - isShield = true - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/fragment/RoomLikeFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/RoomLikeFragment.kt deleted file mode 100644 index f2b4216c3..000000000 --- a/app/src/main/java/com/chwl/app/home/fragment/RoomLikeFragment.kt +++ /dev/null @@ -1,154 +0,0 @@ -package com.chwl.app.home.fragment - -import android.os.Bundle -import androidx.core.view.isGone -import androidx.core.view.isVisible -import androidx.fragment.app.activityViewModels -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.LinearLayoutManager -import com.google.android.material.appbar.AppBarLayout -import com.chwl.app.R -import com.chwl.app.base.BaseViewBindingFragment -import com.chwl.app.common.EmptyViewHelper -import com.chwl.app.databinding.FragmentRoomLikeBinding -import com.chwl.app.home.HomeViewModel -import com.chwl.app.home.adapter.HomeConcernsAdapter -import com.chwl.app.home.adapter.RoomLikeAdapter -import com.chwl.app.ui.relation.AttentionListActivity -import com.chwl.app.ui.utils.RVDelegate -import com.chwl.core.home.bean.HomeRoomInfo -import com.chwl.core.home.event.RefreshHomeDataEvent -import com.chwl.core.room.event.RoomShieldEvent -import com.chwl.library.utils.ResUtil -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - - -class RoomLikeFragment : BaseViewBindingFragment() { - - companion object { - fun newInstance(): RoomLikeFragment { - val args = Bundle() - val fragment = RoomLikeFragment() - fragment.arguments = args - return fragment - } - } - - private lateinit var concernsAdapter : HomeConcernsAdapter - private lateinit var likeRvDelegate: RVDelegate - - private lateinit var mAdapter : RoomLikeAdapter - private lateinit var rvDelegate: RVDelegate - private var pageNum = 1 - private val pageSize = 20 - private val homeViewModel: HomeViewModel by activityViewModels() - - //是否需要刷新接口进行屏蔽房间操作 - private var isShield = false - - override fun init() { - - binding.appBarLayout.addOnOffsetChangedListener( - AppBarLayout.OnOffsetChangedListener { _, verticalOffset -> - binding.refreshLayout.isEnabled = verticalOffset == 0 - }) - concernsAdapter = HomeConcernsAdapter() - likeRvDelegate = RVDelegate.Builder() - .setAdapter(concernsAdapter) - .setRecyclerView(binding.rvLike) - .setLayoutManager(GridLayoutManager(mContext,5, GridLayoutManager.VERTICAL, false)) - .build() - - homeViewModel.concernsLiveData.observe(this) { - likeRvDelegate.setNewData(it) - val isGone = concernsAdapter.data.isNullOrEmpty() - binding.tvMore.isGone = isGone - binding.tvLike.isGone = isGone - binding.rvLike.isGone = isGone - } - mAdapter = RoomLikeAdapter() - rvDelegate = RVDelegate.Builder() - .setAdapter(mAdapter) - .setLayoutManager(LinearLayoutManager(mContext)) - .setPageSize(pageSize) - .setRefreshLayout(binding.refreshLayout) - .setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomlikefragment_01))) - .setRecyclerView(binding.rvCollect) - .build() - - homeViewModel.collectLiveData.observe(this) { - rvDelegate.loadData(it) - } - - mAdapter.setOnLoadMoreListener({ - loadData(false) - }, binding.rvCollect) - - binding.refreshLayout.setOnRefreshListener { - loadData(true) - } - - homeViewModel.emptyLiveData.observe(this) { - it?.let { - binding.refreshLayout.isRefreshing = false - binding.clEmpty.isVisible = it - binding.coordinatorLayout.isVisible = !it - } - } - - binding.tvGoPlay.setOnClickListener { - (parentFragment as PartyFragment).onItemSelect(1, null) - } - - binding.tvMore.setOnClickListener { - AttentionListActivity.start(context) - } - - } - - override fun onLazyLoad() { - super.onLazyLoad() - loadData(true) - } - - override fun onResume() { - super.onResume() - if(isShield){ - loadData(true) - isShield = false - } - } - - private fun loadData(isRefresh: Boolean) { - if (isRefresh) { - pageNum = 1 - binding.refreshLayout.isRefreshing = true - } else { - pageNum++ - } - homeViewModel.getCollectRoom(pageNum, pageSize) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - } - - override fun onDestroyView() { - super.onDestroyView() - EventBus.getDefault().unregister(this) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { - if (isResumed) loadData(true) - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onRoomShieldEvent(event: RoomShieldEvent?){ - isShield = true - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/star/StarFragment.kt b/app/src/main/java/com/chwl/app/star/StarFragment.kt index 6227b9a85..fb0613995 100644 --- a/app/src/main/java/com/chwl/app/star/StarFragment.kt +++ b/app/src/main/java/com/chwl/app/star/StarFragment.kt @@ -42,7 +42,7 @@ class StarFragment : BaseViewBindingFragment(), MainTabCont private var currentUser: StarUser? = null override fun init() { - FragmentVisibleStateHelper(this) { + FragmentVisibleStateHelper(this).start { onVisibleChanged(it) } initView() diff --git a/app/src/main/java/com/chwl/app/support/FragmentVisibleStateHelper.kt b/app/src/main/java/com/chwl/app/support/FragmentVisibleStateHelper.kt index b8215e1f6..e29699a3c 100644 --- a/app/src/main/java/com/chwl/app/support/FragmentVisibleStateHelper.kt +++ b/app/src/main/java/com/chwl/app/support/FragmentVisibleStateHelper.kt @@ -8,21 +8,23 @@ import androidx.lifecycle.LifecycleOwner import com.chwl.app.base.BaseFragment class FragmentVisibleStateHelper( - private val fragment: Fragment, - private val onVisibleChanged: (Boolean) -> Unit + private val fragment: Fragment ) : LifecycleEventObserver { - + private var onVisibleChanged: ((Boolean) -> Unit)? = null private var isRealVisible = false - + private var visibleCount = 0 val isVisible get() = isRealVisible + val isFirstVisible get() = isVisible && visibleCount == 1 - init { + fun start(onVisibleChanged: (Boolean) -> Unit): FragmentVisibleStateHelper { + this.onVisibleChanged = onVisibleChanged fragment.lifecycle.addObserver(this) (fragment as? BaseFragment)?.let { it.onHiddenChangedListener = Consumer { checkVisibleState() } } + return this } fun checkVisibleState() { @@ -32,12 +34,15 @@ class FragmentVisibleStateHelper( ) if (isRealVisible != newRealVisible) { isRealVisible = newRealVisible + if (newRealVisible) { + visibleCount++ + } onVisibleChanged(newRealVisible) } } private fun onVisibleChanged(isVisible: Boolean) { - onVisibleChanged.invoke(isVisible) + onVisibleChanged?.invoke(isVisible) } override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { diff --git a/app/src/main/res/layout/fragment_accompany.xml b/app/src/main/res/layout/fragment_accompany.xml deleted file mode 100644 index 9fba5fabd..000000000 --- a/app/src/main/res/layout/fragment_accompany.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home_room_tab.xml b/app/src/main/res/layout/fragment_home_room_tab.xml deleted file mode 100644 index b6a6838e6..000000000 --- a/app/src/main/res/layout/fragment_home_room_tab.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/fragment_party.xml b/app/src/main/res/layout/fragment_party.xml deleted file mode 100644 index c48d85706..000000000 --- a/app/src/main/res/layout/fragment_party.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - \ 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 deleted file mode 100644 index a8a0cb693..000000000 --- a/app/src/main/res/layout/fragment_recommend.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_room_common.xml b/app/src/main/res/layout/fragment_room_common.xml deleted file mode 100644 index 8b9ce83f2..000000000 --- a/app/src/main/res/layout/fragment_room_common.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_room_game.xml b/app/src/main/res/layout/fragment_room_game.xml deleted file mode 100644 index 604c77085..000000000 --- a/app/src/main/res/layout/fragment_room_game.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_room_like.xml b/app/src/main/res/layout/fragment_room_like.xml deleted file mode 100644 index 3029025e6..000000000 --- a/app/src/main/res/layout/fragment_room_like.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/home_me_fragment.xml b/app/src/main/res/layout/home_me_fragment.xml index ea89d4fec..615510eda 100644 --- a/app/src/main/res/layout/home_me_fragment.xml +++ b/app/src/main/res/layout/home_me_fragment.xml @@ -104,9 +104,11 @@ android:padding="@dimen/dp_0_5" android:scaleType="centerCrop" android:src="@drawable/default_avatar" + android:visibility="gone" app:shapeAppearance="@style/shape_circle" app:strokeColor="@color/white" - app:strokeWidth="@dimen/dp_1" /> + app:strokeWidth="@dimen/dp_1" + tools:visibility="visible" /> + app:strokeWidth="@dimen/dp_1" + tools:visibility="visible" /> + app:strokeWidth="@dimen/dp_1" + tools:visibility="visible" /> + app:strokeWidth="@dimen/dp_1" + tools:visibility="visible" /> + app:strokeWidth="@dimen/dp_1" + tools:visibility="visible" /> @@ -172,8 +182,7 @@ android:textColor="#797B80" android:textSize="@dimen/dp_13" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - tools:text="266" /> + app:layout_constraintEnd_toEndOf="parent" /> diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 539aedf98..e0528463a 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -5300,4 +5300,5 @@ الهدايا 恭喜你成為「%s」!當前已自動佩戴該等級裝扮,是否保留原有裝扮? 歡迎來到我的房間 + 最近 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f1d7b59d0..b55597eb0 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -5242,5 +5242,5 @@ 送禮 恭喜你成為「%s」!當前已自動佩戴該等級裝扮,是否保留原有裝扮? 歡迎來到我的房間 - + 最近 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bfac4c7fd..52c6e7a96 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5281,6 +5281,7 @@ You cannot join again within 24 hours after leaving Gift 恭喜你成為「%s」!當前已自動佩戴該等級裝扮,是否保留原有裝扮? 歡迎來到我的房間 + 最近 diff --git a/app/src/module_game/java/com/chwl/app/game/ui/home/GameHomeFragment.kt b/app/src/module_game/java/com/chwl/app/game/ui/home/GameHomeFragment.kt index 725667a1d..a1879f810 100644 --- a/app/src/module_game/java/com/chwl/app/game/ui/home/GameHomeFragment.kt +++ b/app/src/module_game/java/com/chwl/app/game/ui/home/GameHomeFragment.kt @@ -35,7 +35,7 @@ class GameHomeFragment : BaseViewBindingFragment(), Mai initView() initEvent() initObserver() - FragmentVisibleStateHelper(this) { + FragmentVisibleStateHelper(this).start { onVisibleChanged(it) } PayModel.get().refreshWalletInfo(true) diff --git a/core/src/main/java/com/chwl/core/home/event/RefreshHomeDataEvent.java b/core/src/main/java/com/chwl/core/home/event/RefreshHomeDataEvent.java deleted file mode 100644 index 3e1431ffa..000000000 --- a/core/src/main/java/com/chwl/core/home/event/RefreshHomeDataEvent.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.chwl.core.home.event; - -public class RefreshHomeDataEvent { -}