feat:恢复礼物弹窗-幸运礼物、周星礼物提示

This commit is contained in:
max
2024-05-14 14:44:33 +08:00
parent 209ebabd34
commit fffb78a9f6
6 changed files with 257 additions and 8 deletions

View File

@@ -4,7 +4,6 @@ import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
import android.text.TextUtils; import android.text.TextUtils;
@@ -32,16 +31,18 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2; import androidx.viewpager2.widget.ViewPager2;
import com.bumptech.glide.load.DataSource; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.bumptech.glide.load.engine.GlideException; import com.chad.library.adapter.base.BaseViewHolder;
import com.bumptech.glide.request.RequestListener; import com.chwl.app.ui.adapter.StarWeekAdapter;
import com.bumptech.glide.request.target.Target;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
import com.chwl.app.ui.webview.DialogWebViewActivity; 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.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog; import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.netease.nim.uikit.common.util.sys.ScreenUtil; 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.trello.rxlifecycle3.components.support.RxAppCompatActivity;
import com.chwl.app.BR; import com.chwl.app.BR;
import com.chwl.app.R; 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.ResUtil;
import com.chwl.library.utils.SingleToastUtil; import com.chwl.library.utils.SingleToastUtil;
import com.chwl.library.utils.TextWatcherWrapper; 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.EasyPopup;
import com.zyyoona7.lib.HorizontalGravity; import com.zyyoona7.lib.HorizontalGravity;
import com.zyyoona7.lib.VerticalGravity; import com.zyyoona7.lib.VerticalGravity;
@@ -107,7 +110,9 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
@@ -164,7 +169,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
private View sendContainer; private View sendContainer;
private TextView tvTextGold; private TextView tvTextGold;
private TextView tvRecharge; private TextView tvRecharge;
private View llStarWeek;
private List<MicMemberInfo> micMemberInfos; private List<MicMemberInfo> micMemberInfos;
private View giftNumLayout; private View giftNumLayout;
private Disposable mSubscribe; private Disposable mSubscribe;
@@ -185,6 +189,25 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
@Nullable @Nullable
private DrawGiftHelper drawGiftHelper; private DrawGiftHelper drawGiftHelper;
private ImageView ivSuperLuckyGiftTips; private ImageView ivSuperLuckyGiftTips;
private View flLuckyDesc;
private RecyclerView rvLuckyMsg;
private BannerViewPager<SimpleUserInfo> mStarWeekBanner;
private TextView tvLuckyBagIntro;
@Nullable
private Disposable luckyMsgDisposable;
private BaseQuickAdapter<LuckyBagNoticeInfo, BaseViewHolder> luckyMsgAdapter;
private ImageView ivAvatarCharm;
private ImageView ivAvatarLevel;
private TextView tvNickCharm;
private TextView tvNickLevel;
private View llStarWeek;
public GiftDialog(Context context, int giftId) { public GiftDialog(Context context, int giftId) {
this(context, 0, true, false, true, giftId); this(context, 0, true, false, true, giftId);
@@ -387,6 +410,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
private void init(View root) { private void init(View root) {
root.findViewById(R.id.tv_recharge).setOnClickListener(this); 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); sendGiftButton = root.findViewById(R.id.btn_send);
layoutEmpty = root.findViewById(R.id.layout_empty); layoutEmpty = root.findViewById(R.id.layout_empty);
layoutLoading = root.findViewById(R.id.layout_loading); 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); tvTextGold = root.findViewById(R.id.tv_text_gold);
tvRecharge = root.findViewById(R.id.tv_recharge); 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); llStarWeek = root.findViewById(R.id.ll_star_week);
giftNumberText = root.findViewById(R.id.gift_number_text); 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_SING_ROOM ||
position == GiftIndicator.TYPE_DRAW_GIFT) { position == GiftIndicator.TYPE_DRAW_GIFT) {
showEmptyView(); showEmptyView();
updateWeekStarDesc();
isShowDrawGiftModel = false; isShowDrawGiftModel = false;
updateDrawGift(); updateDrawGift();
updateSuperLuckyGiftTips(); updateSuperLuckyGiftTips();
@@ -680,7 +713,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
} }
} }
isShowDrawGiftModel = false; isShowDrawGiftModel = false;
updateLuckyBagIntro();
updateSuperLuckyGiftTips(); updateSuperLuckyGiftTips();
updateWeekStarDesc();
updateDrawGift(); updateDrawGift();
giftIndicator.post(() -> { giftIndicator.post(() -> {
if (position < GiftIndicator.TYPE_WEEK) { 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<SimpleUserInfo> 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() { private void updateDrawGift() {
if (drawGiftHelper == null) { if (drawGiftHelper == null) {
drawGiftHelper = new DrawGiftHelper((Activity) context); drawGiftHelper = new DrawGiftHelper((Activity) context);
@@ -911,7 +1065,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
currentGiftInfo = item.data; currentGiftInfo = item.data;
setGoldOrRadishText(lastSelectedItem); setGoldOrRadishText(lastSelectedItem);
isShowDrawGiftModel = true; isShowDrawGiftModel = true;
updateLuckyBagIntro();
updateSuperLuckyGiftTips(); updateSuperLuckyGiftTips();
updateWeekStarDesc();
updateDrawGift(); updateDrawGift();
}); });
} }
@@ -1255,6 +1411,14 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
case R.id.iv_draw_gift_remove_all: case R.id.iv_draw_gift_remove_all:
clearDrawGift(); clearDrawGift();
break; 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: default:
break; break;
} }

View File

@@ -18,6 +18,55 @@
tools:layout_height="50dp" tools:layout_height="50dp"
tools:visibility="visible" /> tools:visibility="visible" />
<RelativeLayout
android:id="@+id/fl_lucky_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:background="@drawable/bg_gift_dialog_lucky_desc"
android:visibility="gone"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@id/ll_dialog_bottom_gift"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_lucky_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/dp_50"
android:layout_toStartOf="@+id/tv_lucky_bag_intro"
tools:itemCount="1"
tools:listitem="@layout/item_lucky_gift_msg" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_lucky_bag_intro"
android:text="@string/play_desc"
android:textSize="@dimen/sp_10"
android:textColor="@color/color_EB547C"
android:textStyle="bold"
android:layout_marginEnd="@dimen/dp_13"
android:layout_alignParentEnd="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/star_week_list"
android:layout_width="match_parent"
android:layout_height="56dp"
android:visibility="gone"
app:bvp_can_loop="true"
app:bvp_auto_play="true"
app:bvp_indicator_visibility="gone"
app:bvp_page_style="multi_page_scale"
app:layout_constraintBottom_toTopOf="@+id/ll_dialog_bottom_gift"/>
<LinearLayout <LinearLayout
android:id="@+id/ll_dialog_bottom_gift" android:id="@+id/ll_dialog_bottom_gift"
android:layout_width="0dp" android:layout_width="0dp"

View File

@@ -5,6 +5,7 @@
android:id="@+id/ll_container" android:id="@+id/ll_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:layout_height="80dp"
android:background="@drawable/bg_star_week_1"> android:background="@drawable/bg_star_week_1">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView

View File

@@ -289,4 +289,17 @@ public class UriProvider {
public static String getFansTeamOpenUrl(long roomUid) { public static String getFansTeamOpenUrl(long roomUid) {
return JAVA_WEB_URL.concat("/molistar/modules/fans_club/nameplate.html?roomUid=" + roomUid); return JAVA_WEB_URL.concat("/molistar/modules/fans_club/nameplate.html?roomUid=" + roomUid);
} }
/**
* 周星榜
*/
public static String getWeekStarUrl() {
return JAVA_WEB_URL.concat("/molistar/modules/weekStar/newWeekStar.html");
}
/**
* 幸运礼物说明
*/
public static String getLuckyGiftRule(int giftID) {
return JAVA_WEB_URL.concat("/molistar/modules/rule/luckyGiftRule.html?giftID=" + giftID);
}
} }

View File

@@ -675,8 +675,23 @@ public class GiftModel extends BaseModel implements IGiftModel {
}); });
} }
@Override
public Single<List<LuckyBagNoticeInfo>> getLuckyGiftMsgList() {
return api.getLuckyGiftMsgList()
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchAndExce());
}
private interface Api { private interface Api {
/**
* 福袋最近20条全服记录
*
* @return
*/
@GET("/luckybag/getBannerList")
Single<ServiceResult<List<LuckyBagNoticeInfo>>> getLuckyGiftMsgList();
/** /**
* 获取礼物列表 * 获取礼物列表
* *

View File

@@ -188,4 +188,11 @@ public interface IGiftModel {
* 发送特殊礼物 * 发送特殊礼物
*/ */
Single<Object> sendSpecialGift(long uid); Single<Object> sendSpecialGift(long uid);
/**
* 福袋最近20条全服记录
*
* @return -
*/
Single<List<LuckyBagNoticeInfo>> getLuckyGiftMsgList();
} }