diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1e725bd35..fd9da0c1d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -603,6 +603,10 @@ android:name=".home.activity.CollectionRoomActivity" android:label="收藏房间" android:screenOrientation="portrait" /> + mFragments; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home_more_room); + ButterKnife.bind(this); + initTitleBar("房间",true); + initRoomTitleTab(); + } + + public static void start(Context context) { + Intent intent = new Intent(context, HomeMoreRoomActivity.class); + context.startActivity(intent); + } + + + private void initRoomTitleTab() { + List mTabInfoList = new ArrayList<>(); + if (!ListUtils.isListEmpty(mFragments)) { + mFragments.clear(); + } + mFragments = new ArrayList<>(); + + HomeModel.get().getHomeTag().subscribe((serviceResult, throwable) -> { + if (throwable != null) { + } else { + List info = serviceResult; + 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); + magicIndicatorAdapter.setOnItemSelectListener(this); + + 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); +// StatusBarUtil.StatusBarLightMode(this); +// } + + @Override + public void onItemSelect(int position, TextView view) { +// if (mHomeTitleInfos == null) { +// return; +// } + if (mFragments == null || mFragments.isEmpty()) { + return; + } + Fragment fragment = mFragments.get(position); + if (fragment == null) { + return; + } + + viewPager.setCurrentItem(position); + + } +} diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/HomePlayAdapter.java b/app/src/main/java/com/yizhuan/erban/home/adapter/HomePlayAdapter.java index 2e679b87b..de173f039 100644 --- a/app/src/main/java/com/yizhuan/erban/home/adapter/HomePlayAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/HomePlayAdapter.java @@ -10,8 +10,10 @@ import android.widget.TextView; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nim.uikit.support.glide.GlideApp; import com.yizhuan.erban.R; import com.yizhuan.erban.avroom.activity.AVRoomActivity; +import com.yizhuan.erban.common.widget.CircleImageView; import com.yizhuan.erban.community.dynamic.view.DynamicDetailActivity; import com.yizhuan.erban.community.widget.DynamicNickDetailWidget; import com.yizhuan.erban.home.bean.HomePlayInfo; @@ -44,16 +46,52 @@ public class HomePlayAdapter extends BaseQuickAdapter AVRoomActivity.start(mContext,item.getUid())); } - - } diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/GameHomeFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/GameHomeFragment.java index 975484d28..b04b97072 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/GameHomeFragment.java +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/GameHomeFragment.java @@ -36,6 +36,7 @@ import android.widget.LinearLayout; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; +import android.widget.Toast; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; @@ -61,6 +62,7 @@ import com.yizhuan.erban.base.list.CommonAdapter; import com.yizhuan.erban.bindadapter.BaseAdapter; import com.yizhuan.erban.common.widget.dialog.DialogManager; 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.MainMagicIndicatorAdapter; import com.yizhuan.erban.home.bean.HomeTagInfo; @@ -162,11 +164,9 @@ public class GameHomeFragment extends BaseMvpFragment mHomeTitleInfos; + private List mFragments; private volatile boolean isUserLogin; - private volatile boolean initHomeTitle; - /** * 动态 @@ -209,14 +209,14 @@ public class GameHomeFragment extends BaseMvpFragment { mBinding.refreshLayout.setRefreshing(false); + initRoomTitleTab(); + initBanner(); EventBus.getDefault().post(new RefreshHomeDataEvent()); }); } @@ -287,94 +291,11 @@ public class GameHomeFragment extends BaseMvpFragment homeTitleInfos) { -// if (ListUtils.isListEmpty(homeTitleInfos)) { -// return; -// } -// initHomeTitle = true; -// UserInfo userInfo = UserModel.get().getCacheLoginUserInfo(); -// int gender = 3; -// if (userInfo != null) { -// gender = userInfo.getGender(); -// } -// List mTabInfoList = new ArrayList<>(); -// if (!ListUtils.isListEmpty(mFragments)) { -// mFragments.clear(); -// } -// mFragments = new ArrayList<>(); -// -// // 审核中模式去掉这个 tab -// if (MarketVerifyModel.get().isMarketChecking()) { -// Iterator iterator = homeTitleInfos.iterator(); -// while (iterator.hasNext()) { -// HomeTitleInfo next = iterator.next(); -// // 没法准确判断「合拍男神女神」只能是把第一个可以下拉的 item 给删除掉 -// if (!ListUtils.isListEmpty(next.getOpts())) { -// iterator.remove(); -// } -// } -// } -// -// for (HomeTitleInfo homeTitleInfo : homeTitleInfos) { -// //过滤对象是空和没有标签名同时也没有子标签的情况 -// if (homeTitleInfo == null || (TextUtils.isEmpty(homeTitleInfo.getName()) && !homeTitleInfo.hasSubTitle())) { -// continue; -// } -// Log.e(TAG, "initTitleTab: " + homeTitleInfo); -// HomeTitleInfo defaultValue = homeTitleInfo.getDefault(gender); -// CharSequence title; -// int tabId; -// Fragment fragment; -// if (defaultValue != null) { -// String name = defaultValue.getName(); -// if (name != null) { -// name = name.trim(); -// } -// title = getArrowSpannableString(false, name); -// tabId = defaultValue.getId(); -// fragment = RecommendationFragment.newInstance(String.valueOf(tabId)); -// -// } else { -// String name = homeTitleInfo.getName(); -// if (name != null) { -// name = name.trim(); -// } -// title = name; -// tabId = homeTitleInfo.getTabId(); -// fragment = HomeOtherTabFragment.newInstance(tabId); -// } -// mFragments.add(fragment); -// mTabInfoList.add(title); -// } -// -// CommonNavigator commonNavigator = new CommonNavigator(getContext()); -// MainMagicIndicatorAdapter magicIndicatorAdapter = new MainMagicIndicatorAdapter(getContext(), mTabInfoList); -// 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)); -// mBinding.viewPager.addOnPageChangeListener(new OnPageSelectedListener() { -// @Override -// public void onPageSelected(int position) { -// mLastPosition = position; -// } -// }); -// ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager); -// } - - /** * 测试tab */ private void initRoomTitleTab() { - initHomeTitle = true; List mTabInfoList = new ArrayList<>(); if (!ListUtils.isListEmpty(mFragments)) { mFragments.clear(); @@ -396,7 +317,7 @@ public class GameHomeFragment extends BaseMvpFragment tagListInfoList) { - if (MarketVerifyModel.get().isMarketChecking() && mHomeTitleInfos != null) { - Iterator iterator = mHomeTitleInfos.iterator(); - while (iterator.hasNext()) { - HomeTitleInfo next = iterator.next(); - // 没法准确判断「合拍男神女神」只能是把第一个可以下拉的 item 给删除掉 - if (!ListUtils.isListEmpty(next.getOpts())) { - iterator.remove(); - initHomeTitle = false; - break; - } - } - refreshData(); - } + } @Override @@ -703,9 +612,9 @@ public class GameHomeFragment extends BaseMvpFragment bannerList) { + public void initBanner() { + HomeModel.get().getHomeBanner("1").subscribe((serviceResult, throwable) -> { + if (throwable != null) { + } else { + List info = serviceResult; + setBanner(info); + } + }); + + + } + + private void setBanner(List bannerList){ //审核中状态,去掉跳转房间banner if (MarketVerifyModel.get().isMarketChecking()) { Iterator iterator = bannerList.iterator(); @@ -1164,7 +1076,6 @@ public class GameHomeFragment extends BaseMvpFragment totalHomeItemList = new ArrayList<>(); + + public static HomeTabHomeFragment newInstance(int tabId) { + + Bundle args = new Bundle(); + args.putString(PARAM_TAB_ID, String.valueOf(tabId)); + HomeTabHomeFragment fragment = new HomeTabHomeFragment(); + fragment.setArguments(args); + return fragment; + } + + public HomeTabHomeFragment() { + // Required empty public constructor + } + + @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_room_tab; + } + + @Override + public void onFindViews() { + super.onFindViews(); + recyclerView = mView.findViewById(R.id.recycler_view); + + initRecyclerView(); + + } + + + /** + * 刷新数据 + */ + private void refreshData() { + getData(); + } + + + + /** + * 请求数据 + */ + @SuppressLint("CheckResult") + private void getData() { + HomeModel.get() + .getHomeTabHome(tabId) + .compose(RxHelper.handleSchedulers()) + .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)) + .subscribe((serviceResult, throwable) -> { + if (throwable == null) { + if (ListUtils.isListEmpty(serviceResult)) { + showNoData(); + mHomeRoomAdapter.notifyDataSetChanged(); + } + mHomeRoomAdapter.setNewData(serviceResult); + mHomeRoomAdapter.notifyDataSetChanged(); + + } else { + if (!(throwable instanceof CancellationException)) { + toast("请求失败,请稍后再试!!" + throwable.getMessage()); + } + } + }); + } + + private void initRecyclerView() { + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + recyclerView.setItemAnimator(null); + mHomeRoomAdapter = new HomeRoomFragmentAdapter(getContext()); + mHomeRoomAdapter.setEnableLoadMore(false); + GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), ROWS); + mHomeRoomAdapter.setEnableLoadMore(false); + recyclerView.setLayoutManager(gridLayoutManager); + recyclerView.setAdapter(mHomeRoomAdapter); + + View emptyView = getLayoutInflater().inflate(R.layout.layout_home_empty_no_header, null); + ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + emptyView.setLayoutParams(lp); + mHomeRoomAdapter.setEmptyView(emptyView); + + } + + @Override + public void initiate() { + refreshData(); + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + } + + @SuppressLint("ResourceType") + @Override + public void showNoData(View view, int drawable, CharSequence charSequence) { + if (!checkActivityValid()) { + return; + } + + if (view == null) { + MLog.error(this, "xuwakao, showNoData view is NULL"); + return; + } + View status = view.findViewById(R.id.status_layout); + if (status == null || status.getId() <= 0) { + MLog.error(this, "xuwakao, had not set layout id "); + return; + } + NoDataFragment fragment = NoDataFragment.newInstance(R.layout.layout_home_empty_no_header, drawable, charSequence); + fragment.setListener(getLoadListener()); + getChildFragmentManager().beginTransaction().replace(status.getId(), fragment, STATUS_TAG).commitAllowingStateLoss(); + } +} 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 index 50d9a4100..2583844ff 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabMapFragment.java +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeTabMapFragment.java @@ -25,17 +25,17 @@ import java.util.List; import java.util.concurrent.CancellationException; /** - * 语音排队 没用下拉式的tab + * */ public class HomeTabMapFragment extends BaseFragment { - public static final int ROWS = 3; + public static final int ROWS = 2; private static final String PARAM_TAB_ID = "tabId"; private RecyclerView recyclerView; private String tabId; - private int pageIndex = 1; - private static final int PAGE_SIZE = 20; private HomeRoomFragmentAdapter mHomeRoomAdapter; private final Object lock = new Object(); + private static final int PAGE = 1; + private static final int PAGE_SIZE = 20; /** * 是否包含了banner */ @@ -70,16 +70,14 @@ public class HomeTabMapFragment extends BaseFragment { @Override public int getRootLayoutId() { - return R.layout.fragment_home_room_tab; + return R.layout.fragment_home_tab_map; } @Override public void onFindViews() { super.onFindViews(); recyclerView = mView.findViewById(R.id.recycler_view); - initRecyclerView(); - } @@ -90,15 +88,13 @@ public class HomeTabMapFragment extends BaseFragment { getData(); } - - /** * 请求数据 */ @SuppressLint("CheckResult") private void getData() { HomeModel.get() - .getHomeTabMap(tabId,pageIndex, PAGE_SIZE) + .getHomeTabMap(tabId,PAGE,PAGE_SIZE) .compose(RxHelper.handleSchedulers()) .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)) .subscribe((serviceResult, throwable) -> { diff --git a/app/src/main/java/com/yizhuan/erban/home/model/HomeModel.java b/app/src/main/java/com/yizhuan/erban/home/model/HomeModel.java index 1816b75c9..eceb648a3 100644 --- a/app/src/main/java/com/yizhuan/erban/home/model/HomeModel.java +++ b/app/src/main/java/com/yizhuan/erban/home/model/HomeModel.java @@ -8,6 +8,7 @@ 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.home.bean.BannerInfo; import com.yizhuan.xchat_android_core.utils.net.RxHelper; import com.yizhuan.xchat_android_library.net.rxnet.RxNet; @@ -50,13 +51,30 @@ public class HomeModel extends BaseModel { } public Single> getHomeTabMap(String tabId, int page, int pageSize) { - return api.apiHomeTabMap(tabId,String.valueOf(page),String.valueOf(pageSize),String.valueOf(AuthModel.get().getCurrentUid()), + return api.apiHomeTabMap(tabId, String.valueOf(page), String.valueOf(pageSize), String.valueOf(AuthModel.get().getCurrentUid()), CommunityConstant.VERSION_VALID_TYPE, AuthModel.get().getTicket()) .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()); } + public Single> getHomeTabHome(String tabId) { + return api.apiHomeTabHome(tabId,String.valueOf(AuthModel.get().getCurrentUid()), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().getTicket()) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()); + } + + public Single> getHomeBanner(String type) { + return api.apiHomeBanner(type,String.valueOf(AuthModel.get().getCurrentUid()), + CommunityConstant.VERSION_VALID_TYPE, + AuthModel.get().getTicket()) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()); + } + + private static final class Helper { public static final HomeModel INSTANCE = new HomeModel(); } @@ -89,12 +107,30 @@ public class HomeModel extends BaseModel { @Query("types") String types, @Query("ticket") String ticket); + + /** + * 首页推荐房间标签 + * @param uid + * @param types + * @param ticket + * @return + */ @GET("/home/tag") Single>> apiHomeTag( @Query("uid") String uid, @Query("types") String types, @Query("ticket") String ticket); + /** + * 首页更多房间 + * @param tabId + * @param page + * @param pageSize + * @param uid + * @param types + * @param ticket + * @return + */ @GET("/home/tab/map") Single>> apiHomeTabMap( @Query("tabId") String tabId, @@ -103,6 +139,37 @@ public class HomeModel extends BaseModel { @Query("uid") String uid, @Query("types") String types, @Query("ticket") String ticket); + + /** + * 首页推荐房间 + * @param tabId + * @param uid + * @param types + * @param ticket + * @return + */ + @GET("/home/tab/home") + Single>> apiHomeTabHome( + @Query("tabId") String tabId, + @Query("uid") String uid, + @Query("types") String types, + @Query("ticket") String ticket); + + /** + * 首页Banner + * @param type + * @param uid + * @param types + * @param ticket + * @return + */ + @GET("/home/banner") + Single>> apiHomeBanner( + @Query("type") String type, + @Query("uid") String uid, + @Query("types") String types, + @Query("ticket") String ticket); } + } diff --git a/app/src/main/java/com/yizhuan/erban/ui/login/LoginCodeActivity.java b/app/src/main/java/com/yizhuan/erban/ui/login/LoginCodeActivity.java index ebad3ea7c..5dee9af0c 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/login/LoginCodeActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/login/LoginCodeActivity.java @@ -82,7 +82,7 @@ public class LoginCodeActivity extends BaseLoginAct { onFindViews(); initData(); onSetListener(); - getSmsCode(); +// getSmsCode(); } @SuppressLint("SetTextI18n") diff --git a/app/src/main/java/com/yizhuan/erban/utils/VpSwipeRefreshLayout.java b/app/src/main/java/com/yizhuan/erban/utils/VpSwipeRefreshLayout.java new file mode 100644 index 000000000..25d907143 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/utils/VpSwipeRefreshLayout.java @@ -0,0 +1,60 @@ +package com.yizhuan.erban.utils; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.ViewConfiguration; + +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +public class VpSwipeRefreshLayout extends SwipeRefreshLayout { + + private float startY; + private float startX; + // 记录viewPager是否拖拽的标记 + private boolean mIsVpDragger; + private final int mTouchSlop; + + public VpSwipeRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + int action = ev.getAction(); + switch (action) { + case MotionEvent.ACTION_DOWN: + // 记录手指按下的位置 + startY = ev.getY(); + startX = ev.getX(); + // 初始化标记 + mIsVpDragger = false; + break; + case MotionEvent.ACTION_MOVE: + // 如果viewpager正在拖拽中,那么不拦截它的事件,直接return false; + if(mIsVpDragger) { + return false; + } + + // 获取当前手指位置 + float endY = ev.getY(); + float endX = ev.getX(); + float distanceX = Math.abs(endX - startX); + float distanceY = Math.abs(endY - startY); + // 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。 + if(distanceX > mTouchSlop && distanceX > distanceY) { + mIsVpDragger = true; + return false; + } + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + // 初始化标记 + mIsVpDragger = false; + break; + } + // 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。 + return super.onInterceptTouchEvent(ev); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home_more_room.xml b/app/src/main/res/layout/activity_home_more_room.xml new file mode 100644 index 000000000..30dce4379 --- /dev/null +++ b/app/src/main/res/layout/activity_home_more_room.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + \ 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 index ae01498d4..26bf1397e 100644 --- a/app/src/main/res/layout/fragment_game_home.xml +++ b/app/src/main/res/layout/fragment_game_home.xml @@ -15,7 +15,7 @@ type="Boolean" /> - - - - - - - + app:contentScrim="@color/appColor" + app:layout_scrollFlags="scroll|enterAlwaysCollapsed|exitUntilCollapsed"> - - + android:paddingLeft="14dp" + android:paddingRight="15dp" + > + + + + + + @@ -137,15 +154,12 @@ - - - - + app:layout_collapseMode="pin" + > - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home_tab_map.xml b/app/src/main/res/layout/fragment_home_tab_map.xml new file mode 100644 index 000000000..090b99cef --- /dev/null +++ b/app/src/main/res/layout/fragment_home_tab_map.xml @@ -0,0 +1,24 @@ + + + + + + + + +