diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ddc202620..5793f2f55 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1245,6 +1245,10 @@ android:name=".vip.VipMainActivity" android:screenOrientation="portrait" /> + + \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/MainActivity.java b/app/src/main/java/com/yizhuan/erban/MainActivity.java index 13e5192fc..8a09b2d6f 100644 --- a/app/src/main/java/com/yizhuan/erban/MainActivity.java +++ b/app/src/main/java/com/yizhuan/erban/MainActivity.java @@ -123,6 +123,7 @@ import com.yizhuan.xchat_android_core.channel_page.model.ChannelPageModel; import com.yizhuan.xchat_android_core.community.attachment.DynamicSysAttachment; import com.yizhuan.xchat_android_core.community.event.SquareTaskEvent; import com.yizhuan.xchat_android_core.community.event.UnReadCountEvent; +import com.yizhuan.xchat_android_core.home.event.VisitorUnreadCountEvent; import com.yizhuan.xchat_android_core.user.bean.ProtocolInfo; import com.yizhuan.xchat_android_core.community.im.WorldDynamicAttachment; import com.yizhuan.xchat_android_core.home.model.GameHomeModel; @@ -1106,6 +1107,13 @@ public class MainActivity extends BaseMvpActivity CommonWebViewActivity.start(event.getContext(), event.getUrl()); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onVisitorUnreadCountEvent(VisitorUnreadCountEvent event) { + if (mMainTabLayout != null) { + mMainTabLayout.setUnreadVisitorCount(event.getVisitNum()); + } + } + @Override public void onClick(View v) { switch (v.getId()) { diff --git a/app/src/main/java/com/yizhuan/erban/home/activity/VisitorListActivity.kt b/app/src/main/java/com/yizhuan/erban/home/activity/VisitorListActivity.kt new file mode 100644 index 000000000..357615283 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/activity/VisitorListActivity.kt @@ -0,0 +1,77 @@ +package com.yizhuan.erban.home.activity + +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import androidx.recyclerview.widget.LinearLayoutManager +import com.netease.nim.uikit.StatusBarUtil +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingActivity +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.ActivityVisitorListBinding +import com.yizhuan.erban.home.adapter.VisitorListAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.home.bean.VisitorInfo +import com.yizhuan.xchat_android_core.user.UserModel +import com.yizhuan.xchat_android_library.annatation.ActLayoutRes + +@ActLayoutRes(R.layout.activity_visitor_list) +class VisitorListActivity : BaseViewBindingActivity() { + + private lateinit var rvDelegate: RVDelegate + + companion object { + @JvmStatic + fun start(context: Context) { + val starter = Intent(context, VisitorListActivity::class.java) + context.startActivity(starter) + } + } + + private var pageNum = 1 + private val pageSize = 20 + + @SuppressLint("CheckResult") + override fun init() { + initTitleBar("访客记录") + rvDelegate = RVDelegate.Builder() + .setRefreshLayout(binding.swipeRefresh) + .setLayoutManager(LinearLayoutManager(this)) + .setRecyclerView(binding.recyclerView) + .setAdapter(VisitorListAdapter()) + .setPageSize(pageSize) + .setEmptyView(EmptyViewHelper.createEmptyView(this, "暂未有人到访")) + .build() + + rvDelegate.adapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) + + binding.swipeRefresh.setOnRefreshListener { + loadData(true) + } + + loadData(true) + } + + @SuppressLint("CheckResult") + private fun loadData(refresh: Boolean) { + pageNum = if (refresh) 1 else pageNum + 1 + UserModel.get().getVisitorUserList(pageNum, pageSize) + .compose(bindToLifecycle()) + .subscribe( + { + rvDelegate.loadData(it, refresh) + }, + { + rvDelegate.loadErr(true) + } + ) + } + + override fun needSteepStateBar() = true + + override fun setStatusBar() { + super.setStatusBar() + StatusBarUtil.transparencyBar(this) + StatusBarUtil.StatusBarLightMode(this) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/VisitorListAdapter.java b/app/src/main/java/com/yizhuan/erban/home/adapter/VisitorListAdapter.java new file mode 100644 index 000000000..6e1e3eb7a --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/VisitorListAdapter.java @@ -0,0 +1,49 @@ +package com.yizhuan.erban.home.adapter; + + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.yizhuan.erban.R; +import com.yizhuan.erban.ui.im.avtivity.NimP2PMessageActivity; +import com.yizhuan.erban.ui.user.UserInfoActivity; +import com.yizhuan.erban.ui.utils.ImageLoadUtils; +import com.yizhuan.xchat_android_core.home.bean.VisitorInfo; + +import org.jetbrains.annotations.NotNull; + +/** + * create by lvzebiao @2019/11/13 + * 人气主播更多 + */ +public class VisitorListAdapter extends BaseQuickAdapter { + + + public VisitorListAdapter() { + super(R.layout.item_home_visitor_list); + } + + @Override + protected void convert(@NotNull BaseViewHolder helper, VisitorInfo item) { + if (item == null) { + return; + } + + ImageLoadUtils.loadAvatar(mContext, + item.getAvatar(), + helper.getView(R.id.iv_avatar) + ); + helper.setText(R.id.tv_nickname, item.getNick()) + .setText(R.id.tv_id, "大鹅号:" + item.getErbanNo()) + .setText(R.id.tv_time, item.getVisitTimeDesc()) + .setImageResource(R.id.iv_gender, item.getGender() == 1 ? R.drawable.ic_gender_male : R.drawable.ic_gender_female); + + helper.getView(R.id.iv_avatar).setOnClickListener(v -> + UserInfoActivity.Companion.start(mContext, item.getUid()) + ); + + helper.getView(R.id.iv_msg).setOnClickListener(v -> + NimP2PMessageActivity.start(mContext, String.valueOf(item.getUid())) + ); + } + +} diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java index 7c8e59471..d4f428660 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java @@ -4,6 +4,7 @@ import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUS import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_OPENNOBLE; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_RENEWNOBLE; +import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; @@ -22,6 +23,7 @@ import com.yizhuan.erban.decoration.view.MyDecorationActivity; import com.yizhuan.erban.flutter.RouterConstants; import com.yizhuan.erban.flutter.event.ShowInviteEvent; import com.yizhuan.erban.home.activity.CollectionRoomActivity; +import com.yizhuan.erban.home.activity.VisitorListActivity; import com.yizhuan.erban.home.helper.OpenRoomHelper; import com.yizhuan.erban.module_hall.HallDataManager; import com.yizhuan.erban.module_hall.hall.activity.ModuleClanActivity; @@ -37,6 +39,7 @@ import com.yizhuan.erban.vip.VipHelper; import com.yizhuan.erban.vip.VipMainActivity; import com.yizhuan.xchat_android_core.UriProvider; import com.yizhuan.xchat_android_core.decoration.headwear.bean.HeadWearInfo; +import com.yizhuan.xchat_android_core.home.event.VisitorUnreadCountEvent; import com.yizhuan.xchat_android_core.level.UserLevelVo; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.manager.RelationShipEvent; @@ -241,6 +244,19 @@ public class MeFragment extends BaseFragment implements View.OnClickListener { mBinding.meItemInviteFlag.setVisibility(event.mShowInvite ? View.VISIBLE : View.GONE); } + @SuppressLint("SetTextI18n") + @Subscribe(threadMode = ThreadMode.MAIN) + public void onVisitorUnreadCountEvent(VisitorUnreadCountEvent event) { + if (mBinding == null) return; + if (event.getVisitNum() == 0) { + mBinding.tvRedDot.setVisibility(View.GONE); + } else { + mBinding.tvRedDot.setVisibility(View.VISIBLE); + mBinding.tvRedDot.setText(event.getVisitNum() > 99 ? "99+" : String.valueOf(event.getVisitNum())); + } + } + + private void requestUpdateUserInfo() { if (mUserInfo != null) { UserModel.get().updateCurrentUserInfo().subscribe(); @@ -345,6 +361,10 @@ public class MeFragment extends BaseFragment implements View.OnClickListener { StatisticManager.Instance() .onEvent(StatisticsProtocol.Event.EVENT_VIP_ENTRANCE_ME_CLICK, "贵族我的入口点击事件"); break; + case R.id.me_item_visitor: + EventBus.getDefault().post(new VisitorUnreadCountEvent(0)); + VisitorListActivity.start(mContext); + break; default: break; } diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java index 62c2d5314..460b10d32 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java @@ -140,7 +140,9 @@ public class UserInfoActivity extends BaseBindingActivity + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml index 0020f72c8..4f46a7f6c 100644 --- a/app/src/main/res/layout/fragment_me.xml +++ b/app/src/main/res/layout/fragment_me.xml @@ -627,6 +627,47 @@ android:textColor="@color/text_normal_c6c6e9" android:textSize="13sp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_tab_layout.xml b/app/src/main/res/layout/main_tab_layout.xml index b3225f30c..a1c760fa8 100644 --- a/app/src/main/res/layout/main_tab_layout.xml +++ b/app/src/main/res/layout/main_tab_layout.xml @@ -59,7 +59,7 @@ app:tab_text_color="@color/main_tab_normal" app:tab_text_color_select="@color/color_333333" /> - getProtocolInfo(); + + Single visitUserDetail(long uid); + + Single> getVisitorUserList(int pageNum, int pageSize); } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java index ed15f07c4..6d2852ac9 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java @@ -17,6 +17,7 @@ import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.bean.response.result.GiftWallListResult; import com.yizhuan.xchat_android_core.bean.response.result.UserListResult; import com.yizhuan.xchat_android_core.bean.response.result.UserResult; +import com.yizhuan.xchat_android_core.home.bean.VisitorInfo; import com.yizhuan.xchat_android_core.level.event.CharmLevelUpEvent; import com.yizhuan.xchat_android_core.level.event.LevelUpEvent; import com.yizhuan.xchat_android_core.noble.NobleUtil; @@ -800,6 +801,21 @@ public final class UserModel extends BaseModel implements IUserModel { .compose(RxHelper.handleSchedulers()); } + @Override + public Single visitUserDetail(long uid) { + return api.visitUserDetail(uid) + .compose(RxHelper.handleStringData()) + .compose(RxHelper.handleSchedulers()); + } + + @Override + public Single> getVisitorUserList(int pageNum, int pageSize) { + return api.getVisitorUserList(pageNum, pageSize) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()); + } + + private interface Api { /** @@ -1021,5 +1037,22 @@ public final class UserModel extends BaseModel implements IUserModel { */ @GET("/user/latestPrivacyPolicy") Single> getProtocolInfo(); + + /** + * 访客列表 + * + * @return + */ + @GET("/user/detail/visitUserDetail") + Single> visitUserDetail(@Query("uid") long uid); + + /** + * 访客列表 + * + * @return - + */ + @GET("/uservisitrecord/visitUserList") + Single>> getVisitorUserList(@Query("pageNum") int pageNum, + @Query("pageSize") int pageSize); } }