diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8f70aa85b..0caf31dc9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -627,10 +627,7 @@ android:name=".home.activity.CollectionRoomActivity" android:label="收藏房间" android:screenOrientation="portrait" /> - + * 管理限制进房 */ private LimitEnterRoomHelper limitEnterRoomHelper; - + private HomeViewModel homeViewModel; @Nullable private Fragment tempFragment = null; private final SparseArray fragmentArray = new SparseArray<>(); @@ -278,7 +280,7 @@ public class MainActivity extends BaseMvpActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); NimMiddleActivity.firstEnter = false; if (savedInstanceState != null) { mCurrentMainPosition = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION); @@ -859,7 +861,7 @@ public class MainActivity extends BaseMvpActivity checkProtocolUpdate(); // 互动消息未读数量 - HomeModel.get().getUnreadCount(AuthModel.get().getCurrentUid()) + HomeModel.INSTANCE.getUnreadCount(AuthModel.get().getCurrentUid()) .compose(bindUntilEvent(ActivityEvent.DESTROY)) .subscribe((integer, throwable) -> { if (integer != null) { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java index a5403f1ac..628f561d1 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java @@ -1505,7 +1505,7 @@ public class HomePartyRoomFragment extends BaseMvpFragment { if (type == 0) {// 幸运许愿池(默认) diff --git a/app/src/main/java/com/yizhuan/erban/base/BaseViewModel.java b/app/src/main/java/com/yizhuan/erban/base/BaseVM.java similarity index 74% rename from app/src/main/java/com/yizhuan/erban/base/BaseViewModel.java rename to app/src/main/java/com/yizhuan/erban/base/BaseVM.java index c80c23a01..31dde55aa 100644 --- a/app/src/main/java/com/yizhuan/erban/base/BaseViewModel.java +++ b/app/src/main/java/com/yizhuan/erban/base/BaseVM.java @@ -4,6 +4,6 @@ package com.yizhuan.erban.base; * Created by huangmeng1 on 2018/5/7. */ -public class BaseViewModel { +public class BaseVM { } diff --git a/app/src/main/java/com/yizhuan/erban/base/BaseViewModel.kt b/app/src/main/java/com/yizhuan/erban/base/BaseViewModel.kt new file mode 100644 index 000000000..f57abc646 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/base/BaseViewModel.kt @@ -0,0 +1,30 @@ +package com.yizhuan.erban.base + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.yizhuan.xchat_android_core.utils.toast +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +open class BaseViewModel : ViewModel() { + + fun safeLaunch( + onError: (e: Throwable) -> Unit = { it.message.toast() }, + onComplete: (() -> Unit)? = null, + block: suspend CoroutineScope.() -> Unit + ) { + viewModelScope.launch { + try { + block() + } catch (e: Throwable) { + e.printStackTrace() + onError(e) + } finally { + onComplete?.invoke() + } + + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/HomeViewModel.kt b/app/src/main/java/com/yizhuan/erban/home/HomeViewModel.kt new file mode 100644 index 000000000..a2874af83 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/HomeViewModel.kt @@ -0,0 +1,36 @@ +package com.yizhuan.erban.home + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.yizhuan.erban.base.BaseViewModel +import com.yizhuan.xchat_android_core.bean.response.ListResult +import com.yizhuan.xchat_android_core.home.bean.BannerInfo +import com.yizhuan.xchat_android_core.home.bean.HomeRoom +import com.yizhuan.xchat_android_core.home.model.HomeModel + +class HomeViewModel : BaseViewModel() { + + private val _bannerLiveData = MutableLiveData>() + val bannerLiveData: LiveData> = _bannerLiveData + + private val _hotRoomLiveData = MutableLiveData>() + val hotRoomLiveData: LiveData> = _hotRoomLiveData + + fun getBannerInfo() { + safeLaunch { + _bannerLiveData.value = HomeModel.getHomeBanner("9") + } + } + + fun getHotRoom(pageNum: Int, pageSize: Int) { + safeLaunch( + onError = { + _hotRoomLiveData.value = ListResult.failed(pageNum) + }, + block = { + val result = HomeModel.getHotRoom(pageNum, pageSize) + _hotRoomLiveData.value = ListResult.success(result, pageNum) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/activity/HomeMoreRoomActivity.java b/app/src/main/java/com/yizhuan/erban/home/activity/HomeMoreRoomActivity.java deleted file mode 100644 index 9051398c1..000000000 --- a/app/src/main/java/com/yizhuan/erban/home/activity/HomeMoreRoomActivity.java +++ /dev/null @@ -1,209 +0,0 @@ -package com.yizhuan.erban.home.activity; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.viewpager.widget.ViewPager; - -import com.netease.nim.uikit.StatusBarUtil; -import com.yizhuan.erban.R; -import com.yizhuan.erban.avroom.activity.AVRoomActivity; -import com.yizhuan.erban.avroom.adapter.RoomContributeListAdapter; -import com.yizhuan.erban.avroom.ktv.KtvMusicManager; -import com.yizhuan.erban.base.BaseMvpActivity; -import com.yizhuan.erban.home.adapter.HomeConcernsAdapter; -import com.yizhuan.erban.home.adapter.MainMagicIndicatorAdapter; -import com.yizhuan.erban.home.fragment.HomeTabMapFragment; -import com.yizhuan.erban.home.helper.OpenRoomHelper; -import com.yizhuan.erban.home.presenter.MainFragmentPresenter; -import com.yizhuan.erban.home.view.IMainFragmentView; -import com.yizhuan.erban.service.DaemonService; -import com.yizhuan.erban.ui.widget.OnPageSelectedListener; -import com.yizhuan.erban.ui.widget.magicindicator.MagicIndicator; -import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper; -import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator; -import com.yizhuan.erban.ui.widget.recyclerview.decoration.VerticalDecoration; -import com.yizhuan.xchat_android_core.home.bean.BannerInfo; -import com.yizhuan.xchat_android_core.home.bean.HomeConcernsInfo; -import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo; -import com.yizhuan.xchat_android_core.home.bean.TagListInfo; -import com.yizhuan.xchat_android_core.manager.AudioEngineManager; -import com.yizhuan.xchat_android_core.room.bean.RoomInfo; -import com.yizhuan.xchat_android_core.statistic.StatisticManager; -import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol; -import com.yizhuan.xchat_android_library.base.factory.CreatePresenter; -import com.yizhuan.xchat_android_library.utils.ListUtils; -import com.yizhuan.xchat_android_library.utils.SizeUtils; - -import java.util.ArrayList; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; - -@CreatePresenter(MainFragmentPresenter.class) -public class HomeMoreRoomActivity extends BaseMvpActivity implements IMainFragmentView, MainMagicIndicatorAdapter.OnItemSelectListener { - - @BindView(R.id.magic_indicator) - MagicIndicator magicIndicator; - @BindView(R.id.view_pager) - ViewPager viewPager; - @BindView(R.id.rv_follow_room) - RecyclerView rvFollowRoom; - private HomeConcernsAdapter mFollowRoomsAdapter; - private List mFragments; - - public static void start(Context context) { - Intent intent = new Intent(context, HomeMoreRoomActivity.class); - context.startActivity(intent); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_home_more_room); - ButterKnife.bind(this); - initWhiteTitleBar("房间"); - initRoomTitleTab(); - initRoomConcern(); - } - - private void initRoomTitleTab() { - getMvpPresenter().getHomeTag(); - } - - private void initRoomConcern() { - mFollowRoomsAdapter = new HomeConcernsAdapter(null, context); - rvFollowRoom.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); - rvFollowRoom.addItemDecoration(new VerticalDecoration(SizeUtils.dp2px(this, 10), false, true)); - mFollowRoomsAdapter.setOnItemClickListener((adapter, view, position) -> { - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_INTO_DBRUK_CLICK, "点击顶部我的房间/关注进入房间"); - if (position == 0) { - OpenRoomHelper.openRoom(this); - return; - } - HomeConcernsInfo homeConcernsInfo = mFollowRoomsAdapter.getItem(position); - if (homeConcernsInfo != null) { - AVRoomActivity.startForFromType(this, homeConcernsInfo.getRoomUid(), - AVRoomActivity.FROM_TYPE_USER, homeConcernsInfo.getName(), String.valueOf(homeConcernsInfo.getFollowedUid())); - } - }); - rvFollowRoom.setAdapter(mFollowRoomsAdapter); - getMvpPresenter().getHomeConcerns(); - } - - @Override - public void onItemSelect(int position, TextView view) { - - if (mFragments == null || mFragments.isEmpty()) { - return; - } - Fragment fragment = mFragments.get(position); - if (fragment == null) { - return; - } - viewPager.setCurrentItem(position); - - } - - - @Override - public void requestOpenRoomResult(int openRoomFailType, Object... arg) { - - } - - @Override - public void showByMarketCheckingStatus(List tagListInfoList) { - - } - - @Override - public void getFollowRoomsSuccess(List list) { - if (list != null && list.size() > 0) { - rvFollowRoom.setVisibility(View.VISIBLE); - mFollowRoomsAdapter.setNewData(list); - } else { - rvFollowRoom.setVisibility(View.GONE); - } - } - - @Override - public void getFollowRoomFail() { - - } - - @Override - public void exitRoom(RoomInfo roomInfo) { - //ktv退出的时候需要用到 - if (AudioEngineManager.get().isOpenKtv() && roomInfo != null) { - KtvMusicManager.INSTANCE.deleteUserAllChooseMusic(roomInfo.getUid()).subscribe(); - AudioEngineManager.get().closeKtvModel(); - } - DaemonService.stop(HomeMoreRoomActivity.this); - } - - - @Override - public void onGetHomeBannerSuccess(List bannerInfos) { - - } - - @Override - public void onGetHomeTagSuccess(List info) { - List mTabInfoList = new ArrayList<>(); - if (!ListUtils.isListEmpty(mFragments)) { - mFragments.clear(); - } - mFragments = new ArrayList<>(); - for (int i = 0; i < info.size(); i++) { - //过滤对象是空和没有标签名同时也没有子标签的情况 - CharSequence title; - int tabId; - Fragment fragment; - String name = info.get(i).getName(); - if (name != null) { - name = name.trim(); - } - title = name; - tabId = info.get(i).getId(); - fragment = HomeTabMapFragment.newInstance(tabId); - mFragments.add(fragment); - mTabInfoList.add(title); - } - - CommonNavigator commonNavigator = new CommonNavigator(HomeMoreRoomActivity.this); - MainMagicIndicatorAdapter magicIndicatorAdapter = new MainMagicIndicatorAdapter(HomeMoreRoomActivity.this, mTabInfoList, true); - magicIndicatorAdapter.setOnItemSelectListener(this); - commonNavigator.setTitleWrapContent(true); - commonNavigator.setAdapter(magicIndicatorAdapter); - magicIndicator.setNavigator(commonNavigator); - commonNavigator.getTitleContainer().setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); - viewPager.setOffscreenPageLimit(5); - viewPager.setAdapter(new RoomContributeListAdapter(getSupportFragmentManager(), mFragments)); - viewPager.addOnPageChangeListener(new OnPageSelectedListener() { - @Override - public void onPageSelected(int position) { - - } - }); - ViewPagerHelper.bind(magicIndicator, viewPager); - } - - @Override - protected boolean needSteepStateBar() { - return true; - } - - @Override - protected void setStatusBar() { - super.setStatusBar(); - StatusBarUtil.transparencyBar(this); - } -} diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/HotRoomAdapter.kt b/app/src/main/java/com/yizhuan/erban/home/adapter/HotRoomAdapter.kt new file mode 100644 index 000000000..1c786a461 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/HotRoomAdapter.kt @@ -0,0 +1,27 @@ +package com.yizhuan.erban.home.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.activity.AVRoomActivity +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.home.bean.HomeRoom + + +class HotRoomAdapter : BaseQuickAdapter(R.layout.item_room_common) { + + + override fun convert(helper: BaseViewHolder, item: HomeRoom) { + helper.apply { + getView(R.id.iv_room_image).load(item.avatar, 8f) + setText(R.id.tv_online_number, "${item.onlineNum}人热聊中") + setText(R.id.tv_room_title, item.title) + setText(R.id.tv_room_tag, item.roomTag) + itemView.setOnClickListener { + AVRoomActivity.start(mContext, item.uid) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/MainMagicIndicatorAdapter.java b/app/src/main/java/com/yizhuan/erban/home/adapter/MainMagicIndicatorAdapter.java index ee1bd7596..58b89f0eb 100644 --- a/app/src/main/java/com/yizhuan/erban/home/adapter/MainMagicIndicatorAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/MainMagicIndicatorAdapter.java @@ -1,14 +1,12 @@ package com.yizhuan.erban.home.adapter; import android.content.Context; - -import androidx.core.content.ContextCompat; - -import android.graphics.Color; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; +import androidx.core.content.ContextCompat; + import com.yizhuan.erban.R; import com.yizhuan.erban.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView; import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil; @@ -39,10 +37,10 @@ public class MainMagicIndicatorAdapter extends CommonNavigatorAdapter { @Override public IPagerTitleView getTitleView(Context context, final int i) { ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true); - scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context,R.color.text_secondary_4f516a)); - scaleTransitionPagerTitleView.setSelectedColor(Color.WHITE); - scaleTransitionPagerTitleView.setMinScale(0.8f); - scaleTransitionPagerTitleView.setTextSize(16); + scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context,R.color.color_444444)); + scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context,R.color.color_333333)); + scaleTransitionPagerTitleView.setMinScale(0.83f); + scaleTransitionPagerTitleView.setTextSize(24); int padding = UIUtil.dip2px(context, 5); scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0); scaleTransitionPagerTitleView.setText(mTitleList.get(i)); diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeDynamicFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeDynamicFragment.java deleted file mode 100644 index 744ebd209..000000000 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeDynamicFragment.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.yizhuan.erban.home.fragment; - -import android.annotation.SuppressLint; -import android.graphics.Rect; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.netease.nim.uikit.common.util.sys.ScreenUtil; -import com.yizhuan.erban.R; -import com.yizhuan.erban.base.BaseFragment; -import com.yizhuan.erban.common.EmptyViewHelper; -import com.yizhuan.erban.home.adapter.HomeDynamicAdapter; -import com.yizhuan.xchat_android_core.home.bean.HomeDynamicInfo; -import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent; -import com.yizhuan.xchat_android_core.home.model.GameHomeModel; -import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent; -import com.yizhuan.xchat_android_library.utils.ListUtils; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.Unbinder; - -/** - * create by lvzebiao @2020/1/7 - */ -public class HomeDynamicFragment extends BaseFragment { - - Unbinder unbinder; - @BindView(R.id.recycler_view) - RecyclerView recyclerView; - - private HomeDynamicAdapter dynamicAdapter; - private final List dynamicList = new ArrayList<>(); - - public static HomeDynamicFragment newInstance() { - HomeDynamicFragment fragment = new HomeDynamicFragment(); - Bundle bundle = new Bundle(); - fragment.setArguments(bundle); - return fragment; - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - mView = inflater.inflate(R.layout.fragment_home_dynamic, container, false); - unbinder = ButterKnife.bind(this, mView); - EventBus.getDefault().register(this); - return mView; - } - - @Override - public void initiate() { - recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { - - @Override - public void getItemOffsets(@NotNull Rect outRect, @NotNull View view, @NotNull RecyclerView parent, @NotNull RecyclerView.State state) { - super.getItemOffsets(outRect, view, parent, state); - int bottom = ScreenUtil.dip2px(10); - int top = ScreenUtil.dip2px(5); - outRect.set(0, top, 0, bottom); - } - }); - recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); - dynamicAdapter = new HomeDynamicAdapter(getActivity()); - recyclerView.setAdapter(dynamicAdapter); - } - - @Override - public void onResume() { - super.onResume(); - } - - @SuppressLint("CheckResult") - private void getHomeDynamic() { - GameHomeModel.get().getHomeDynamic().subscribe((serviceResult, throwable) -> { - if (throwable != null) { - dynamicAdapter.setEmptyView(EmptyViewHelper.createEmptyView(getContext(),"暂无数据")); - } else { - dynamicList.clear(); - dynamicList.addAll(serviceResult); - if (ListUtils.isListEmpty(dynamicList)) { - dynamicAdapter.setEmptyView(EmptyViewHelper.createEmptyView(getContext(),"暂无数据")); - } else { - dynamicAdapter.setNewData(dynamicList); - } - } - }); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onLoadLoginUserInfoEvent(LoadLoginUserInfoEvent event) { - getHomeDynamic(); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onLoadLoginUserInfoEvent(RefreshHomeDataEvent event) { - getHomeDynamic(); - } - - @Override - public void onDestroyView() { - EventBus.getDefault().unregister(this); - super.onDestroyView(); - unbinder.unbind(); - } - -} diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFragment.java deleted file mode 100644 index 5c6b97ffa..000000000 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFragment.java +++ /dev/null @@ -1,682 +0,0 @@ -package com.yizhuan.erban.home.fragment; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.GradientDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.LinearLayoutManager; - -import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; -import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; -import com.bumptech.glide.request.RequestOptions; -import com.coorchice.library.utils.LogUtils; -import com.netease.nim.uikit.common.util.sys.ScreenUtil; -import com.netease.nim.uikit.support.glide.GlideApp; -import com.scwang.smartrefresh.layout.internal.ProgressDrawable; -import com.yizhuan.erban.R; -import com.yizhuan.erban.avroom.activity.AVRoomActivity; -import com.yizhuan.erban.avroom.adapter.RoomContributeListAdapter; -import com.yizhuan.erban.base.BaseMvpFragment; -import com.yizhuan.erban.databinding.FragmentGameHomeBinding; -import com.yizhuan.erban.home.activity.HomeMoreRoomActivity; -import com.yizhuan.erban.home.adapter.BannerAdapter; -import com.yizhuan.erban.home.adapter.HomeAddFriendsAdapter; -import com.yizhuan.erban.home.adapter.HomeConcernsAdapter; -import com.yizhuan.erban.home.adapter.MainMagicIndicatorAdapter; -import com.yizhuan.erban.home.helper.OpenRoomHelper; -import com.yizhuan.erban.home.presenter.MainFragmentPresenter; -import com.yizhuan.erban.home.view.IMainFragmentView; -import com.yizhuan.erban.radish.signin.SignInActivity; -import com.yizhuan.erban.ui.search.SearchActivity; -import com.yizhuan.erban.ui.webview.CommonWebViewActivity; -import com.yizhuan.erban.ui.widget.OnPageSelectedListener; -import com.yizhuan.erban.ui.widget.higuide.TuTuGuideHelper; -import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper; -import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator; -import com.yizhuan.erban.ui.widget.recyclerview.decoration.VerticalDecoration; -import com.yizhuan.erban.ui.widget.rollviewpager.Util; -import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView; -import com.yizhuan.xchat_android_core.UriProvider; -import com.yizhuan.xchat_android_core.auth.AuthModel; -import com.yizhuan.xchat_android_core.home.bean.BannerInfo; -import com.yizhuan.xchat_android_core.home.bean.HomeConcernsInfo; -import com.yizhuan.xchat_android_core.home.bean.HomePlayInfo; -import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo; -import com.yizhuan.xchat_android_core.home.bean.TagListInfo; -import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent; -import com.yizhuan.xchat_android_core.home.model.GameHomeModel; -import com.yizhuan.xchat_android_core.initial.InitialModel; -import com.yizhuan.xchat_android_core.market_verify.MarketVerifyModel; -import com.yizhuan.xchat_android_core.room.bean.RoomInfo; -import com.yizhuan.xchat_android_core.statistic.StatisticManager; -import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol; -import com.yizhuan.xchat_android_core.user.UserModel; -import com.yizhuan.xchat_android_core.user.bean.UserInfo; -import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent; -import com.yizhuan.xchat_android_core.user.event.LoginUserInfoUpdateEvent; -import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils; -import com.yizhuan.xchat_android_core.utils.TextUtils; -import com.yizhuan.xchat_android_library.base.factory.CreatePresenter; -import com.yizhuan.xchat_android_library.utils.ListUtils; -import com.yizhuan.xchat_android_library.utils.SingleToastUtil; -import com.yizhuan.xchat_android_library.utils.SizeUtils; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.security.MessageDigest; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; - -/** - * 音游首页 - */ -@CreatePresenter(MainFragmentPresenter.class) -public class HomeFragment extends BaseMvpFragment - implements IMainFragmentView, View.OnClickListener, MainMagicIndicatorAdapter.OnItemSelectListener, MainMagicIndicatorAdapter.OnBottomItemSelectListener { - public static final String TAG = "GameHomeFragment"; - /** - * 动态 - */ - public static final int TAB_TYPE_DYNAMIC = 0; - /** - * 聊天交友 - */ - public static final int TAB_TYPE_PLAY = 1; - /** - * 首页Banner - */ - private static final String BANNER_TYPE = "1"; - @NonNull - private final List mFragments = new ArrayList<>(); - @NonNull - private final List mTabInfoList = new ArrayList<>(); - private FragmentGameHomeBinding mBinding; - private List mFragmentsBottom; - private boolean needAutoScroll = true; - private HomeAddFriendsAdapter addFriendsAdapter; - private BannerAdapter bannerAdapter; - @Nullable - private Disposable addFriendsDisposable; - private boolean isLoaded; - private HomeConcernsAdapter mFollowRoomsAdapter; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - EventBus.getDefault().register(this); - } - - @Override - public void onDestroy() { - super.onDestroy(); - EventBus.getDefault().unregister(this); - } - - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.iv_open_room: - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.game_homepage_createroom_click, "创建房间按钮"); - OpenRoomHelper.openRoom(getBaseActivity()); - break; - - case R.id.tv_search_room: - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_SEARCH, "进入搜索页"); - SearchActivity.start(getActivity()); - break; - - case R.id.iv_to_sign_in: - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_GAME_HOMEPAGE_SIGN_CLICK, - "签到-首页"); - SignInActivity.start(mContext); - SharedPreferenceUtils.put("sign_entrance_" + AuthModel.get().getCurrentUid(), 1); - break; - - //首页榜单 - case R.id.iv_ranking: - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_RANK_CLICK, "首页_榜单"); - CommonWebViewActivity.start(mContext, UriProvider.getRanking()); - break; - - case R.id.tv_room_more: - HomeMoreRoomActivity.start(mContext); - break; - } - } - - @Override - public int getRootLayoutId() { - return R.layout.fragment_game_home; - } - - @Override - public void onFindViews() { - mBinding = DataBindingUtil.bind(mView); - } - - @Override - public void onResume() { - super.onResume(); - } - - @Override - public void onSetListener() { - mBinding.setClick(this); - mBinding.setOpenVisible(true); - } - - @Override - public void initiate() { - mBinding.rollView.setVisibility(View.GONE); - initGuide(); - initRefreshView(); - initTitleTab(); - initRoomConcern(); - if (AuthModel.get().getCurrentUid() != 0) { - tryLoadData(false); - } - } - - private void initRefreshView() { - mBinding.refreshLayout.setOnRefreshListener(refreshLayout -> { - mBinding.refreshLayout.finishRefresh(); - tryLoadData(true); - getHomeConcern(); - EventBus.getDefault().post(new RefreshHomeDataEvent()); - }); - mBinding.refreshLayout.setEnableOverScrollBounce(false); - mBinding.refreshHeader.getLastUpdateText().setTextColor(Color.WHITE); - mBinding.refreshHeader.getTitleText().setTextColor(Color.WHITE); - mBinding.refreshHeader.setBackgroundResource(R.drawable.bg_shape_home_top); - ProgressDrawable progressDrawable = new ProgressDrawable(); - progressDrawable.setColor(Color.WHITE); - mBinding.refreshHeader.getProgressView().setImageDrawable(progressDrawable); - } - - //尝试加载不需要登录就可以加载的数据 - private void tryLoadData(boolean refresh) { - if (!isLoaded || refresh) { - isLoaded = true; - initRoomTitleTab(); - initBanner(); - loadHomPlay(); - UserInfo userInfo = UserModel.get().getCacheLoginUserInfo(); - if (userInfo != null && !TextUtils.isEmptyText(userInfo.getNick())) { - getHomeConcern(); - } - } - } - - public void scrollToView() { - mBinding.appBarLayout.addOnOffsetChangedListener((appBarLayout, i) -> { - mBinding.refreshLayout.setEnabled(i >= 0); - }); - mBinding.magicIndicatorBottom.onPageSelected(InitialModel.get().getDefaultHomeTab()); - mBinding.viewPagerBottom.setCurrentItem(InitialModel.get().getDefaultHomeTab()); - if (needAutoScroll) { - needAutoScroll = false; - mBinding.coordinatorLayout.post(() -> { - int distance = mBinding.rvFollowRoom.getMeasuredHeight(); - CoordinatorLayout.Behavior behavior = ((CoordinatorLayout.LayoutParams) mBinding.appBarLayout.getLayoutParams()).getBehavior(); - if (behavior != null) - behavior.onNestedPreScroll(mBinding.coordinatorLayout, mBinding.appBarLayout, mBinding.rvFollowRoom, 0, distance, new int[]{0, 0}, 0); - }); - } - } - - /** - * 推荐房间TAG - */ - private void initRoomTitleTab() { - getMvpPresenter().getHomeTag(); - } - - /** - * 初始化动态和聊天交友tab - */ - private void initTitleTab() { - List fragmentPos = new ArrayList<>(); - fragmentPos.add(TAB_TYPE_PLAY); - fragmentPos.add(TAB_TYPE_DYNAMIC); - List tagList = new ArrayList<>(); - mFragmentsBottom = new ArrayList<>(); - - tagList.add(getResources().getString(R.string.home_tab_caht)); - tagList.add(getResources().getString(R.string.home_tab_dynamic)); - - mFragmentsBottom.add(HomePlayFragment.newInstance()); - mFragmentsBottom.add(HomeDynamicFragment.newInstance()); - - CommonNavigator commonNavigator = new CommonNavigator(getContext()); - commonNavigator.setTitleWrapContent(true); - MainMagicIndicatorAdapter magicIndicatorAdapter = new MainMagicIndicatorAdapter(getContext(), tagList, false); - magicIndicatorAdapter.setOnBottomItemSelectListener(this); - commonNavigator.setAdapter(magicIndicatorAdapter); - mBinding.magicIndicatorBottom.setNavigator(commonNavigator); - - commonNavigator.getTitleContainer().setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); - mBinding.viewPagerBottom.setOffscreenPageLimit(5); - mBinding.viewPagerBottom.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), mFragmentsBottom)); - mBinding.viewPagerBottom.addOnPageChangeListener(new OnPageSelectedListener() { - @Override - public void onPageSelected(int position) { - } - }); - - ViewPagerHelper.bind(mBinding.magicIndicatorBottom, mBinding.viewPagerBottom); - - scrollToView(); - } - - @Override - public void requestOpenRoomResult(int openRoomFailType, Object... arg) { - - } - - @Override - public void showByMarketCheckingStatus(List tagListInfoList) { - - } - - @Override - public void getFollowRoomsSuccess(List list) { - if (list != null && list.size() > 0) { - mBinding.rvFollowRoom.setVisibility(View.VISIBLE); - mFollowRoomsAdapter.setNewData(list); - } else { - mBinding.rvFollowRoom.setVisibility(View.GONE); - } - } - - @Override - public void getFollowRoomFail() { - - } - - @Override - public void exitRoom(RoomInfo roomInfo) { - - } - - /** - * 顶部关注房间 - */ - private void initRoomConcern() { - mFollowRoomsAdapter = new HomeConcernsAdapter(null, mContext); - mBinding.rvFollowRoom.setHasFixedSize(true); - mBinding.rvFollowRoom.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); - mBinding.rvFollowRoom.addItemDecoration(new VerticalDecoration(SizeUtils.dp2px(mContext, 10), false, true)); - mFollowRoomsAdapter.setOnItemClickListener((adapter, view, position) -> { - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_INTO_DBRUK_CLICK, "点击顶部我的房间/关注进入房间"); - if (position == 0) { - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_INTO_MY_ROOM_CLICK, "首页_进入我的房间"); - OpenRoomHelper.openRoom(getBaseActivity()); - return; - } - HomeConcernsInfo homeConcernsInfo = mFollowRoomsAdapter.getItem(position); - if (homeConcernsInfo != null) { - AVRoomActivity.startForFromType(mContext, homeConcernsInfo.getRoomUid(), - AVRoomActivity.FROM_TYPE_USER, homeConcernsInfo.getName(), String.valueOf(homeConcernsInfo.getFollowedUid())); - } - }); - mBinding.rvFollowRoom.setAdapter(mFollowRoomsAdapter); - } - - private void getHomeConcern() { - getMvpPresenter().getHomeConcerns(); - } - - /** - * 推荐房间 - * - * @param position - * @param view - */ - @Override - public void onItemSelect(int position, TextView view) { - if (mFragments == null || mFragments.isEmpty()) { - return; - } - Fragment fragment = mFragments.get(position); - if (fragment == null) { - return; - } - mBinding.viewPager.setCurrentItem(position); - } - - /** - * 底部动态聊天交友 - * - * @param position - * @param view - */ - @Override - public void onBottomItemSelect(int position, TextView view) { - if (mFragmentsBottom == null || mFragmentsBottom.isEmpty()) { - return; - } - Fragment fragment = mFragmentsBottom.get(position); - if (fragment == null) { - return; - } - mBinding.viewPagerBottom.setCurrentItem(position); - if (position == 1) { - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_SCREEN_DONG_TAI_CLICK, "首页_聊天交友切换到动态"); - } - } - - @Override - public void onGetHomeBannerSuccess(List bannerInfos) { - setBanner(bannerInfos); - } - - @Override - public void onGetHomeTagSuccess(List info) { - boolean changed = false; - - List oldTabInfoList = new ArrayList<>(mTabInfoList); - - for (HomeTagInfo tagInfo : info) { - if (!oldTabInfoList.contains(tagInfo.getName())) { - changed = true; - break; - } - } - //只有HomeTagInfo发生改变才刷新数据,否则刷新当前可见的那个Fragment - if (changed) { - LogUtils.e(changed + ":oldTabInfoList"); - mTabInfoList.clear(); - mFragments.clear(); - for (int i = 0; i < info.size(); i++) { - //过滤对象是空和没有标签名同时也没有子标签的情况 - CharSequence title; - int tabId; - Fragment fragment; - String name = info.get(i).getName(); - if (name != null) { - name = name.trim(); - } - title = name; - mTabInfoList.add(title); - tabId = info.get(i).getId(); - fragment = HomeTabHomeFragment.newInstance(tabId); - mFragments.add(fragment); - } - CommonNavigator commonNavigator = new CommonNavigator(getContext()); - commonNavigator.setTitleWrapContent(true); - MainMagicIndicatorAdapter magicIndicatorAdapter = new MainMagicIndicatorAdapter(getContext(), mTabInfoList, false); - magicIndicatorAdapter.setOnItemSelectListener(this); - commonNavigator.setAdapter(magicIndicatorAdapter); - mBinding.magicIndicator.setNavigator(commonNavigator); - commonNavigator.getTitleContainer().setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); - mBinding.viewPager.setOffscreenPageLimit(5); - mBinding.viewPager.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), mFragments)); - ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager); - } else { - for (Fragment fragment : mFragments) { - if (fragment instanceof LazyLoadFragment) { - ((LazyLoadFragment) fragment).tryLoadData(); - } - } - } - - - } - - /** - * 用户信息更新 - * - * @param event - */ - @Subscribe(threadMode = ThreadMode.MAIN) - public void loadLoginUserInfoEvent(LoginUserInfoUpdateEvent event) { - refreshData(); - } - - /** - * 用户信息更新 - * - * @param event - */ - @Subscribe(threadMode = ThreadMode.MAIN) - public void loadLoginUserInfoEvent(LoadLoginUserInfoEvent event) { - refreshData(); - } - - private void refreshData() { - UserInfo userInfo = UserModel.get().getCacheLoginUserInfo(); - assert userInfo != null; - // 超管不展示开房按钮 - mBinding.setOpenVisible(!(userInfo.getPlatformRole() == 1)); - tryLoadData(false); - if (!TextUtils.isEmptyText(userInfo.getNick())) { - getHomeConcern(); - } - - } - - private void initBanner() { - getMvpPresenter().getHomeBanner(BANNER_TYPE); - } - - /** - * 判断是否要显示首页引导 - */ - private void initGuide() { - mView.postDelayed(() -> { - if (TuTuGuideHelper.isNeedHiGuide(TuTuGuideHelper.KEY_GUIDE_MAIN_HOME)) { - - Activity activity = getActivity(); - if (activity == null) { - return; - } - View rootView = activity.findViewById(android.R.id.content); - if (!(rootView instanceof FrameLayout)) { - return; - } - TuTuGuideHelper.setNoNeedHiGuide(TuTuGuideHelper.KEY_GUIDE_MAIN_HOME); - FrameLayout contentView = (FrameLayout) rootView; - View view = getLayoutInflater().inflate(R.layout.layout_home_guide, contentView, false); - View skipView = view.findViewById(R.id.tv_skip); - View logoIconView = view.findViewById(R.id.iv_logo_icon); - ImageView bgView = view.findViewById(R.id.iv_bg); - GlideApp.with(activity) - .load(R.drawable.ic_guide_home_1) - .apply(RequestOptions.bitmapTransform(new BitmapTransformation() { - - @Override - public void updateDiskCacheKey(MessageDigest messageDigest) { - - } - - @Override - protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) { - Bitmap bitmap; - bitmap = Bitmap.createBitmap(toTransform, 0, 0, outWidth, outHeight); - return bitmap; - } - - })) - .into(bgView); - contentView.addView(view, -1, -1); - skipView.setOnClickListener(v -> contentView.removeView(view)); - - view.setOnClickListener(v -> { - if (v.getTag() == null) { - GlideApp.with(activity) - .load(R.drawable.ic_guide_home_2) - .apply(RequestOptions.bitmapTransform(new BitmapTransformation() { - - @Override - public void updateDiskCacheKey(MessageDigest messageDigest) { - - } - - @Override - protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) { - Bitmap bitmap; - bitmap = Bitmap.createBitmap(toTransform, 0, 0, outWidth, outHeight); - return bitmap; - } - - })) - .into(bgView); - - skipView.setVisibility(View.GONE); - logoIconView.setVisibility(View.VISIBLE); - v.setTag(1); - - } else { - contentView.removeView(view); - } - }); - } - }, 2000); - - } - - private void setBanner(List bannerList) { - //审核中状态,去掉跳转房间banner - if (MarketVerifyModel.get().isMarketChecking()) { - Iterator iterator = bannerList.iterator(); - while (iterator.hasNext()) { - BannerInfo bannerInfo = iterator.next(); - if (bannerInfo.getSkipType() == 2) { - iterator.remove(); - } - } - } - if (ListUtils.isListEmpty(bannerList)) { - mBinding.rollView.setVisibility(View.GONE); - return; - } - mBinding.rollView.setVisibility(View.VISIBLE); - if (bannerAdapter == null) { - mBinding.rollView.setHintView(new ColorPointHintView(mContext, Color.WHITE, mContext.getResources().getColor(R.color.color_66FFFFFF)) { - @Override - public Drawable makeFocusDrawable() { - GradientDrawable dotFocus = new GradientDrawable(); - dotFocus.setColor(Color.WHITE); - dotFocus.setCornerRadius(Util.dip2px(getContext(), 2)); - dotFocus.setSize(Util.dip2px(getContext(), 9), Util.dip2px(getContext(), 4)); - return dotFocus; - } - - @Override - public Drawable makeNormalDrawable() { - GradientDrawable dotNormal = new GradientDrawable(); - dotNormal.setColor(mContext.getResources().getColor(R.color.color_66FFFFFF)); - dotNormal.setCornerRadius(Util.dip2px(getContext(), 2)); - dotNormal.setSize(Util.dip2px(getContext(), 4), Util.dip2px(getContext(), 4)); - return dotNormal; - } - }); - - bannerAdapter = new BannerAdapter(bannerList, mContext); - bannerAdapter.setRoundingRadius(ScreenUtil.dip2px(12)); - bannerAdapter.setHomeGame(true); - mBinding.rollView.setAdapter(bannerAdapter); - mBinding.rollView.setPlayDelay(3000); - //设置透明度 - mBinding.rollView.setAnimationDurtion(500); - } - bannerAdapter.setBannerInfoList(bannerList); - bannerAdapter.notifyDataSetChanged(); - } - - @SuppressLint("CheckResult") - private void loadHomPlay() { - if (addFriendsAdapter == null) { - mBinding.rvAddFriends.setLayoutManager(new LinearLayoutManager(mContext)); - mBinding.rvAddFriends.setNestedScrollingEnabled(false); - mBinding.rvAddFriends.setFocusable(false); - addFriendsAdapter = new HomeAddFriendsAdapter(); - mBinding.rvAddFriends.setAdapter(addFriendsAdapter); - } - GameHomeModel.get().getHomePlay() - .doOnError(throwable -> mBinding.tvAddFriends.setVisibility(View.GONE)) - .subscribe(homePlayList -> { - if (ListUtils.isListEmpty(homePlayList)) { - mBinding.tvAddFriends.setVisibility(View.GONE); - mBinding.rvAddFriends.setVisibility(View.GONE); - addFriendsAdapter.setNewData(null); - } else { - loopHomePlay(homePlayList, true); - } - }); - } - - - private void loopHomePlay(final List homePlayList, boolean refresh) { - - if (addFriendsDisposable != null && !addFriendsDisposable.isDisposed()) { - addFriendsDisposable.dispose(); - } - mBinding.tvAddFriends.setVisibility(View.VISIBLE); - mBinding.rvAddFriends.setVisibility(View.VISIBLE); - if (refresh) { - //两个以内直接setNewData并返回 不循环 - if (homePlayList.size() <= 2) { - addFriendsAdapter.setNewData(homePlayList); - return; - } else { - addFriendsAdapter.setNewData(new ArrayList<>(homePlayList.subList(0, 2))); - } - } - - Observable listObservable = Observable.fromIterable(refresh ? new ArrayList<>(homePlayList.subList(2, homePlayList.size())) : homePlayList); - - Observable timerObservable = Observable.interval(3000, TimeUnit.MILLISECONDS); - - Observable.zip(listObservable, timerObservable, (homePlayInfo, aLong) -> homePlayInfo) - .observeOn(AndroidSchedulers.mainThread()) - .filter(homePlayInfo -> isResumed() && isVisible())//不可见的时候停止循环,不然重新回来所有动画一起执行,模拟器可能ANR... - .subscribe(new Observer() { - @Override - public void onSubscribe(@NonNull Disposable d) { - addFriendsDisposable = d; - } - - @Override - public void onNext(@NonNull HomePlayInfo homePlayInfo) { - addFriendsAdapter.remove(0); - addFriendsAdapter.addData(homePlayInfo); - } - - @Override - public void onError(@NonNull Throwable e) { - - } - - @Override - public void onComplete() { - loopHomePlay(homePlayList, false); - } - }); - } - -} diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFragment.kt new file mode 100644 index 000000000..b877d2542 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFragment.kt @@ -0,0 +1,90 @@ +package com.yizhuan.erban.home.fragment + +import android.view.View +import android.widget.LinearLayout +import android.widget.TextView +import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomContributeListAdapter +import com.yizhuan.erban.base.BaseFragment +import com.yizhuan.erban.databinding.FragmentHomeBinding +import com.yizhuan.erban.home.adapter.MainMagicIndicatorAdapter +import com.yizhuan.erban.ui.search.SearchActivity +import com.yizhuan.erban.ui.webview.CommonWebViewActivity +import com.yizhuan.erban.ui.widget.OnPageSelectedListener +import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator +import com.yizhuan.xchat_android_core.UriProvider +import com.yizhuan.xchat_android_core.statistic.StatisticManager +import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol +import java.util.* + +/** + * 音游首页 + */ +class HomeFragment : BaseFragment(), View.OnClickListener, + MainMagicIndicatorAdapter.OnBottomItemSelectListener { + private lateinit var mBinding: FragmentHomeBinding + override fun onClick(v: View) { + when (v.id) { + R.id.tv_search_room -> { + StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_SEARCH, "进入搜索页") + SearchActivity.start(activity) + } + + R.id.iv_ranking -> { + StatisticManager.Instance() + .onEvent(StatisticsProtocol.Event.EVENT_HOME_RANK_CLICK, "首页_榜单") + CommonWebViewActivity.start(mContext, UriProvider.getRanking()) + } + } + } + + override fun getRootLayoutId(): Int { + return R.layout.fragment_home + } + + override fun onFindViews() { + mBinding = DataBindingUtil.bind(mView)!! + } + + override fun onSetListener() { + mBinding.click = this + } + + override fun initiate() { + initTitleTab() + } + + /** + * 初始化推荐和派对tab + */ + private fun initTitleTab() { + val fragmentPos: MutableList = ArrayList() + val tagList: MutableList = ArrayList() + tagList.add("推荐") + tagList.add("派对") + fragmentPos.add(RecommendFragment.newInstance()) + fragmentPos.add(PartyFragment.newInstance()) + val commonNavigator = CommonNavigator(context) + commonNavigator.setTitleWrapContent(true) + val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, tagList, false) + magicIndicatorAdapter.setOnBottomItemSelectListener(this) + commonNavigator.adapter = magicIndicatorAdapter + mBinding.magicIndicator.navigator = commonNavigator + commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE + mBinding.viewPager.offscreenPageLimit = 5 + mBinding.viewPager.adapter = + RoomContributeListAdapter(childFragmentManager, fragmentPos) + mBinding.viewPager.addOnPageChangeListener(object : OnPageSelectedListener() { + override fun onPageSelected(position: Int) {} + }) + ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager) + } + + override fun onBottomItemSelect(position: Int, view: TextView?) { + mBinding.viewPager.currentItem = position + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabHomeFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabHomeFragment.java index 1fbd9179a..528db2ebe 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabHomeFragment.java +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabHomeFragment.java @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.trello.rxlifecycle3.android.FragmentEvent; import com.yizhuan.erban.R; +import com.yizhuan.erban.base.BaseFragment; import com.yizhuan.erban.common.NoDataFragment; import com.yizhuan.erban.home.adapter.HomeRoomFragmentAdapter; import com.yizhuan.xchat_android_core.home.bean.HomeTabMapInfo; @@ -32,7 +33,7 @@ import java.util.concurrent.CancellationException; /** * */ -public class HomeTabHomeFragment extends LazyLoadFragment { +public class HomeTabHomeFragment extends BaseFragment { public static final int ROWS = 3; private static final String PARAM_TAB_ID = "tabId"; private RecyclerView recyclerView; @@ -232,14 +233,11 @@ public class HomeTabHomeFragment extends LazyLoadFragment { @Override public void initiate() { -// getData(); - } - - @Override - protected void loadData() { getData(); } + + @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabMapFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabMapFragment.java deleted file mode 100644 index ddb665117..000000000 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabMapFragment.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.yizhuan.erban.home.fragment; - -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.Nullable; -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.yizhuan.erban.R; -import com.yizhuan.erban.base.BaseMvpFragment; -import com.yizhuan.erban.home.adapter.HomeRoomFragmentAdapter; -import com.yizhuan.xchat_android_core.home.bean.HomeTabMapInfo; -import com.yizhuan.erban.home.presenter.HomeTabMapPresenter; -import com.yizhuan.xchat_android_core.home.IHomeTabMapView; -import com.yizhuan.xchat_android_library.base.factory.CreatePresenter; -import com.yizhuan.xchat_android_library.utils.ListUtils; - -import java.util.List; - -/** - * - */ -@CreatePresenter(HomeTabMapPresenter.class) -public class HomeTabMapFragment extends BaseMvpFragment implements IHomeTabMapView, BaseQuickAdapter.RequestLoadMoreListener { - public static final int ROWS = 2; - private static final String PARAM_TAB_ID = "tabId"; - private RecyclerView recyclerView; - private SwipeRefreshLayout swipeRefresh; - private String tabId; - private HomeRoomFragmentAdapter mHomeRoomAdapter; - - public static HomeTabMapFragment newInstance(int tabId) { - Bundle args = new Bundle(); - args.putString(PARAM_TAB_ID, String.valueOf(tabId)); - HomeTabMapFragment fragment = new HomeTabMapFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - tabId = getArguments().getString(PARAM_TAB_ID); - } - } - - @Override - public int getRootLayoutId() { - return R.layout.fragment_home_tab_map; - } - - @Override - public void onFindViews() { - recyclerView = mView.findViewById(R.id.recycler_view); - swipeRefresh = mView.findViewById(R.id.swipe_refresh); - } - - @Override - public void onSetListener() { - swipeRefresh.setOnRefreshListener(() -> { - mHomeRoomAdapter.setEnableLoadMore(true); - loadData(true); - }); - } - - @Override - public void initiate() { - initRecyclerView(); - loadData(true); - } - - - /** - * 刷新数据 - */ - private void loadData(boolean isRefresh) { - getMvpPresenter().loadData(isRefresh,tabId); - } - - @Override - public View.OnClickListener getLoadMoreListener() { - return super.getLoadMoreListener(); - } - - private void initRecyclerView() { - recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - recyclerView.setItemAnimator(null); - mHomeRoomAdapter = new HomeRoomFragmentAdapter(getContext(),null,false); - mHomeRoomAdapter.setOnLoadMoreListener(this, recyclerView); - GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), ROWS); - recyclerView.setLayoutManager(gridLayoutManager); - recyclerView.setAdapter(mHomeRoomAdapter); - } - - - - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - super.setUserVisibleHint(isVisibleToUser); - } - - @Override - public void homeTabMapSuccess(List list) { - hideStatus(); - if (mHomeRoomAdapter != null) { - int page = getMvpPresenter().getPage(); - if (page <= 1) { - swipeRefresh.setRefreshing(false); - - if (list == null || list.size() == 0) { - showNoData(); - } else { - mHomeRoomAdapter.setNewData(getMultipleItemData(list)); - } - } - } - } - - private List getMultipleItemData(List itemList) { - if (null==itemList||itemList.size()<=0){ - return null; - } - - for (int i = 0; i < itemList.size(); i++) { - itemList.get(i).setItemType(HomeTabMapInfo.TYPE_NORMAL); - } - return itemList; - } - - @Override - public void homeTabMapFails(String error) { - hideStatus(); - - int page = getMvpPresenter().getPage(); - if (page <= 1) { - showNoData(); - } - } - - @Override - public void homeTabMapLoadMoreSuccess(List list) { - if (ListUtils.isListEmpty(list)){ - mHomeRoomAdapter.loadMoreEnd(); - return; - } - mHomeRoomAdapter.addData(list); - mHomeRoomAdapter.loadMoreComplete(); - } - - @Override - public void homeTabMapLoadMoreFails(String error) { - hideStatus(); - int page = getMvpPresenter().getPage(); - if (page <= 1) { - showNoData(); - } - } - - @Override - public void onReloadData() { - super.onReloadData(); - loadData(true); - } - - @Override - public void onLoadMoreRequested() { - loadData(false); - } -} diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/PartyFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/PartyFragment.kt new file mode 100644 index 000000000..58a2b1599 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/PartyFragment.kt @@ -0,0 +1,144 @@ +package com.yizhuan.erban.home.fragment + +import android.os.Bundle +import android.widget.LinearLayout +import android.widget.TextView +import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import com.coorchice.library.utils.LogUtils +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomContributeListAdapter +import com.yizhuan.erban.base.BaseFragment +import com.yizhuan.erban.databinding.FragmentPartyBinding +import com.yizhuan.erban.home.adapter.MainMagicIndicatorAdapter +import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator +import com.yizhuan.xchat_android_core.auth.AuthModel +import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo +import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + +/** + * 音游首页 + */ +class PartyFragment : BaseFragment(), MainMagicIndicatorAdapter.OnItemSelectListener { + private lateinit var mBinding: FragmentPartyBinding + private var isLoaded = false + private val mFragments: ArrayList = ArrayList() + private val mTabInfoList: ArrayList = ArrayList() + + companion object{ + fun newInstance(): PartyFragment { + val args = Bundle() + + val fragment = PartyFragment() + fragment.arguments = args + return fragment + } + } + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EventBus.getDefault().register(this) + } + + override fun onDestroy() { + super.onDestroy() + EventBus.getDefault().unregister(this) + } + + + override fun getRootLayoutId(): Int { + return R.layout.fragment_party + } + + override fun onFindViews() { + mBinding = DataBindingUtil.bind(mView)!! + } + + override fun onSetListener() { + + } + + override fun initiate() { + if (AuthModel.get().currentUid != 0L) { + tryLoadData(false) + } + } + + //尝试加载不需要登录就可以加载的数据 + private fun tryLoadData(refresh: Boolean) { + if (!isLoaded || refresh) { + isLoaded = true + } + } + + + 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发生改变才刷新数据,否则刷新当前可见的那个Fragment + 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 = HomeTabHomeFragment.newInstance(tabId) + mFragments.add(fragment) + } + val commonNavigator = CommonNavigator(context) + commonNavigator.setTitleWrapContent(true) + val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, mTabInfoList, false) + magicIndicatorAdapter.setOnItemSelectListener(this) + commonNavigator.adapter = magicIndicatorAdapter + mBinding.magicIndicator.navigator = commonNavigator + commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE + mBinding.viewPager.offscreenPageLimit = 5 + mBinding.viewPager.adapter = RoomContributeListAdapter( + childFragmentManager, + mFragments + ) + ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager) + } else { + for (fragment in mFragments) { + if (fragment is LazyLoadFragment) { + fragment.tryLoadData() + } + } + } + } + + /** + * 用户信息更新 + * + * @param event + */ + @Subscribe(threadMode = ThreadMode.MAIN) + fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) { + tryLoadData(true) + } + + override fun onItemSelect(position: Int, view: TextView?) { + mBinding.viewPager.currentItem = position + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/RecommendFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/RecommendFragment.kt new file mode 100644 index 000000000..7f61df923 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/RecommendFragment.kt @@ -0,0 +1,245 @@ +package com.yizhuan.erban.home.fragment + +import android.graphics.Color +import android.graphics.drawable.Drawable +import android.graphics.drawable.GradientDrawable +import android.os.Bundle +import android.view.View +import android.widget.LinearLayout +import android.widget.TextView +import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.fragment.app.viewModels +import com.netease.nim.uikit.common.util.sys.ScreenUtil +import com.scwang.smartrefresh.layout.internal.ProgressDrawable +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomContributeListAdapter +import com.yizhuan.erban.base.BaseFragment +import com.yizhuan.erban.databinding.FragmentRecommendBinding +import com.yizhuan.erban.home.HomeViewModel +import com.yizhuan.erban.home.adapter.BannerAdapter +import com.yizhuan.erban.home.adapter.MainMagicIndicatorAdapter +import com.yizhuan.erban.home.adapter.MainMagicIndicatorAdapter.OnBottomItemSelectListener +import com.yizhuan.erban.ui.widget.OnPageSelectedListener +import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator +import com.yizhuan.erban.ui.widget.rollviewpager.Util +import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView +import com.yizhuan.xchat_android_core.auth.AuthModel +import com.yizhuan.xchat_android_core.home.bean.BannerInfo +import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent +import com.yizhuan.xchat_android_core.market_verify.MarketVerifyModel +import com.yizhuan.xchat_android_core.statistic.StatisticManager +import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol +import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent +import com.yizhuan.xchat_android_core.user.event.LoginUserInfoUpdateEvent +import com.yizhuan.xchat_android_library.utils.ListUtils +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode +import java.util.* + +/** + * 音游首页 + */ +class RecommendFragment : BaseFragment(), View.OnClickListener, OnBottomItemSelectListener { + private lateinit var mBinding: FragmentRecommendBinding + private var mFragmentsBottom: MutableList = ArrayList() + private lateinit var bannerAdapter: BannerAdapter + private var isLoaded = false + + private val homeViewModel: HomeViewModel by activityViewModels() + + companion object { + fun newInstance(): RecommendFragment { + val args = Bundle() + + val fragment = RecommendFragment() + fragment.arguments = args + return fragment + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EventBus.getDefault().register(this) + } + + override fun onDestroy() { + super.onDestroy() + EventBus.getDefault().unregister(this) + } + + override fun onClick(v: View) { + + } + + override fun getRootLayoutId(): Int { + return R.layout.fragment_recommend + } + + override fun onFindViews() { + mBinding = DataBindingUtil.bind(mView)!! + } + + override fun onSetListener() { + mBinding.click = this + } + + override fun initiate() { + initRefreshView() + initTitleTab() + if (AuthModel.get().currentUid != 0L) { + tryLoadData(false) + } + childFragmentManager + .beginTransaction() + .replace(R.id.fg_recommend_room, HomeTabHomeFragment.newInstance(0)) + .commitAllowingStateLoss() + + homeViewModel.getBannerInfo() + homeViewModel.bannerLiveData.observe(this) { + setBanner(it) + } + } + + //尝试加载不需要登录就可以加载的数据 + private fun tryLoadData(refresh: Boolean) { + if (!isLoaded || refresh) { + isLoaded = true + } + } + + private fun initRefreshView() { + mBinding.refreshLayout.setOnRefreshListener { + mBinding.refreshLayout.finishRefresh() + EventBus.getDefault().post(RefreshHomeDataEvent()) + } + mBinding.refreshLayout.isEnableOverScrollBounce = false + val themeColor = requireContext().resources.getColor(R.color.color_666666) + mBinding.refreshHeader.lastUpdateText.setTextColor(themeColor) + mBinding.refreshHeader.titleText.setTextColor(themeColor) + mBinding.refreshHeader.setBackgroundColor(Color.TRANSPARENT) + val progressDrawable = ProgressDrawable() + progressDrawable.setColor(themeColor) + mBinding.refreshHeader.progressView.setImageDrawable(progressDrawable) + } + + + /** + * 初始化动态和聊天交友tab + */ + private fun initTitleTab() { + val tagList: MutableList = ArrayList() + tagList.add("热门房间") + tagList.add("组队开黑") + mFragmentsBottom.add(RoomHotFragment.newInstance()) + mFragmentsBottom.add(HomePlayFragment.newInstance()) + val commonNavigator = CommonNavigator(context) + commonNavigator.setTitleWrapContent(true) + val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, tagList, false) + magicIndicatorAdapter.setOnBottomItemSelectListener(this) + commonNavigator.adapter = magicIndicatorAdapter + mBinding.magicIndicator.navigator = commonNavigator + commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE + mBinding.viewPager.offscreenPageLimit = 5 + mBinding.viewPager.adapter = + RoomContributeListAdapter(childFragmentManager, mFragmentsBottom) + ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager) + } + + /** + * 底部动态聊天交友 + * + * @param position + * @param view + */ + override fun onBottomItemSelect(position: Int, view: TextView) { + if (mFragmentsBottom.isEmpty()) { + return + } + mBinding.viewPager.currentItem = position + if (position == 1) { + StatisticManager.Instance() + .onEvent(StatisticsProtocol.Event.EVENT_HOME_SCREEN_DONG_TAI_CLICK, "首页_聊天交友切换到动态") + } + } + + /** + * 用户信息更新 + * + * @param event + */ + @Subscribe(threadMode = ThreadMode.MAIN) + fun loadLoginUserInfoEvent(event: LoginUserInfoUpdateEvent?) { + refreshData() + } + + /** + * 用户信息更新 + * + * @param event + */ + @Subscribe(threadMode = ThreadMode.MAIN) + fun loadLoginUserInfoEvent(event: LoadLoginUserInfoEvent?) { + refreshData() + } + + private fun refreshData() { + tryLoadData(false) + } + + private fun setBanner(bannerList: List) { + if (ListUtils.isListEmpty(bannerList)) { + mBinding.rollView.visibility = View.GONE + return + } + mBinding.rollView.visibility = View.VISIBLE + if (!this::bannerAdapter.isInitialized) { + mBinding.rollView.setHintView(object : ColorPointHintView( + mContext, Color.WHITE, mContext.resources.getColor( + R.color.color_66FFFFFF + ) + ) { + override fun makeFocusDrawable(): Drawable { + val dotFocus = GradientDrawable() + dotFocus.setColor(Color.WHITE) + dotFocus.cornerRadius = Util.dip2px( + context, 2f + ).toFloat() + dotFocus.setSize( + Util.dip2px(context, 9f), Util.dip2px( + context, 4f + ) + ) + return dotFocus + } + + override fun makeNormalDrawable(): Drawable { + val dotNormal = GradientDrawable() + dotNormal.setColor(mContext.resources.getColor(R.color.color_66FFFFFF)) + dotNormal.cornerRadius = Util.dip2px( + context, 2f + ).toFloat() + dotNormal.setSize( + Util.dip2px(context, 4f), Util.dip2px( + context, 4f + ) + ) + return dotNormal + } + }) + bannerAdapter = BannerAdapter(bannerList, mContext) + bannerAdapter.setRoundingRadius(ScreenUtil.dip2px(12f)) + bannerAdapter.setHomeGame(true) + mBinding.rollView.setAdapter(bannerAdapter) + mBinding.rollView.setPlayDelay(3000) + //设置透明度 + mBinding.rollView.setAnimationDurtion(500) + } + bannerAdapter.setBannerInfoList(bannerList) + bannerAdapter.notifyDataSetChanged() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/RoomHotFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomHotFragment.kt new file mode 100644 index 000000000..1af741d1c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomHotFragment.kt @@ -0,0 +1,59 @@ +package com.yizhuan.erban.home.fragment + +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.FragmentHotRoomBinding +import com.yizhuan.erban.home.HomeViewModel +import com.yizhuan.erban.home.adapter.HotRoomAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.home.bean.HomeRoom + + +class RoomHotFragment : BaseViewBindingFragment() { + + companion object { + fun newInstance(): RoomHotFragment { + val args = Bundle() + val fragment = RoomHotFragment() + fragment.arguments = args + return fragment + } + } + + private val roomHotAdapter = HotRoomAdapter() + private var page = 1 + private lateinit var rvDelegate: RVDelegate + private val pageSize = 20 + private val homeViewModel: HomeViewModel by activityViewModels() + + override fun init() { + rvDelegate = RVDelegate.Builder() + .setAdapter(roomHotAdapter) + .setRecyclerView(binding.recyclerView) + .setRefreshLayout(binding.refreshLayout) + .setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无房间")) + .setLayoutManager(LinearLayoutManager(mContext)) + .setPageSize(pageSize) + .build() + roomHotAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) + binding.refreshLayout.setOnRefreshListener { loadData(true) } + + homeViewModel.hotRoomLiveData.observe(this) { + rvDelegate.loadData(it) + } + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + binding.refreshLayout.isRefreshing = isRefresh + if (isRefresh) { + page = 1 + } else { + page++ + } + homeViewModel.getHotRoom(page, pageSize) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/presenter/MainFragmentPresenter.java b/app/src/main/java/com/yizhuan/erban/home/presenter/MainFragmentPresenter.java index e17442876..4605757f4 100644 --- a/app/src/main/java/com/yizhuan/erban/home/presenter/MainFragmentPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/home/presenter/MainFragmentPresenter.java @@ -1,32 +1,18 @@ package com.yizhuan.erban.home.presenter; -import android.annotation.SuppressLint; import android.os.Bundle; import androidx.annotation.Nullable; -import com.netease.nim.uikit.common.util.log.LogUtil; import com.yizhuan.erban.base.BaseMvpPresenter; import com.yizhuan.erban.home.view.IMainFragmentView; -import com.yizhuan.xchat_android_core.home.bean.BannerInfo; -import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo; -import com.yizhuan.xchat_android_core.home.model.GameHomeModel; -import com.yizhuan.xchat_android_core.market_verify.event.MarketVerifyUpdateEvent; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.model.AvRoomModel; -import com.yizhuan.xchat_android_core.utils.net.RxHelper; import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack; import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; -import java.util.ArrayList; -import java.util.List; - -import io.reactivex.SingleObserver; import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.disposables.Disposable; /** * @author jiajie @@ -88,7 +74,6 @@ public class MainFragmentPresenter extends BaseMvpPresenter { EventBus.getDefault().unregister(this); } - @Override public IMainFragmentView getMvpView() { if (super.getMvpView() == null) { @@ -98,81 +83,5 @@ public class MainFragmentPresenter extends BaseMvpPresenter { } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onMarketVerifyUpdateEvent(MarketVerifyUpdateEvent event) { - getMvpView().showByMarketCheckingStatus(new ArrayList<>()); - } - - /** - * 获取首页banner - */ - public void getHomeBanner(String type) { - GameHomeModel.get() - .getHomeBanner(type) - .compose(bindToLifecycle()) - .subscribe(new SingleObserver>() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onSuccess(List infos) { - IMainFragmentView iMainFragmentView = getMvpView(); - if (iMainFragmentView != null) - getMvpView().onGetHomeBannerSuccess(infos); - - } - - @Override - public void onError(Throwable e) { - LogUtil.e(e.getMessage()); - } - }); - } - - /** - * 获取首页tag - */ - public void getHomeTag() { - GameHomeModel.get() - .getHomeTag() - .compose(bindToLifecycle()) - .subscribe(new SingleObserver>() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onSuccess(List infos) { - IMainFragmentView iMainFragmentView = getMvpView(); - if (iMainFragmentView != null) - getMvpView().onGetHomeTagSuccess(infos); - - } - - @Override - public void onError(Throwable e) { - LogUtil.e(e.getMessage()); - } - }); - } - - @SuppressLint("CheckResult") - public void getHomeConcerns() { - GameHomeModel.get().getHomeConcerns().compose(RxHelper.handleException()) - .subscribe((result, throwable) -> { - if (throwable != null) { - if (mMvpView != null) { - mMvpView.getFollowRoomFail(); - } - } else { - if (mMvpView != null) { - mMvpView.getFollowRoomsSuccess(result); - } - } - }); - } } diff --git a/app/src/main/java/com/yizhuan/erban/home/presenter/NewUserListPresenter.java b/app/src/main/java/com/yizhuan/erban/home/presenter/NewUserListPresenter.java index 0fc7843a9..cf3e39d96 100644 --- a/app/src/main/java/com/yizhuan/erban/home/presenter/NewUserListPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/home/presenter/NewUserListPresenter.java @@ -35,7 +35,7 @@ public class NewUserListPresenter extends BaseMvpPresenter> loadData(int curPage) { - return HomeModel.get().loadNewUserList( + return HomeModel.INSTANCE.loadNewUserList( String.valueOf(curPage), String.valueOf(Constants.PAGE_SIZE) ) diff --git a/app/src/main/java/com/yizhuan/erban/home/view/IMainFragmentView.java b/app/src/main/java/com/yizhuan/erban/home/view/IMainFragmentView.java index 13120d3f0..f745fe915 100644 --- a/app/src/main/java/com/yizhuan/erban/home/view/IMainFragmentView.java +++ b/app/src/main/java/com/yizhuan/erban/home/view/IMainFragmentView.java @@ -1,14 +1,8 @@ package com.yizhuan.erban.home.view; -import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo; -import com.yizhuan.xchat_android_core.home.bean.BannerInfo; -import com.yizhuan.xchat_android_core.home.bean.HomeConcernsInfo; -import com.yizhuan.xchat_android_core.home.bean.TagListInfo; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_library.base.IMvpBaseView; -import java.util.List; - /** * @author jiajie * @Description @@ -17,69 +11,22 @@ import java.util.List; public interface IMainFragmentView extends IMvpBaseView { - - /** - * 请求打开房间结果 - * - * @param openRoomFailType - * @param arg - */ - void requestOpenRoomResult(int openRoomFailType, Object... arg); - - void showByMarketCheckingStatus(List tagListInfoList); - - void getFollowRoomsSuccess(List infos); - - void getFollowRoomFail(); - /** * 退出房间 */ void exitRoom(RoomInfo roomInfo); - void onGetHomeBannerSuccess(List bannerInfos); - - void onGetHomeTagSuccess(List tagInfos); /** * 假实现,用于在View销毁后 调用View方法导致空指针问题,的一种解决方案 */ class FakeIMainFragmentView implements IMainFragmentView { - @Override - public void requestOpenRoomResult(int openRoomFailType, Object... arg) { - - } - - @Override - public void showByMarketCheckingStatus(List tagListInfoList) { - - } - - @Override - public void getFollowRoomsSuccess(List infos) { - - } - - @Override - public void getFollowRoomFail() { - - } - @Override public void exitRoom(RoomInfo roomInfo) { } - @Override - public void onGetHomeBannerSuccess(List bannerInfos) { - - } - - @Override - public void onGetHomeTagSuccess(List tagInfos) { - - } } diff --git a/app/src/main/java/com/yizhuan/erban/luckymoney/dialog/LuckyMoneyDialog.java b/app/src/main/java/com/yizhuan/erban/luckymoney/dialog/LuckyMoneyDialog.java index a6d6cabe5..fc8659dc1 100644 --- a/app/src/main/java/com/yizhuan/erban/luckymoney/dialog/LuckyMoneyDialog.java +++ b/app/src/main/java/com/yizhuan/erban/luckymoney/dialog/LuckyMoneyDialog.java @@ -20,7 +20,7 @@ import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_library.rxbus.RxBus; import com.yizhuan.erban.luckymoney.view.LuckyMoneyDetailActivity; -import com.yizhuan.erban.team.viewmodel.TeamViewModel; +import com.yizhuan.erban.team.viewmodel.TeamVM; import com.yizhuan.erban.ui.utils.ImageLoadUtils; import com.yizhuan.xchat_android_core.family.bean.FamilyInfo; import com.yizhuan.xchat_android_core.family.model.FamilyModel; @@ -43,7 +43,7 @@ public class LuckyMoneyDialog extends AppCompatDialog implements View.OnClickLis private static final String TAG = "LuckyMoneyDialog"; private LuckyMoneyInfo luckyMoneyInfo; - private TeamViewModel teamViewModel; + private TeamVM teamViewModel; private FamilyInfo myFamilyInfo; private String uuid; private Disposable disposable; @@ -68,7 +68,7 @@ public class LuckyMoneyDialog extends AppCompatDialog implements View.OnClickLis window.setAttributes(params); window.setWindowAnimations(R.style.ErbanCommonWindowAnimationStyle); super.onCreate(savedInstanceState); - teamViewModel = new TeamViewModel(); + teamViewModel = new TeamVM(); myFamilyInfo = FamilyModel.Instance().getMyFamily(); // dialogManager = new DialogManager(getContext()); setCancelable(true); diff --git a/app/src/main/java/com/yizhuan/erban/luckymoney/view/LuckyMoneyCreationActivity.java b/app/src/main/java/com/yizhuan/erban/luckymoney/view/LuckyMoneyCreationActivity.java index 5ba8354b7..e26fb33ea 100644 --- a/app/src/main/java/com/yizhuan/erban/luckymoney/view/LuckyMoneyCreationActivity.java +++ b/app/src/main/java/com/yizhuan/erban/luckymoney/view/LuckyMoneyCreationActivity.java @@ -23,7 +23,7 @@ import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_core.utils.net.BalanceNotEnoughExeption; import com.yizhuan.xchat_android_library.annatation.ActLayoutRes; -import com.yizhuan.erban.team.viewmodel.TeamViewModel; +import com.yizhuan.erban.team.viewmodel.TeamVM; import com.yizhuan.xchat_android_core.family.bean.FamilyInfo; import com.yizhuan.xchat_android_core.family.model.FamilyModel; import com.yizhuan.xchat_android_core.share.bean.SessionType; @@ -51,7 +51,7 @@ public class LuckyMoneyCreationActivity extends BaseBindingActivity> getLuckyMoneyMemberList() { - return Single.create(e -> { - ArrayList memberInfoList = new ArrayList<>(); - for (int i = 0; i < 10; i++) { - TeamMemberInfo memberInfo = new TeamMemberInfo(); - memberInfo.setUid(i); - memberInfo.setNick("家族成员名字要限制在十个字以内" + i); - memberInfoList.add(memberInfo); - } - e.onSuccess(memberInfoList); - }); - } -} diff --git a/app/src/main/java/com/yizhuan/erban/monsterhunting/viewmodel/MonsterHuntingViewModel.java b/app/src/main/java/com/yizhuan/erban/monsterhunting/viewmodel/MonsterHuntingViewModel.java deleted file mode 100644 index 9cb2a63c3..000000000 --- a/app/src/main/java/com/yizhuan/erban/monsterhunting/viewmodel/MonsterHuntingViewModel.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.yizhuan.erban.monsterhunting.viewmodel; - -import android.util.Log; -import com.yizhuan.erban.base.BaseViewModel; -import com.yizhuan.erban.monsterhunting.bean.AttackMonsterResultInfo; -import com.yizhuan.erban.monsterhunting.bean.UpdateMyGoldInfo; -import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterAttackInfo; -import com.yizhuan.xchat_android_core.monsterhunting.model.MonsterHuntingModel; -import com.yizhuan.xchat_android_core.pay.PayModel; -import java.util.Locale; - -public class MonsterHuntingViewModel extends BaseViewModel{ - - private static final String TAG = "MonsterHuntingViewModel"; - public UpdateMyGoldInfo updateMyGoldInfo = new UpdateMyGoldInfo(); - public AttackMonsterResultInfo attackMonsterResultInfo = new AttackMonsterResultInfo(); - - - public void attackMonster(String monsterId,String roomUid,String magicId) { - MonsterHuntingModel.get().attackMonster(monsterId, roomUid, magicId) - .subscribe((serviceResult, throwable) -> { - if (throwable != null) { - // attack fail - } else if (serviceResult != null && serviceResult.isSuccess()) { - MonsterAttackInfo monsterAttackInfo = serviceResult.getData(); - // 扣钱,发送自定义消息,显示动画 - updateMyGold(); - - refreshAttackMonsterResultInfo(serviceResult.getCode(),null, monsterAttackInfo,1); - - // 发送自定义消息,成功后显示动画 - MonsterHuntingModel.get().sendMonsterHuntingMagicMessage(monsterAttackInfo) - .subscribe((chatRoomMessage, throwable1) ->{ - if (chatRoomMessage != null) { - // 显示动画 - MonsterHuntingModel.get().onSendMonsterAttackMessageSuccess(chatRoomMessage); - } else { - throwable1.printStackTrace(); - } - }); - } else if (serviceResult != null && !serviceResult.isSuccess()) { - Log.e(TAG, String.format(Locale.getDefault(), "attackMonster: code:%s, message: %s", - serviceResult.getCode(), serviceResult.getMessage())); - refreshAttackMonsterResultInfo(serviceResult.getCode(), serviceResult.getErrorMessage(), null, 2); - } else { - refreshAttackMonsterResultInfo(-1, serviceResult.getErrorMessage(), null, 3); - } - }); - } - - private void refreshAttackMonsterResultInfo(int code, String errorMessage, MonsterAttackInfo monsterAttackInfo, int status) { - attackMonsterResultInfo.setCode(code); - attackMonsterResultInfo.setErrorMessage(errorMessage); - attackMonsterResultInfo.setMonsterAttackInfo(monsterAttackInfo); - attackMonsterResultInfo.setStatus(status); - } - - public void updateMyGold() { - PayModel.get().getMyRemoteWalletInfo() - .subscribe((walletInfo, throwable) -> { - if (walletInfo != null) { - updateMyGoldInfo.setWalletInfo(walletInfo); - updateMyGoldInfo.setSucceed(true); - } else if (throwable != null) { - updateMyGoldInfo.setSucceed(false); - } - }); - } - -} diff --git a/app/src/main/java/com/yizhuan/erban/team/view/AddMemberActivity.java b/app/src/main/java/com/yizhuan/erban/team/view/AddMemberActivity.java index 3cef711dc..8cac60612 100644 --- a/app/src/main/java/com/yizhuan/erban/team/view/AddMemberActivity.java +++ b/app/src/main/java/com/yizhuan/erban/team/view/AddMemberActivity.java @@ -14,7 +14,7 @@ import com.yizhuan.erban.databinding.ActivityAddTeamMemberBinding; import com.yizhuan.xchat_android_library.annatation.ActLayoutRes; import com.yizhuan.xchat_android_library.utils.ListUtils; import com.yizhuan.erban.team.adapter.AddTeamMemberAdapter; -import com.yizhuan.erban.team.viewmodel.FamilyMemberViewModel; +import com.yizhuan.erban.team.viewmodel.FamilyMemberVM; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.family.bean.FamilyMemberInfo; @@ -35,7 +35,7 @@ public class AddMemberActivity extends BaseBindingActivity selectMembers = new ArrayList<>(); @@ -59,7 +59,7 @@ public class AddMemberSearchActivity extends BaseBindingActivity members = new ArrayList<>(); @@ -43,7 +43,7 @@ public class CreateTeamMessageActivity extends BaseBindingTakePhotoActivity { private TeamListAdapter adapter; - private TeamViewModel teamViewModel; + private TeamVM teamViewModel; private int type; private SelectFriendActivity friendActivity; @@ -50,7 +50,7 @@ public class TeamListFragment extends BaseBindingFragment { private EditText teamName; - private TeamViewModel teamViewModel; + private TeamVM teamViewModel; private String tid; private TeamInfo teamInfo; @@ -39,7 +39,7 @@ public class UpdateTeamNameActivity extends BaseBindingActivity - HomeModel.get().commitFeedback(AuthModel.get().getCurrentUid(), + HomeModel.INSTANCE.commitFeedback(AuthModel.get().getCurrentUid(), edtContent.getText().toString(), edtContact.getText().toString() ) diff --git a/app/src/main/java/com/yizhuan/erban/ui/utils/RVDelegate.java b/app/src/main/java/com/yizhuan/erban/ui/utils/RVDelegate.java index 7c1e65b62..8ee01c282 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/utils/RVDelegate.java +++ b/app/src/main/java/com/yizhuan/erban/ui/utils/RVDelegate.java @@ -10,6 +10,8 @@ import com.chad.library.adapter.base.BaseViewHolder; import com.netease.nim.uikit.common.util.sys.NetworkUtil; import com.yizhuan.erban.base.IDataStatus; import com.yizhuan.erban.common.EmptyViewHelper; +import com.yizhuan.xchat_android_core.bean.response.ListResult; +import com.yizhuan.xchat_android_core.utils.LogUtils; import com.yizhuan.xchat_android_library.utils.ListUtils; @@ -41,6 +43,18 @@ public class RVDelegate { adapter.bindToRecyclerView(recyclerView); } + public void loadData(ListResult result) { + if (result == null) { + LogUtils.d("result == null,skip layout"); + return; + } + if (result.isSuccess()) { + loadData(result.getData(), result.isRefresh()); + } else { + loadErr(result.isSuccess()); + } + } + public void loadData(List data, boolean isRefresh) { if (isRefresh) { setNewData(data); diff --git a/app/src/main/res/drawable-xhdpi/bg_home_top.png b/app/src/main/res/drawable-xhdpi/bg_home_top.png new file mode 100644 index 000000000..5648dcfcd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bg_home_top.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_home_rank.png b/app/src/main/res/drawable-xhdpi/ic_home_rank.png index 41f870a1a..04399fed1 100644 Binary files a/app/src/main/res/drawable-xhdpi/ic_home_rank.png and b/app/src/main/res/drawable-xhdpi/ic_home_rank.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_home_search.png b/app/src/main/res/drawable-xhdpi/ic_home_search.png index 37dff0dc4..97e5c0d30 100644 Binary files a/app/src/main/res/drawable-xhdpi/ic_home_search.png and b/app/src/main/res/drawable-xhdpi/ic_home_search.png differ diff --git a/app/src/main/res/drawable-xxhdpi/bg_home_search.xml b/app/src/main/res/drawable-xxhdpi/bg_home_search.xml index 17e0de648..db705e3b3 100644 --- a/app/src/main/res/drawable-xxhdpi/bg_home_search.xml +++ b/app/src/main/res/drawable-xxhdpi/bg_home_search.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_game_home.xml b/app/src/main/res/layout/fragment_game_home.xml deleted file mode 100644 index db20552e5..000000000 --- a/app/src/main/res/layout/fragment_game_home.xml +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 000000000..fb7b6752b --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 304ddd60e..c98dd3b15 100644 --- a/app/src/main/res/layout/fragment_home_room_tab.xml +++ b/app/src/main/res/layout/fragment_home_room_tab.xml @@ -2,7 +2,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.yizhuan.erban.home.fragment.HomeOtherTabFragment"> + > - - - - - - - - diff --git a/app/src/module_community/res/layout/fragment_home_dynamic.xml b/app/src/main/res/layout/fragment_hot_room.xml similarity index 54% rename from app/src/module_community/res/layout/fragment_home_dynamic.xml rename to app/src/main/res/layout/fragment_hot_room.xml index bcb34cb77..29e1d07b6 100644 --- a/app/src/module_community/res/layout/fragment_home_dynamic.xml +++ b/app/src/main/res/layout/fragment_hot_room.xml @@ -1,6 +1,7 @@ - @@ -9,6 +10,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" - /> + android:paddingStart="8dp" + android:paddingEnd="8dp" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ktv.xml b/app/src/main/res/layout/fragment_ktv.xml deleted file mode 100644 index 7af331331..000000000 --- a/app/src/main/res/layout/fragment_ktv.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml deleted file mode 100644 index c15027573..000000000 --- a/app/src/main/res/layout/fragment_main.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_party.xml b/app/src/main/res/layout/fragment_party.xml new file mode 100644 index 000000000..c0cee0ef5 --- /dev/null +++ b/app/src/main/res/layout/fragment_party.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 2958af2cf..34237b5e9 100644 --- a/app/src/main/res/layout/fragment_recommend.xml +++ b/app/src/main/res/layout/fragment_recommend.xml @@ -1,24 +1,126 @@ - + - + + + + + + + + - + + - - - + android:background="@color/transparent" + app:elevation="0dp" + app:layout_behavior="com.yizhuan.erban.ui.widget.AppBarLayoutBehavior"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_room_common.xml b/app/src/main/res/layout/item_room_common.xml new file mode 100644 index 000000000..11b127ebf --- /dev/null +++ b/app/src/main/res/layout/item_room_common.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xhdpi/ic_home_search.png b/app/src/main/res/mipmap-xhdpi/ic_home_search.png deleted file mode 100644 index ee5e07a79..000000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_home_search.png and /dev/null differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 2e2cd30ea..aecb1e018 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -261,6 +261,7 @@ #ffc160 #7ee7f6 #999999 + #444444 #4D4D4D #CCCCCC #99000000 diff --git a/app/src/module_community/java/com/yizhuan/erban/community/square/SquareFragment.java b/app/src/module_community/java/com/yizhuan/erban/community/square/SquareFragment.java index 13dbcc50e..b9efd7ce2 100644 --- a/app/src/module_community/java/com/yizhuan/erban/community/square/SquareFragment.java +++ b/app/src/module_community/java/com/yizhuan/erban/community/square/SquareFragment.java @@ -215,7 +215,7 @@ public class SquareFragment extends BaseFragment implements TopMagicIndicatorAd @SuppressWarnings("CheckResult") private void getUnReadCount() { - HomeModel.get().getUnreadCount(AuthModel.get().getCurrentUid()) + HomeModel.INSTANCE.getUnreadCount(AuthModel.get().getCurrentUid()) .compose(bindToLifecycle()) .subscribe(new BiConsumer() { @Override diff --git a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/team/activity/HallTeamMessageActivity.java b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/team/activity/HallTeamMessageActivity.java index 760588dcf..df840ebee 100644 --- a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/team/activity/HallTeamMessageActivity.java +++ b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/team/activity/HallTeamMessageActivity.java @@ -31,7 +31,7 @@ import com.yizhuan.erban.module_hall.team.HTeamDataManager; import com.yizhuan.erban.module_hall.team.adapter.HTeamMemberListAdapter; import com.yizhuan.erban.team.view.NimTeamManagementActivity; import com.yizhuan.erban.team.view.NimTeamMessageFragment; -import com.yizhuan.erban.team.viewmodel.TeamViewModel; +import com.yizhuan.erban.team.viewmodel.TeamVM; import com.yizhuan.erban.ui.im.avtivity.BaseMessageActivity; import com.yizhuan.xchat_android_core.initial.InitialModel; import com.yizhuan.xchat_android_core.initial.bean.InitInfo; @@ -81,7 +81,7 @@ public class HallTeamMessageActivity extends BaseMessageActivity { private NimTeamMessageFragment fragment; - private TeamViewModel teamViewModel; + private TeamVM teamViewModel; private ImageView teamAvatar; @@ -108,7 +108,7 @@ public class HallTeamMessageActivity extends BaseMessageActivity { HTeamDataManager.get().init(sessionId); findViews(); - teamViewModel = new TeamViewModel(); + teamViewModel = new TeamVM(); openTeamManagementPage(); diff --git a/app/src/module_room_chat/java/com/yizhuan/tutu/room_chat/activity/NimTeamRoomMessageActivity.java b/app/src/module_room_chat/java/com/yizhuan/tutu/room_chat/activity/NimTeamRoomMessageActivity.java index 0b67ca25e..cad15f2de 100644 --- a/app/src/module_room_chat/java/com/yizhuan/tutu/room_chat/activity/NimTeamRoomMessageActivity.java +++ b/app/src/module_room_chat/java/com/yizhuan/tutu/room_chat/activity/NimTeamRoomMessageActivity.java @@ -7,7 +7,6 @@ import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; -import android.widget.Toast; import com.netease.nim.uikit.api.NimUIKit; import com.netease.nim.uikit.api.model.SimpleCallback; @@ -30,7 +29,7 @@ import com.trello.rxlifecycle3.android.ActivityEvent; import com.yizhuan.erban.R; import com.yizhuan.erban.team.view.NimTeamMessageFragment; import com.yizhuan.erban.team.view.TeamMemberListActivity; -import com.yizhuan.erban.team.viewmodel.TeamViewModel; +import com.yizhuan.erban.team.viewmodel.TeamVM; import com.yizhuan.erban.ui.im.actions.FamilyGameAction; import com.yizhuan.erban.ui.im.actions.LuckyMoneyAction; import com.yizhuan.erban.ui.im.avtivity.BaseMessageActivity; @@ -81,7 +80,7 @@ public class NimTeamRoomMessageActivity extends BaseMessageActivity { private NimTeamMessageFragment fragment; - private TeamViewModel teamViewModel; + private TeamVM teamViewModel; private View rootView; @@ -113,7 +112,7 @@ public class NimTeamRoomMessageActivity extends BaseMessageActivity { findViews(); - teamViewModel = new TeamViewModel(); + teamViewModel = new TeamVM(); registerTeamUpdateObserver(true); diff --git a/core/build.gradle b/core/build.gradle index fa05cce45..1f316f3cb 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -100,7 +100,7 @@ dependencies { // RxJava support for Room api 'androidx.room:room-rxjava2:2.2.5' - api 'com.tencent.bugly:crashreport_upgrade:1.4.2' + api 'com.tencent.bugly:crashreport_upgrade:1.5.23' api project(':nim_uikit') api project(':library') diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/GameHomeModel.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/GameHomeModel.java index 9832b52e1..2e9c8a2c9 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/GameHomeModel.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/GameHomeModel.java @@ -67,7 +67,7 @@ public class GameHomeModel extends BaseModel { } public Single> getHomeTabHome(String tabId) { - return api.apiHomeTabHome(tabId, String.valueOf(AuthModel.get().getCurrentUid()), + return api.apiHomeTabHome(null, String.valueOf(AuthModel.get().getCurrentUid()), CommunityConstant.VERSION_VALID_TYPE, AuthModel.get().getTicket()) .compose(RxHelper.handleBeanData()) @@ -171,7 +171,7 @@ public class GameHomeModel extends BaseModel { * @param ticket * @return */ - @GET("/home/tab/home") + @GET("/home/tab/homeV2") Single>> apiHomeTabHome( @Query("tabId") String tabId, @Query("uid") String uid, diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt index 8bdbeced3..56d52cf64 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt @@ -1,44 +1,23 @@ -package com.yizhuan.xchat_android_core.home.model; +package com.yizhuan.xchat_android_core.home.model -import com.yizhuan.xchat_android_core.auth.AuthModel; -import com.yizhuan.xchat_android_core.base.BaseModel; -import com.yizhuan.xchat_android_core.bean.response.ServiceResult; -import com.yizhuan.xchat_android_core.community.bean.UnReadCountInfo; -import com.yizhuan.xchat_android_core.home.bean.TabInfo; -import com.yizhuan.xchat_android_core.user.bean.UserInfo; -import com.yizhuan.xchat_android_core.utils.net.RxHelper; -import com.yizhuan.xchat_android_library.net.rxnet.RxNet; +import com.yizhuan.xchat_android_core.auth.AuthModel +import com.yizhuan.xchat_android_core.base.BaseModel +import com.yizhuan.xchat_android_core.bean.response.ServiceResult +import com.yizhuan.xchat_android_core.community.CommunityConstant +import com.yizhuan.xchat_android_core.community.bean.UnReadCountInfo +import com.yizhuan.xchat_android_core.home.bean.* +import com.yizhuan.xchat_android_core.user.bean.UserInfo +import com.yizhuan.xchat_android_core.utils.net.RxHelper +import com.yizhuan.xchat_android_core.utils.net.launchRequest +import com.yizhuan.xchat_android_library.net.rxnet.RxNet +import io.reactivex.Single +import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Query -import java.util.ArrayList; -import java.util.List; +object HomeModel : BaseModel() { -import io.reactivex.Single; -import io.reactivex.SingleSource; -import io.reactivex.functions.Function; -import retrofit2.http.GET; -import retrofit2.http.POST; -import retrofit2.http.Query; - -public class HomeModel extends BaseModel implements IHomeModel { - private static final String TAG = "HomeModel"; - - private volatile static IHomeModel instance; - private Api api; - - private HomeModel() { - api = RxNet.create(Api.class); - } - - public static IHomeModel get() { - if (instance == null) { - synchronized (HomeModel.class) { - if (instance == null) { - instance = new HomeModel(); - } - } - } - return instance; - } + private val api = RxNet.create(Api::class.java) /** * 提交反馈 @@ -48,26 +27,21 @@ public class HomeModel extends BaseModel implements IHomeModel { * @param contact * @return */ - @Override - public Single commitFeedback(long uid, String feedbackDesc, String contact) { + fun commitFeedback(uid: Long, feedbackDesc: String, contact: String): Single { return api.commitFeedback( - String.valueOf(uid), - feedbackDesc, - contact, - AuthModel.get().getTicket() + uid.toString(), + feedbackDesc, + contact, + AuthModel.get().ticket ) - .flatMap(new Function>() { - @Override - public SingleSource apply(ServiceResult serviceResult) throws Exception { - if (serviceResult.isSuccess()) { - return Single.just("反馈成功"); - - } else { - return Single.error(new Throwable(serviceResult.getMessage())); - } - } - }) - .compose(RxHelper.handleSchedulers()); + .flatMap { serviceResult -> + if (serviceResult.isSuccess) { + Single.just("反馈成功") + } else { + Single.error(Throwable(serviceResult.message)) + } + } + .compose(RxHelper.handleSchedulers()) } /** @@ -77,49 +51,113 @@ public class HomeModel extends BaseModel implements IHomeModel { * @param pageSize * @return */ - @Override - public Single> loadNewUserList(String page, - String pageSize) { + fun loadNewUserList( + page: String, + pageSize: String + ): Single> { return api.loadNewUserList( - page, - pageSize + page, + pageSize ) - .compose(RxHelper.handleSchedulers()) - .flatMap(listServiceResult -> { - if (listServiceResult != null) { - if (listServiceResult.isSuccess()) { - return Single.just(listServiceResult.getData() != null ? - listServiceResult.getData() : new ArrayList<>()); - } else { - return Single.error(new Throwable(listServiceResult.getMessage())); - } - } else { - return Single.error(new Throwable("发生异常")); - } - }); - } - - @Override - public Single getUnreadCount(long uid) { - return api.getUnreadCount(uid).flatMap(new Function, SingleSource>() { - @Override - public SingleSource apply(ServiceResult unReadCountInfoServiceResult) throws Exception { - if (unReadCountInfoServiceResult.isSuccess()) { - UnReadCountInfo unReadCountInfo = unReadCountInfoServiceResult.getData(); - if (unReadCountInfo != null) { - return Single.just(unReadCountInfoServiceResult.getData().getTotal()); - } else { - return Single.just(0); - } + .compose(RxHelper.handleSchedulers()) + .flatMap { + if (it.isSuccess) { + return@flatMap Single.just(it.data) } else { - return Single.just(0); + return@flatMap Single.error(Throwable(it.message)) } } - }).compose(RxHelper.handleSchAndExce()); } - private interface Api { + fun getUnreadCount(uid: Long): Single { + return api.getUnreadCount(uid) + .flatMap { unReadCountInfoServiceResult -> + if (unReadCountInfoServiceResult.isSuccess) { + val unReadCountInfo = unReadCountInfoServiceResult.data + if (unReadCountInfo != null) { + Single.just(unReadCountInfoServiceResult.data?.total ?: 0) + } else { + Single.just(0) + } + } else { + Single.just(0) + } + }.compose(RxHelper.handleSchAndExce()) + } + val homePlay: Single> + get() = api.apiHomePlay() + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()) + + val homePlayV2: Single> + get() = api.apiHomePlayV2() + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()) + + val homeTag: Single> + get() = api.apiHomeTag( + AuthModel.get().currentUid.toString(), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().ticket + ) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()) + + fun getHomeTabMap(tabId: String, page: Int, pageSize: Int): Single> { + return api.apiHomeTabMap( + tabId, page.toString(), pageSize.toString(), AuthModel.get().currentUid.toString(), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().ticket + ) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()) + } + + fun getHomeTabHome(tabId: String): Single> { + return api.apiHomeTabHome( + tabId, AuthModel.get().currentUid.toString(), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().ticket + ) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()) + } + + suspend fun getHomeBanner(type: String): List? = + launchRequest { + api.apiHomeBanner( + type, AuthModel.get().currentUid.toString(), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().ticket + ) + } + + suspend fun getHotRoom(pageNum: Int, pageSize: Int): List? = + launchRequest { + api.getHotRoom(pageNum, pageSize) + } + + + val homeConcerns: Single> + get() = api.apiHomeConcerns( + AuthModel.get().currentUid.toString(), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().ticket + ) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()) + + val roomShortcut: Single + get() = api.apiRoomShortcut( + AuthModel.get().currentUid.toString(), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().ticket + ) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()) + + private interface Api { /** * 提交反馈 * @@ -130,18 +168,20 @@ public class HomeModel extends BaseModel implements IHomeModel { * @return */ @POST("/feedback") - Single commitFeedback(@Query("uid") String uid, - @Query("feedbackDesc") String feedbackDesc, - @Query("contact") String contact, - @Query("ticket") String ticket); + fun commitFeedback( + @Query("uid") uid: String, + @Query("feedbackDesc") feedbackDesc: String, + @Query("contact") contact: String, + @Query("ticket") ticket: String + ): Single> /** * 获取首页tab数据 * * @return */ - @GET("/room/tag/v3/top") - Single>> getMainTabList(); + @get:GET("/room/tag/v3/top") + val mainTabList: Single>> /** * 获取新人列表 @@ -151,8 +191,10 @@ public class HomeModel extends BaseModel implements IHomeModel { * @return */ @GET("/user/list/new") - Single>> loadNewUserList(@Query("page") String page, - @Query("pageSize") String pageSize); + fun loadNewUserList( + @Query("page") page: String, + @Query("pageSize") pageSize: String + ): Single>> /** * 获取互动消息未读数量 @@ -161,6 +203,129 @@ public class HomeModel extends BaseModel implements IHomeModel { * @return */ @POST("interactive/unreadCount") - Single> getUnreadCount(@Query("uid") long uid); + fun getUnreadCount(@Query("uid") uid: Long): Single> + + + /** + * 首页交友扩列 + * + * @return - + */ + @GET("/home/play") + fun apiHomePlay(): Single>> + + /** + * 首页聊天交友 + * + * @return - + */ + @GET("/home/roomListV2") + fun apiHomePlayV2(): Single>> + + /** + * 首页推荐房间标签 + * + * @param uid + * @param types + * @param ticket + * @return + */ + @GET("/home/tag") + fun apiHomeTag( + @Query("uid") uid: String, + @Query("types") types: String, + @Query("ticket") ticket: String + ): Single>> + + /** + * 首页更多房间 + * + * @param tabId + * @param page + * @param pageSize + * @param uid + * @param types + * @param ticket + * @return + */ + @GET("/home/tab/map") + fun apiHomeTabMap( + @Query("tabId") tabId: String, + @Query("page") page: String, + @Query("pageSize") pageSize: String, + @Query("uid") uid: String, + @Query("types") types: String, + @Query("ticket") ticket: String + ): Single>> + + /** + * 首页推荐房间 + * + * @param tabId + * @param uid + * @param types + * @param ticket + * @return + */ + @GET("/home/tab/home") + fun apiHomeTabHome( + @Query("tabId") tabId: String, + @Query("uid") uid: String, + @Query("types") types: String, + @Query("ticket") ticket: String + ): Single>> + + /** + * 首页Banner + * + * @param type + * @param uid + * @param types + * @param ticket + * @return + */ + @GET("/home/banner") + suspend fun apiHomeBanner( + @Query("type") type: String, + @Query("uid") uid: String, + @Query("types") types: String, + @Query("ticket") ticket: String + ): ServiceResult> + + /** + * 首页热门房间 + * + * @return + */ + @GET("/home/hotRoom") + suspend fun getHotRoom( + @Query("pageNum") pageNum: Int, + @Query("pageSize") pageSize: Int + ): ServiceResult> + + + /** + * 首页顶部收藏房间列表 + * + * @param uid + * @param types + * @param ticket + * @return + */ + @GET("/home/concerns") + fun apiHomeConcerns( + @Query("uid") uid: String, + @Query("types") types: String, + @Query("ticket") ticket: String + ): Single>> + + + @GET("/room/shortcut/recommend") + fun apiRoomShortcut( + @Query("uid") uid: String, + @Query("types") types: String, + @Query("ticket") ticket: String + ): Single> } -} + +} \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/IHomeModel.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/IHomeModel.java deleted file mode 100644 index 4df655f16..000000000 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/IHomeModel.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.yizhuan.xchat_android_core.home.model; - -import com.yizhuan.xchat_android_core.base.IModel; -import com.yizhuan.xchat_android_core.user.bean.UserInfo; - -import java.util.List; - -import io.reactivex.Single; - -public interface IHomeModel extends IModel { - - /** - * 提交反馈 - * - * @param uid - * @param feedbackDesc - * @param contact - * @return - */ - Single commitFeedback(long uid, String feedbackDesc, String contact); - - /** - * 获取新人列表 - * - * @param page - * @param pageSize - * @return - */ - Single> loadNewUserList(String page, - String pageSize); - - - Single getUnreadCount(long uid); -} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/bean/response/ListResult.kt b/core/src/main/java/com/yizhuan/xchat_android_core/bean/response/ListResult.kt new file mode 100644 index 000000000..845284d23 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/bean/response/ListResult.kt @@ -0,0 +1,22 @@ +package com.yizhuan.xchat_android_core.bean.response + +data class ListResult( + val isSuccess: Boolean, + val isRefresh: Boolean, + val data: List? = null +) { + companion object { + + fun success(data: List?, pageNum: Int): ListResult { + return ListResult(true, pageNum == 1, data) + } + + fun failed(pageNum: Int): ListResult { + return ListResult(false, pageNum == 1, null) + } + } + +} + + + diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/utils/net/RxExtension.kt b/core/src/main/java/com/yizhuan/xchat_android_core/utils/net/RxExtension.kt index 7ef93873b..f5db7588f 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/utils/net/RxExtension.kt +++ b/core/src/main/java/com/yizhuan/xchat_android_core/utils/net/RxExtension.kt @@ -78,3 +78,21 @@ fun Single.io2main(): Single { } +suspend inline fun launchRequest( + crossinline block: suspend () -> ServiceResult +): T? { + return try { + block() + } catch (e: Exception) { + e.printStackTrace() + if (e is IOException) throw Throwable("网络异常,请检查你的网络再试") + else throw e + }.run { + if (isSuccess) { + data + } else { + throw ServerException(message, code) + } + } +} + diff --git a/core/src/model_community/java/com/yizhuan/xchat_android_core/community/bean/UnReadCountInfo.java b/core/src/model_community/java/com/yizhuan/xchat_android_core/community/bean/UnReadCountInfo.java index abad71ceb..665af358c 100644 --- a/core/src/model_community/java/com/yizhuan/xchat_android_core/community/bean/UnReadCountInfo.java +++ b/core/src/model_community/java/com/yizhuan/xchat_android_core/community/bean/UnReadCountInfo.java @@ -2,9 +2,7 @@ package com.yizhuan.xchat_android_core.community.bean; import java.io.Serializable; -import lombok.Data; -@Data public class UnReadCountInfo implements Serializable { /** @@ -20,4 +18,44 @@ public class UnReadCountInfo implements Serializable { private int total; private int reply; private int like; + + public int getComment() { + return comment; + } + + public void setComment(int comment) { + this.comment = comment; + } + + public int getShare() { + return share; + } + + public void setShare(int share) { + this.share = share; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public int getReply() { + return reply; + } + + public void setReply(int reply) { + this.reply = reply; + } + + public int getLike() { + return like; + } + + public void setLike(int like) { + this.like = like; + } }