From 15cb4a502bc5f6a75161874927e9be6824ebbb75 Mon Sep 17 00:00:00 2001 From: huangjian Date: Fri, 14 Jan 2022 15:00:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=BF=E5=AE=A2=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 + .../java/com/yizhuan/erban/MainActivity.java | 8 ++ .../home/activity/VisitorListActivity.kt | 77 ++++++++++++++ .../home/adapter/VisitorListAdapter.java | 49 +++++++++ .../erban/home/fragment/MeFragment.java | 20 ++++ .../erban/ui/user/UserInfoActivity.java | 4 +- .../erban/ui/widget/MainTabLayout.java | 9 +- .../res/drawable-xhdpi/ic_visitor_msg.png | Bin 0 -> 1181 bytes .../main/res/layout/activity_visitor_list.xml | 40 ++++++++ app/src/main/res/layout/fragment_me.xml | 41 ++++++++ .../res/layout/item_home_visitor_list.xml | 96 ++++++++++++++++++ app/src/main/res/layout/main_tab_layout.xml | 2 +- .../main/res/mipmap-xhdpi/icon_visitor.png | Bin 0 -> 1441 bytes .../home/bean/VisitorInfo.kt | 10 ++ .../home/event/VisitorUnreadCountEvent.java | 10 ++ .../im/custom/bean/CustomAttachment.java | 4 + .../manager/IMSystemMsgManager.java | 13 ++- .../xchat_android_core/user/IUserModel.java | 5 + .../xchat_android_core/user/UserModel.java | 33 ++++++ 19 files changed, 421 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/yizhuan/erban/home/activity/VisitorListActivity.kt create mode 100644 app/src/main/java/com/yizhuan/erban/home/adapter/VisitorListAdapter.java create mode 100644 app/src/main/res/drawable-xhdpi/ic_visitor_msg.png create mode 100644 app/src/main/res/layout/activity_visitor_list.xml create mode 100644 app/src/main/res/layout/item_home_visitor_list.xml create mode 100644 app/src/main/res/mipmap-xhdpi/icon_visitor.png create mode 100644 core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/bean/VisitorInfo.kt create mode 100644 core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/event/VisitorUnreadCountEvent.java 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 BaseBindingActivityPx(S4l)cR9HvtSY2owRTTct?CfGT#y`ZB)E_7)`rwNQLh(WLLD80CB|fwU<2G|A zc~C5f2vRcoP!%6iQ4{CP5ZAVfu+oYk3PM9H_+SxQA1o~u{HY6q$r|k9Ch6WQH_XCh z+)eLnvq)g?D!@wrw8(@C1Ns zx}@080K&n+!8bk6yOd^)HH0Iw-vQW?#!07GB0A>#{*wTdsgE^;UDy3UDK!!qpHfPl zuq;cOIy1p3rTPHu1W?d;A{z32|5Fp&ReT&MgjkHi;8e9*y{}v@H%uL+!HtiPZ*4Rh z=Ky2?9AV~RQ~M<0)vZxVy%Pk%^QKNZ!3iOL0dO0DS!RC7)JIFgMD(`r`!AR}=>#W) z(1~|DfH`J<(9}ndu&Gi#g*SZ+kBp35m(6A$2apGFAqax6bU_h9JOJP>04ug_AD^0< z`b~$05aNCS_YhG-DfJCA|CA`9-Ay{zb$2MGwl^2eWHK)o3WdKbmCAcDB4?QSpyzp3 zrBa!W%~zQD)i#9B0MMsvd@M>S4~1d)eKIGEtAyh?+lc6y=ybZ2&*xv9oSdu+A>INo z5Y_M5AP7Fu2a@ABuM^Sr(Sj$LIc!7t_cpD7-kDuN5PTlDGbXH!hKGmy`}+FqYPI@L zxm;e>bDrnf^YiohTCJvLW@aun`+|1!&BbF?;xvF#Ldiz}JPP1EGvCoMVbhXjf?Kbw zjg5`nB&GaA`(fraqNY;Vgor6-J;FM{bGcl#N7z)&R=AB)Sogj$piKe0BICol>wOvZNg@|qj zusixDl~MR^r>?YPCA5Pd&$RJ|m)?N~vdqAV{8EsW#$@3G3Bd*WIO*`Ut>P0CY9k z&&>M$Vs*p_?+t=rCKba3ctZ$lpQEFrw-C`b+qO?nPfwqXuOo!;bqWADn$2cKtya6- zjk{hdmFjUHLqkKE{{H>}-Nr`AUt{L0lQfOfa*)46Hl;SHhPg v*XnzZa3`vzvFRzCMy*b;J%u|_Esf2;wb3C + + + + + + + + + + + + + + + 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" /> - Px)TS-JgRA@u(nSY2>RTRg+=gp6GXIocXTa@(&gu0a?&fM9>m5L>d%+h97LL~_+ z(=s$dN(!PB5)z~G2c-RBq=~;O{ljqC*-(TeeD{sJvVsa>MNw2%tgY_s&OLEoGvjlc z-FdD%J3Hk2Yq;;+bI<3T`|dgC4xz{&DsuZVV1SyMn)0%;vi(GK9}yigO>;Q_<<=o} zb#;|Wsr}4c3t*3w@2Hdwb9@jL}M|JF<9INAE$$_*No1#>_ulyLRn-dwYArO*CA61L1J^ zWoCX8K!qEngCO%45v?~(^SxZUasq@xp%p~5BbTClyl3W>mSyeiPj^lLA;bj$Q}SV; z3!N9Glv8gBAQTEEiO6s$k*RNB0ufa?#=i&fYnH{d%!n-G<<9YdpHS*2{C?$nDq&`2 zS(fLP0E7_iR3N3aqb7uS4ZudnF}TpOtj}F|)fNed!*4V5>uLFI&)$hyQ%ezEr~PpK zNw3$JUN>7PE5OW|Ge>#7-owm18^9Ok<>gNvKYqN&Ex?Q!GphW4zn(AduJ)U|SC5@d zgrNg)7^z5gL!T70>m130KB4j0h*(GL0B@Z0E7@e!!Rnly1GpEzIlu{RXNg>2b0CaLn5YbbnX?|8;UtgL? zB=p!SU1b#+sd$z&WrfQYu6rm6c}UD%Nj;wJ!Owb4X$ z$}~+~wLzssSO5j z0KgGu{+5Wm%skmJj77{mAAk?QC8bm(9*?(jtZ^g2x;e6+f&io-CNT5+%p6UfMvl`o z^HYE5yAp}Sy0d4`>Ii^aB1gghCb5D7WDE$0^_E!7%=G}Obp|G)@03y}l~Q}poH=vp zdQJeLC91RZ=wSnp&Fy`SaZ^OVL#Fe6!M4!N7@mnhEV3P-RYeKFP0=bCd=W&MGGkbL z18yS0Z14Rq0nF_!KkT;2xUWbJO91|AK@F5g zf2=D3ql!oQJ#4v zJ|k1e<@!dJZu$8Jk-@lH)TKdbu7&gT{;HHR(4THMccaGu^tosAWO!O_la%s5CzW%} zoB*i`@}x7}=h^7A`pZhG`{VKWxm${Wo-Blz2w-imMm;Ya%-ls}mly9!DQ~=M&$439 v2;{}eK~#DhU=W=-AXT>`Fd(-L;-r57+04FA?XI 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); } }