From fffb78a9f6c0e8e0d3defa0c5e069ce1224e0169 Mon Sep 17 00:00:00 2001 From: max Date: Tue, 14 May 2024 14:44:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=81=A2=E5=A4=8D=E7=A4=BC=E7=89=A9?= =?UTF-8?q?=E5=BC=B9=E7=AA=97-=E5=B9=B8=E8=BF=90=E7=A4=BC=E7=89=A9?= =?UTF-8?q?=E3=80=81=E5=91=A8=E6=98=9F=E7=A4=BC=E7=89=A9=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/chwl/app/ui/widget/GiftDialog.java | 180 +++++++++++++++++- .../main/res/layout/dialog_bottom_gift.xml | 49 +++++ app/src/main/res/layout/star_week_banner.xml | 1 + .../main/java/com/chwl/core/UriProvider.java | 13 ++ .../java/com/chwl/core/gift/GiftModel.java | 15 ++ .../java/com/chwl/core/gift/IGiftModel.java | 7 + 6 files changed, 257 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java b/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java index f31f498df..83f95f406 100644 --- a/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java +++ b/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java @@ -4,7 +4,6 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Color; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; @@ -32,16 +31,18 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.chwl.app.ui.utils.ImageLoadUtilsV2; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chwl.app.ui.adapter.StarWeekAdapter; import com.chwl.app.ui.webview.DialogWebViewActivity; +import com.chwl.core.UriProvider; +import com.chwl.core.gift.bean.LuckyBagNoticeInfo; +import com.chwl.core.gift.bean.SimpleUserInfo; +import com.chwl.core.room.anotherroompk.ShowUserInfoDialogEvent; +import com.chwl.core.utils.extension.StringExtensionKt; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.netease.nim.uikit.common.util.sys.ScreenUtil; -import com.netease.nim.uikit.support.glide.GlideApp; import com.trello.rxlifecycle3.components.support.RxAppCompatActivity; import com.chwl.app.BR; import com.chwl.app.R; @@ -93,6 +94,8 @@ import com.chwl.library.utils.ListUtils; import com.chwl.library.utils.ResUtil; import com.chwl.library.utils.SingleToastUtil; import com.chwl.library.utils.TextWatcherWrapper; +import com.zhpan.bannerview.BannerViewPager; +import com.zhpan.bannerview.utils.BannerUtils; import com.zyyoona7.lib.EasyPopup; import com.zyyoona7.lib.HorizontalGravity; import com.zyyoona7.lib.VerticalGravity; @@ -107,7 +110,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Objects; +import java.util.concurrent.TimeUnit; +import io.reactivex.Observable; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -164,7 +169,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene private View sendContainer; private TextView tvTextGold; private TextView tvRecharge; - private View llStarWeek; private List micMemberInfos; private View giftNumLayout; private Disposable mSubscribe; @@ -185,6 +189,25 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene @Nullable private DrawGiftHelper drawGiftHelper; private ImageView ivSuperLuckyGiftTips; + private View flLuckyDesc; + private RecyclerView rvLuckyMsg; + + + private BannerViewPager mStarWeekBanner; + + private TextView tvLuckyBagIntro; + + @Nullable + private Disposable luckyMsgDisposable; + private BaseQuickAdapter luckyMsgAdapter; + + + private ImageView ivAvatarCharm; + private ImageView ivAvatarLevel; + private TextView tvNickCharm; + private TextView tvNickLevel; + private View llStarWeek; + public GiftDialog(Context context, int giftId) { this(context, 0, true, false, true, giftId); @@ -387,6 +410,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene @SuppressLint("CheckResult") private void init(View root) { root.findViewById(R.id.tv_recharge).setOnClickListener(this); + tvLuckyBagIntro = findViewById(R.id.tv_lucky_bag_intro); + tvLuckyBagIntro.setOnClickListener(this); + mStarWeekBanner = findViewById(R.id.star_week_list); + flLuckyDesc = findViewById(R.id.fl_lucky_desc); + rvLuckyMsg = findViewById(R.id.rv_lucky_msg); sendGiftButton = root.findViewById(R.id.btn_send); layoutEmpty = root.findViewById(R.id.layout_empty); layoutLoading = root.findViewById(R.id.layout_loading); @@ -449,6 +477,10 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene tvTextGold = root.findViewById(R.id.tv_text_gold); tvRecharge = root.findViewById(R.id.tv_recharge); + ivAvatarCharm = root.findViewById(R.id.iv_avatar_charm); + ivAvatarLevel = root.findViewById(R.id.iv_avatar_level); + tvNickCharm = root.findViewById(R.id.tv_nick_charm); + tvNickLevel = root.findViewById(R.id.tv_nick_level); llStarWeek = root.findViewById(R.id.ll_star_week); giftNumberText = root.findViewById(R.id.gift_number_text); @@ -657,6 +689,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene position == GiftIndicator.TYPE_SING_ROOM || position == GiftIndicator.TYPE_DRAW_GIFT) { showEmptyView(); + updateWeekStarDesc(); isShowDrawGiftModel = false; updateDrawGift(); updateSuperLuckyGiftTips(); @@ -680,7 +713,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene } } isShowDrawGiftModel = false; + updateLuckyBagIntro(); updateSuperLuckyGiftTips(); + updateWeekStarDesc(); updateDrawGift(); giftIndicator.post(() -> { if (position < GiftIndicator.TYPE_WEEK) { @@ -705,6 +740,125 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene } } + + private void updateLuckyBagIntro() { + if (currentGiftInfo == null || + (TextUtils.isEmpty(currentGiftInfo.getGiftExplainUrl()) && currentGiftInfo.getGiftType() != GiftType.GIFT_TYPE_LUCKY)) { + tvLuckyBagIntro.setVisibility(View.GONE); + } else { + tvLuckyBagIntro.setVisibility(View.VISIBLE); + } + + if (luckyMsgDisposable != null) luckyMsgDisposable.dispose(); + if (currentGiftInfo == null || currentGiftInfo.getGiftType() != GiftType.GIFT_TYPE_LUCKY) { + flLuckyDesc.setVisibility(View.GONE); + } else { + flLuckyDesc.setVisibility(View.VISIBLE); + if (luckyMsgAdapter == null) { + luckyMsgAdapter = new BaseQuickAdapter<>(R.layout.item_lucky_gift_msg) { + @Override + protected void convert(@NonNull BaseViewHolder helper, LuckyBagNoticeInfo noticeInfo) { + TextView tvName = helper.getView(R.id.tv_name); + TextView tvLucky = helper.getView(R.id.tv_luck); + TextView tvLuckyName = helper.getView(R.id.tv_luck_name); + String nickName = RegexUtil.getPrintableString(noticeInfo.getNick()); + tvName.setText(nickName); + tvLucky.setText(noticeInfo.getLuckyBagName()); + tvLuckyName.setText(noticeInfo.getGiftName()); + } + }; + rvLuckyMsg.setAdapter(luckyMsgAdapter); + rvLuckyMsg.setLayoutManager(new ScollLinearLayoutManager(context, ScollLinearLayoutManager.HORIZONTAL, false)); + rvLuckyMsg.setOnTouchListener((v, event) -> true); + } + + + luckyMsgDisposable = GiftModel.get().getLuckyGiftMsgList() + .compose(RxHelper.bindContext(context)) + .doOnSuccess(luckyBagNoticeInfos -> luckyMsgAdapter.setNewData(luckyBagNoticeInfos)) + .toObservable() + .flatMap(luckyBagNoticeInfos -> Observable.intervalRange(0, Integer.MAX_VALUE, 0, 5, TimeUnit.SECONDS)) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> { + int index = aLong.intValue() % luckyMsgAdapter.getItemCount(); + if (index == 0) { + rvLuckyMsg.scrollToPosition(index); + } else { + rvLuckyMsg.smoothScrollToPosition(index); + } + }); + } + } + + private void updateWeekStarDesc() { + + if (giftIndicator.getCurrrentType() == GiftIndicator.TYPE_WEEK) { + flLuckyDesc.setVisibility(View.GONE); + llStarWeek.setVisibility(View.GONE); + mStarWeekBanner.setVisibility(View.VISIBLE); + } else { + llStarWeek.setVisibility(View.GONE); + mStarWeekBanner.setVisibility(View.GONE); + return; + } + + if (currentGiftInfo == null) { + llStarWeek.setVisibility(View.INVISIBLE); + mStarWeekBanner.setVisibility(View.GONE); + return; + } + + SimpleUserInfo firstCharmRankUser = currentGiftInfo.getFirstCharmRankUser(); + if (firstCharmRankUser != null) { + ImageLoadUtils.loadImage(getContext(), firstCharmRankUser.getAvatar(), ivAvatarCharm); + ivAvatarCharm.setOnClickListener(v -> { + if (firstCharmRankUser.getUid() == 0) return; + EventBus.getDefault().post(new ShowUserInfoDialogEvent(String.valueOf(firstCharmRankUser.getUid()))); + }); + tvNickCharm.setText(StringExtensionKt.subAndReplaceDot(firstCharmRankUser.getNick(), 10)); + } else { + ivAvatarCharm.setOnClickListener(null); + ivAvatarCharm.setImageResource(R.drawable.default_avatar); + tvNickCharm.setText(ResUtil.getString(R.string.ui_widget_giftdialog_013)); + } + + SimpleUserInfo firstLevelRankUser = currentGiftInfo.getFirstLevelRankUser(); + if (firstLevelRankUser != null) { + ImageLoadUtils.loadImage(getContext(), firstLevelRankUser.getAvatar(), ivAvatarLevel); + ivAvatarLevel.setOnClickListener(v -> { + if (firstLevelRankUser.getUid() == 0) return; + EventBus.getDefault().post(new ShowUserInfoDialogEvent(String.valueOf(firstLevelRankUser.getUid()))); + }); + tvNickLevel.setText(StringExtensionKt.subAndReplaceDot(firstLevelRankUser.getNick(), 10)); + } else { + ivAvatarLevel.setOnClickListener(null); + ivAvatarLevel.setImageResource(R.drawable.default_avatar); + tvNickLevel.setText(ResUtil.getString(R.string.ui_widget_giftdialog_014)); + } + + List list = new ArrayList<>(); + if (firstCharmRankUser != null) { + list.add(firstCharmRankUser); + } else { + list.add(new SimpleUserInfo()); + } + if (firstLevelRankUser != null) { + list.add(firstLevelRankUser); + } else { + list.add(new SimpleUserInfo()); + } + + mStarWeekBanner.setAdapter(new StarWeekAdapter()); + mStarWeekBanner.setPageMargin(UIUtil.dip2px(context, 10)) + .setScrollDuration(1200) + .setInterval(4500) + .setRevealWidth(BannerUtils.dp2px(0f)) + .setOnPageClickListener((clickedView, position) -> { + DialogWebViewActivity.start(context, UriProvider.getWeekStarUrl(), true); + }) + .create(list); + } + private void updateDrawGift() { if (drawGiftHelper == null) { drawGiftHelper = new DrawGiftHelper((Activity) context); @@ -911,7 +1065,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene currentGiftInfo = item.data; setGoldOrRadishText(lastSelectedItem); isShowDrawGiftModel = true; + updateLuckyBagIntro(); updateSuperLuckyGiftTips(); + updateWeekStarDesc(); updateDrawGift(); }); } @@ -1255,6 +1411,14 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene case R.id.iv_draw_gift_remove_all: clearDrawGift(); break; + case R.id.tv_lucky_bag_intro: + if (currentGiftInfo == null) break; + if (currentGiftInfo.getGiftType() == GiftType.GIFT_TYPE_LUCKY) { + DialogWebViewActivity.start(context, UriProvider.getLuckyGiftRule(currentGiftInfo.getGiftId()), true); + } else { + DialogWebViewActivity.start(context, currentGiftInfo.getGiftExplainUrl(), true); + } + break; default: break; } diff --git a/app/src/main/res/layout/dialog_bottom_gift.xml b/app/src/main/res/layout/dialog_bottom_gift.xml index ff3d5a086..6a3b53764 100644 --- a/app/src/main/res/layout/dialog_bottom_gift.xml +++ b/app/src/main/res/layout/dialog_bottom_gift.xml @@ -18,6 +18,55 @@ tools:layout_height="50dp" tools:visibility="visible" /> + + + + + + + + + + >> getLuckyGiftMsgList(); + /** * 获取礼物列表 * diff --git a/core/src/main/java/com/chwl/core/gift/IGiftModel.java b/core/src/main/java/com/chwl/core/gift/IGiftModel.java index dfd4ef9e2..77ea64bb9 100644 --- a/core/src/main/java/com/chwl/core/gift/IGiftModel.java +++ b/core/src/main/java/com/chwl/core/gift/IGiftModel.java @@ -188,4 +188,11 @@ public interface IGiftModel { * 发送特殊礼物 */ Single sendSpecialGift(long uid); + + /** + * 福袋最近20条全服记录 + * + * @return - + */ + Single> getLuckyGiftMsgList(); }