diff --git a/app/src/main/java/com/nnbc123/app/avroom/widget/MessageView.java b/app/src/main/java/com/nnbc123/app/avroom/widget/MessageView.java index a3757074c..9444aad72 100644 --- a/app/src/main/java/com/nnbc123/app/avroom/widget/MessageView.java +++ b/app/src/main/java/com/nnbc123/app/avroom/widget/MessageView.java @@ -1,5 +1,6 @@ package com.nnbc123.app.avroom.widget; +import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GIFT; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GIFT_COMPOUND; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_KITCHEN; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_PRIVILEGE; @@ -93,6 +94,7 @@ import com.nnbc123.core.im.custom.bean.CarveUpGoldAttachment; import com.nnbc123.core.im.custom.bean.CleanScreenAttachment; import com.nnbc123.core.im.custom.bean.CustomAttachment; import com.nnbc123.core.im.custom.bean.DatingAttachment; +import com.nnbc123.core.im.custom.bean.DressUpGiftAttachment; import com.nnbc123.core.im.custom.bean.FaceAttachment; import com.nnbc123.core.im.custom.bean.FansTeamMsgAttachment; import com.nnbc123.core.im.custom.bean.GiftAttachment; @@ -121,6 +123,7 @@ import com.nnbc123.core.im.custom.bean.RoomReceivedLuckyGiftAttachment; import com.nnbc123.core.im.custom.bean.RoomTipAttachment; import com.nnbc123.core.im.custom.bean.TarotAttachment; import com.nnbc123.core.im.custom.bean.TarotMsgBean; +import com.nnbc123.core.im.custom.bean.UnLockGiftAttachment; import com.nnbc123.core.im.custom.bean.VipMessageAttachment; import com.nnbc123.core.im.custom.bean.WelcomeAttachment; import com.nnbc123.core.im.custom.bean.WishListAttachment; @@ -215,6 +218,7 @@ public class MessageView extends FrameLayout { private int whiteColor; private int greyColor; private int appColor; + private int giftColor; private int badgeWidth; private int badgeHeight; private int sysIconHeight; @@ -277,6 +281,7 @@ public class MessageView extends FrameLayout { whiteColor = ContextCompat.getColor(context, R.color.white); greyColor = ContextCompat.getColor(context, R.color.white_transparent_50); appColor = ContextCompat.getColor(context, R.color.app_color); + giftColor = ContextCompat.getColor(context, R.color.color_5CEFFF); paddingWidth = Utils.dip2px(context, 10); paddingHeight = Utils.dip2px(context, 8); badgeWidth = Utils.dip2px(context, 15); @@ -1011,6 +1016,13 @@ public class MessageView extends FrameLayout { if (second == CustomAttachment.CUSTOM_MSG_PRIVILEGE_SECOND || second == CustomAttachment.CUSTOM_MSG_PRIVILEGE_SECOND_VIDEO) { setPrivilegeNoticeMessage(chatRoomMessage, tvContent); } + } else if (first == CUSTOM_MSG_GIFT) { + setVIPMessageBackground(chatRoomMessage, tvContent); + if (second == CustomAttachment.CUSTOM_MSG_GIFT_UNLOCK) { + setUnLockGiftMsg(tvContent, (UnLockGiftAttachment) attachment, chatRoomMessage); + } else if (second == CustomAttachment.CUSTOM_MSG_GIFT_DRESS) { + setDressGiftMsg(tvContent, (DressUpGiftAttachment) attachment, chatRoomMessage); + } } else { tvContent.setTextColor(Color.WHITE); tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip)); @@ -2928,6 +2940,53 @@ public class MessageView extends FrameLayout { } + private void setUnLockGiftMsg(TextView tvContent, UnLockGiftAttachment attachment, ChatRoomMessage chatRoomMessage) { + if (attachment == null) return; + String nick = RegexUtil.getPrintableString(attachment.getNick()); + String giftName = attachment.getGiftNameNotNull(); + String giftImage = attachment.getGiftUrlNotNull(); + SpannableBuilder text = new SpannableBuilder(tvContent) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) + .append(nick, new ForegroundColorSpan(appColor), new OriginalDrawStatusClickSpan() { + + @Override + public void onClick(@NonNull View widget) { + if (clickConsumer != null) { + Single.just(chatRoomMessage.getFromAccount()).subscribe(clickConsumer); + } + } + }) + .append(" 已解锁礼物 ", new ForegroundColorSpan(whiteColor)) + .append(giftImage, giftLength, giftLength) + .append(giftName, new ForegroundColorSpan(giftColor)); + tvContent.setText(text.build()); + tvContent.setOnClickListener(null); + tvContent.setMovementMethod(new LinkMovementMethod()); + } + + private void setDressGiftMsg(TextView tvContent, DressUpGiftAttachment attachment, ChatRoomMessage chatRoomMessage) { + if (attachment == null) return; + String nick = RegexUtil.getPrintableString(attachment.getNick()); + String dressName = attachment.getDressNameNotNull(); + String dressImage = attachment.getDressUrlNotNull(); + SpannableBuilder text = new SpannableBuilder(tvContent) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) + .append(nick, new ForegroundColorSpan(appColor), new OriginalDrawStatusClickSpan() { + + @Override + public void onClick(@NonNull View widget) { + if (clickConsumer != null) { + Single.just(chatRoomMessage.getFromAccount()).subscribe(clickConsumer); + } + } + }) + .append(" 获得 "+dressName+"装扮 ", new ForegroundColorSpan(whiteColor)) + .append(dressImage, giftLength, giftLength); + tvContent.setText(text.build()); + tvContent.setOnClickListener(null); + tvContent.setMovementMethod(new LinkMovementMethod()); + } + @Nullable private Drawable getNewUserDrawable(ChatRoomMessage chatRoomMessage) { boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); diff --git a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyCarAdapter.java b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyCarAdapter.java index 37cfacad4..62f5ac862 100644 --- a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyCarAdapter.java +++ b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyCarAdapter.java @@ -2,7 +2,6 @@ package com.nnbc123.app.decoration.adapter; import android.view.View; import android.widget.ImageView; -import android.widget.TextView; import com.netease.nim.uikit.support.glide.GlideApp; import com.nnbc123.app.R; @@ -39,62 +38,22 @@ public class MyCarAdapter extends BaseAdapter { helper.addOnClickListener(R.id.tv_used); - // 倒计时 - int remainingDay = item.getRemainingDay(); - int status = item.getStatus(); - boolean canUse; - - if (remainingDay >= 0 && status == CarInfo.STATUS_USER_CAN_USE) { - canUse = true; - } else { - canUse = false; - } - - // 时间 - if (remainingDay >= 0 && status == CarInfo.STATUS_USER_CAN_USE) { - String days; - if (item.getRemainingDay() > 99){ - days = "99+"; - }else { - days = item.getRemainingDay()+""; + if (item.getStatus() == CarInfo.STATUS_USER_CAN_USE) { + binding.tvUsed.setVisibility(View.VISIBLE); + binding.tvUsed.setEnabled(true); + binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText()); + if (item.isUsing()) { + binding.tvUsed.setText("取消使用"); + binding.tvUsed.setBackgroundResource(R.drawable.bg_common_cancel); + } else { + binding.tvUsed.setText("使用"); + binding.tvUsed.setBackgroundResource(R.drawable.bg_common_confirm); } - binding.tvCounters.setText(String.format(binding.tvCounters.getResources().getString(R.string.decoration_status_wrapper), - binding.tvCounters.getResources().getString(R.string.decoration_remainder) + days + "天")); } else { - if (status == CarInfo.STATUS_OFF_SHELF || status == CarInfo.STATUS_OUT_OF_DATE) { - binding.tvCounters.setText(String.format(binding.tvCounters.getResources().getString(R.string.decoration_status_wrapper), - binding.tvCounters.getResources().getString(R.string.past_due))); - } + binding.tvUsed.setVisibility(View.GONE); + binding.tvCounters.setText(binding.tvCounters.getResources().getString(R.string.past_due)); } - - - setUseButton(binding.tvUsed, canUse, item.isUsing()); updateTag(item, binding.ivTag); - - } - - private void setUseButton(TextView tvUsed, boolean canUse, boolean isUsing) { - - if (!canUse) { - tvUsed.setVisibility(View.GONE); - tvUsed.setText("使用"); - tvUsed.setBackgroundResource(R.drawable.bg_common_disable); - tvUsed.setEnabled(false); - tvUsed.setTextColor(mContext.getResources().getColor(R.color.text_secondary_878b9c)); - } else if (isUsing) { - tvUsed.setVisibility(View.VISIBLE); - tvUsed.setText("取消使用"); - tvUsed.setBackgroundResource(R.drawable.bg_common_cancel); - tvUsed.setEnabled(true); - tvUsed.setTextColor(mContext.getResources().getColor(R.color.text_normal_282828)); - } else { - tvUsed.setVisibility(View.VISIBLE); - tvUsed.setText("使用"); - tvUsed.setBackgroundResource(R.drawable.bg_common_confirm); - tvUsed.setTextColor(mContext.getResources().getColor(R.color.text_title_282828)); - tvUsed.setEnabled(true); - } - } private void updateTag(CarInfo carInfo, ImageView ivTag) { diff --git a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyChatBubbleAdapter.java b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyChatBubbleAdapter.java index d200d5820..2dc9a0414 100644 --- a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyChatBubbleAdapter.java +++ b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyChatBubbleAdapter.java @@ -55,25 +55,12 @@ public class MyChatBubbleAdapter extends BaseAdapter { binding.tvUsed.setVisibility(View.GONE); binding.tvUsed.setEnabled(false); binding.tvUsed.setText("使用"); + binding.tvCounters.setText(mContext.getString(R.string.past_due)); } else { binding.tvUsed.setVisibility(View.VISIBLE); binding.tvUsed.setEnabled(true); - + binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText()); } - - // 日期展示 - if (item.isHasExpired()) { // 过期 - binding.tvCounters.setText(mContext.getString(R.string.past_due)); - } else { - String days; - if (item.getExpireDays() > 99) { - days = "99+"; - } else { - days = item.getExpireDays() + ""; - } - binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day)); - } - } } diff --git a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyHeadWearAdapter.java b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyHeadWearAdapter.java index 70f2de116..5c79faee9 100644 --- a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyHeadWearAdapter.java +++ b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyHeadWearAdapter.java @@ -46,30 +46,14 @@ public class MyHeadWearAdapter extends BaseAdapter { binding.ivTag.setImageResource(R.drawable.ic_mark_exclusive); } - // 过期状态不可使用 - if (item.getStatus() == 2) { - binding.tvUsed.setVisibility(View.GONE); - binding.tvUsed.setEnabled(false); - binding.tvUsed.setText("使用"); - } else { + if (item.getStatus() == 3) { binding.tvUsed.setVisibility(View.VISIBLE); binding.tvUsed.setEnabled(true); - - } - - // 日期展示 - if (item.getStatus() == 2) { // 过期 - binding.tvCounters.setText(mContext.getString(R.string.past_due)); + binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText()); } else { - String days; - if (item.getExpireDays() > 99){ - days = "99+"; - }else { - days = item.getExpireDays()+""; - } - binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day)); + binding.tvUsed.setVisibility(View.GONE); + binding.tvCounters.setText(mContext.getString(R.string.past_due)); } - } } diff --git a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyNamePlateAdapter.java b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyNamePlateAdapter.java index 51c5b0cf7..301878fdf 100644 --- a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyNamePlateAdapter.java +++ b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyNamePlateAdapter.java @@ -32,31 +32,16 @@ public class MyNamePlateAdapter extends BaseQuickAdapter 99) { - days = "99+"; - } else { - days = item.getExpireDays() + ""; - } - helper.setText(R.id.tv_counters, mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day)); - tvUsed.setVisibility(View.VISIBLE); - tvUsed.setEnabled(true); } } } diff --git a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyUserCardWearAdapter.java b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyUserCardWearAdapter.java index 96ad381e7..8168df8d5 100644 --- a/app/src/main/java/com/nnbc123/app/decoration/adapter/MyUserCardWearAdapter.java +++ b/app/src/main/java/com/nnbc123/app/decoration/adapter/MyUserCardWearAdapter.java @@ -54,25 +54,12 @@ public class MyUserCardWearAdapter extends BaseAdapter { binding.tvUsed.setVisibility(View.GONE); binding.tvUsed.setEnabled(false); binding.tvUsed.setText("使用"); + binding.tvCounters.setText(mContext.getString(R.string.past_due)); } else { binding.tvUsed.setVisibility(View.VISIBLE); binding.tvUsed.setEnabled(true); - + binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText()); } - - // 日期展示 - if (item.isHasExpired()) { // 过期 - binding.tvCounters.setText(mContext.getString(R.string.past_due)); - } else { - String days; - if (item.getExpireDays() > 99) { - days = "99+"; - } else { - days = item.getExpireDays() + ""; - } - binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day)); - } - } } diff --git a/app/src/main/java/com/nnbc123/app/decoration/view/widgets/MyDecorationMagicIndicator.java b/app/src/main/java/com/nnbc123/app/decoration/view/widgets/MyDecorationMagicIndicator.java index bf5c61c7c..fee4ca664 100644 --- a/app/src/main/java/com/nnbc123/app/decoration/view/widgets/MyDecorationMagicIndicator.java +++ b/app/src/main/java/com/nnbc123/app/decoration/view/widgets/MyDecorationMagicIndicator.java @@ -1,13 +1,18 @@ package com.nnbc123.app.decoration.view.widgets; import android.content.Context; +import android.graphics.Color; +import android.view.ViewGroup; +import android.widget.FrameLayout; import androidx.core.content.ContextCompat; import com.nnbc123.app.R; +import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil; import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter; import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; +import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator; import com.nnbc123.core.home.bean.TabInfo; import java.util.List; @@ -38,9 +43,9 @@ public class MyDecorationMagicIndicator extends CommonNavigatorAdapter { public IPagerTitleView getTitleView(Context context, final int i) { BadgeScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new BadgeScaleTransitionPagerTitleView(context); scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(mContext, R.color.text_secondary_878b9c)); - scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(mContext, R.color.text_title_282828)); + scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(mContext, R.color.color_2B2D33)); scaleTransitionPagerTitleView.setMinScale(0.9f); - scaleTransitionPagerTitleView.setTextSize(15); + scaleTransitionPagerTitleView.setTextSize(14); scaleTransitionPagerTitleView.setText(mTitleList.get(i).getName()); if (mTitleList.get(i).getName().equals("座驾")) { scaleTransitionPagerTitleView.findViewById(R.id.car_badge).setId(R.id.car_badge_garage); @@ -62,7 +67,16 @@ public class MyDecorationMagicIndicator extends CommonNavigatorAdapter { @Override public IPagerIndicator getIndicator(Context context) { - return null; + LinePagerIndicator indicator = new LinePagerIndicator(context); + indicator.setMode(LinePagerIndicator.MODE_EXACTLY); + indicator.setLineHeight(UIUtil.dip2px(context, 4)); + indicator.setRoundRadius(UIUtil.dip2px(context, 2)); + indicator.setLineWidth(UIUtil.dip2px(context, 8)); + indicator.setColors(Color.parseColor("#FFDA24")); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + //lp.bottomMargin = 0; + indicator.setLayoutParams(lp); + return indicator; } public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) { diff --git a/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java b/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java index 7e525413c..885c3ed83 100644 --- a/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java +++ b/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java @@ -10,6 +10,7 @@ import android.graphics.drawable.Drawable; import com.nnbc123.app.R; import com.nnbc123.app.vip.VipHelper; import com.nnbc123.core.gift.bean.GiftInfo; +import com.nnbc123.core.gift.bean.GiftType; import com.nnbc123.core.gift.bean.SimpleVipInfo; import com.nnbc123.library.bindinglist.BaseItem; @@ -28,6 +29,8 @@ public class GiftInfoVm extends BaseItem { public final ObservableField countText = new ObservableField<>(); + public final ObservableBoolean isLocked = new ObservableBoolean(); + public Drawable nobleDrawable; public Drawable radishDrawable; @@ -54,8 +57,6 @@ public class GiftInfoVm extends BaseItem { */ public boolean isExclusive; - public boolean isLocked; - public String vipIcon; public boolean isPrivateChat; @@ -64,13 +65,13 @@ public class GiftInfoVm extends BaseItem { super(context, data); this.isSelect.set(select); if (data.getConsumeType() == GiftInfo.CONSUME_TYPE_GOLD) { - radishDrawable = null; - radishDrawableSelected = null; + radishDrawable = context.getResources().getDrawable(R.drawable.gift_dialog_ic_diamond); + radishDrawableSelected = context.getResources().getDrawable(R.drawable.gift_dialog_ic_diamond); } else { radishDrawable = context.getResources().getDrawable(R.drawable.icon_radish_transparent); radishDrawableSelected = context.getResources().getDrawable(R.drawable.icon_radish_transparent_selected); } - goldText.set(data.getGoldPrice() + "钻石"); + goldText.set(String.valueOf(data.getGoldPrice())); this.isKnap.set(isKnap); updateCount(); int nobleId = data.getLevel(); @@ -88,8 +89,8 @@ public class GiftInfoVm extends BaseItem { isShowEffect = data.isHasEffect(); isExclusive = data.isRoomExclude(); SimpleVipInfo vipInfo = data.getGiftVipInfo(); - isLocked = vipInfo != null && VipHelper.getMyVipLevel() < vipInfo.getVipLevel(); vipIcon = vipInfo == null ? "" : vipInfo.getVipIcon(); + isLocked.set(getIsLocked()); } @Override @@ -106,4 +107,20 @@ public class GiftInfoVm extends BaseItem { this.countText.set("x" + data.getCount()); } + public void refreshUnlockState() { + isLocked.set(getIsLocked()); + } + + private boolean getIsLocked() { + SimpleVipInfo vipInfo = data.getGiftVipInfo(); + boolean isLocked = vipInfo != null && VipHelper.getMyVipLevel() < vipInfo.getVipLevel(); + if (!isLocked) { + if (data.getGiftType() == GiftType.GIFT_TYPE_UNLOCK) { + if (!data.isUnlocked()) { + isLocked = true; + } + } + } + return isLocked; + } } diff --git a/app/src/main/java/com/nnbc123/app/ui/user/UserGiftActivity.java b/app/src/main/java/com/nnbc123/app/ui/user/UserGiftActivity.java index 7caa5a198..9a4da99d6 100644 --- a/app/src/main/java/com/nnbc123/app/ui/user/UserGiftActivity.java +++ b/app/src/main/java/com/nnbc123/app/ui/user/UserGiftActivity.java @@ -30,8 +30,8 @@ public class UserGiftActivity extends BaseActivity { MagicIndicator magicIndicator = findViewById(R.id.magic_indicator); List fragmentList = new ArrayList<>(2); //礼物类型 1:普通礼物;2:辛运礼物 - fragmentList.add(UserInfoGiftFragment.newInstance(1,true)); - fragmentList.add(UserInfoGiftFragment.newInstance(2,true)); + fragmentList.add(UserInfoGiftFragment.newInstance(1)); + fragmentList.add(UserInfoGiftFragment.newInstance(2)); UserInfoPagerAdapter pagerAdapter = new UserInfoPagerAdapter(getSupportFragmentManager(), fragmentList); final List tagList = new ArrayList<>(2); tagList.add("普通礼物"); diff --git a/app/src/main/java/com/nnbc123/app/ui/user/UserInfoActivity.java b/app/src/main/java/com/nnbc123/app/ui/user/UserInfoActivity.java index 36b463bcc..c7152b29b 100644 --- a/app/src/main/java/com/nnbc123/app/ui/user/UserInfoActivity.java +++ b/app/src/main/java/com/nnbc123/app/ui/user/UserInfoActivity.java @@ -9,6 +9,7 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.view.View; +import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -57,6 +58,7 @@ import com.nnbc123.app.ui.utils.ImageLoadUtils; import com.nnbc123.app.ui.widget.ButtonItem; import com.nnbc123.app.ui.widget.ObservableScrollView; import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper; +import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil; import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator; import com.nnbc123.app.ui.widget.rollviewpager.HintView; import com.nnbc123.app.ui.widget.rollviewpager.RollPagerView; @@ -163,6 +165,11 @@ public class UserInfoActivity extends BaseBindingActivity(UserInfoItem.TYPE_GIFT_ITEM, giftWallInfoList.get(i)); userInfoItems.add(userInfoItem); - //非礼物详情页主需要12个就够了 - if (!isDetails && i == 11){ - break; - } } } diff --git a/app/src/main/java/com/nnbc123/app/ui/user/adapter/UserGiftAdapter.java b/app/src/main/java/com/nnbc123/app/ui/user/adapter/UserGiftAdapter.java index d8d2868b4..2a7891b22 100644 --- a/app/src/main/java/com/nnbc123/app/ui/user/adapter/UserGiftAdapter.java +++ b/app/src/main/java/com/nnbc123/app/ui/user/adapter/UserGiftAdapter.java @@ -3,24 +3,24 @@ package com.nnbc123.app.ui.user.adapter; import android.content.Context; import android.widget.ImageView; +import android.widget.TextView; import com.chad.library.adapter.base.BaseViewHolder; import com.nnbc123.app.R; import com.nnbc123.app.ui.utils.ImageLoadUtils; import com.nnbc123.core.bean.UserInfoItem; import com.nnbc123.core.user.bean.GiftWallInfo; +import com.nnbc123.library.utils.ResUtil; import java.util.List; public class UserGiftAdapter extends UserTabBaseAdapter { - private final boolean isDetails; - public UserGiftAdapter(Context context, List data, boolean isDetails) { + public UserGiftAdapter(Context context, List data) { super(context, data); addItemType(UserInfoItem.TYPE_GIFT_ITEM, R.layout.list_item_gift_wall_info); addItemType(UserInfoItem.TYPE_GIFT_EMPTY, R.layout.layout_gift_empty); - this.isDetails = isDetails; } @Override @@ -46,17 +46,57 @@ public class UserGiftAdapter extends UserTabBaseAdapter { GiftWallInfo giftWallInfo = (GiftWallInfo) item.getData(); if (giftWallInfo != null) { - helper.setText(R.id.gift_name, giftWallInfo.getGiftName()) - .setGone(R.id.gift_name, isDetails) .setText(R.id.gift_num, "x" + giftWallInfo.getReciveCount()) - .setBackgroundRes(R.id.gift_num, isDetails ? R.drawable.bg_user_gift_item_details : R.drawable.bg_user_gift_item) - .setText(R.id.gift_price, giftWallInfo.getGiftPrice() + "") - .setGone(R.id.gift_price, isDetails); + .setText(R.id.gift_price, giftWallInfo.getGiftPrice() + ""); ImageView giftPic = helper.itemView.findViewById(R.id.gift_img); ImageLoadUtils.loadImage(mContext, giftWallInfo.getPicUrl(), giftPic); + loadLevelUI(helper, giftWallInfo); } + } + private void loadLevelUI(BaseViewHolder helper, GiftWallInfo item) { + ImageView bgView = helper.getView(R.id.iv_bg); + TextView nameView = helper.getView(R.id.gift_name); + TextView numView = helper.getView(R.id.gift_num); + TextView priceView = helper.getView(R.id.gift_price); + int bgResId; + switch (item.getGiftLevel()) { + case 1: + bgResId = R.drawable.gift_wall_bg_level_1; + break; + case 2: + bgResId = R.drawable.gift_wall_bg_level_2; + break; + case 3: + bgResId = R.drawable.gift_wall_bg_level_3; + break; + case 4: + bgResId = R.drawable.gift_wall_bg_level_4; + break; + case 5: + bgResId = R.drawable.gift_wall_bg_level_5; + break; + case 6: + bgResId = R.drawable.gift_wall_bg_level_6; + break; + case 7: + bgResId = R.drawable.gift_wall_bg_level_7; + break; + default: + bgResId = R.drawable.gift_wall_bg_level_0; + break; + } + bgView.setImageResource(bgResId); + if (bgResId == R.drawable.gift_wall_bg_level_0) { + nameView.setTextColor(ResUtil.getColor(R.color.color_696D7A)); + numView.setTextColor(ResUtil.getColor(R.color.color_7F8494)); + priceView.setTextColor(ResUtil.getColor(R.color.color_7F8494)); + } else { + nameView.setTextColor(ResUtil.getColor(R.color.color_FFFFFF)); + numView.setTextColor(ResUtil.getColor(R.color.color_F5F6FA)); + priceView.setTextColor(ResUtil.getColor(R.color.color_F5F6FA)); + } } } diff --git a/app/src/main/java/com/nnbc123/app/ui/user/view/UserInfoInfoFragment.kt b/app/src/main/java/com/nnbc123/app/ui/user/view/UserInfoInfoFragment.kt index 33580c7a2..6e909f710 100644 --- a/app/src/main/java/com/nnbc123/app/ui/user/view/UserInfoInfoFragment.kt +++ b/app/src/main/java/com/nnbc123/app/ui/user/view/UserInfoInfoFragment.kt @@ -1,6 +1,5 @@ package com.nnbc123.app.ui.user.view -import android.content.Intent import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.view.Gravity @@ -13,6 +12,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.LinearLayoutManager import androidx.viewpager.widget.ViewPager +import com.chuhai.utils.ktx.singleClick import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.nnbc123.app.R import com.nnbc123.app.base.BaseViewBindingFragment @@ -21,17 +21,18 @@ import com.nnbc123.app.home.adapter.MainMagicIndicatorAdapter import com.nnbc123.app.skill.activity.SkillHomeActivity import com.nnbc123.app.skill.activity.SkillHomeActivity.Companion.PAGE_TYPE_CUSTOM import com.nnbc123.app.skill.activity.SkillHomeActivity.Companion.PAGE_TYPE_SELF -import com.nnbc123.app.ui.user.UserGiftActivity import com.nnbc123.app.ui.user.UserInfoActivity import com.nnbc123.app.ui.user.UserInfoGiftFragment import com.nnbc123.app.ui.user.adapter.SkillCardAdapter import com.nnbc123.app.ui.user.adapter.UserInfoPagerAdapter import com.nnbc123.app.ui.user.decorationsend.UserInfoSkillDecoration import com.nnbc123.app.ui.user.viewmodel.UserInfoViewModel +import com.nnbc123.app.ui.webview.CommonWebViewActivity import com.nnbc123.app.ui.widget.magicindicator.MagicIndicator import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator +import com.nnbc123.core.UriProvider import com.nnbc123.core.auth.AuthModel import com.nnbc123.core.user.bean.UserInfoSkillEntity import com.nnbc123.library.annatation.ActLayoutRes @@ -54,14 +55,15 @@ class UserInfoInfoFragment : BaseViewBindingFragment = ArrayList(2) //礼物类型 1:普通礼物;2:辛运礼物 - fragmentList.add(UserInfoGiftFragment.newInstance(1, false)) - fragmentList.add(UserInfoGiftFragment.newInstance(2, false)) + fragmentList.add(UserInfoGiftFragment.newInstance(1)) + fragmentList.add(UserInfoGiftFragment.newInstance(2)) val pagerAdapter = UserInfoPagerAdapter(childFragmentManager, fragmentList) val tagList: MutableList = ArrayList(2) tagList.add("普通礼物") tagList.add("幸运礼物") val commonNavigator = CommonNavigator(context) commonNavigator.setTitleWrapContent(true) + commonNavigator.setTitleGravity(Gravity.CENTER) commonNavigator.titleMargin = ScreenUtil.dip2px(7.0F) val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, tagList) magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? -> @@ -115,9 +117,6 @@ class UserInfoInfoFragment : BaseViewBindingFragment startActivity(Intent(mContext, UserGiftActivity::class.java)) - } } private fun createSkillEmptyView(): View { @@ -150,11 +149,19 @@ class UserInfoInfoFragment : BaseViewBindingFragment() { @Override diff --git a/app/src/main/java/com/nnbc123/app/ui/utils/ImageLoadUtilsV2.java b/app/src/main/java/com/nnbc123/app/ui/utils/ImageLoadUtilsV2.java index 67375cc8f..20c3ee2ad 100644 --- a/app/src/main/java/com/nnbc123/app/ui/utils/ImageLoadUtilsV2.java +++ b/app/src/main/java/com/nnbc123/app/ui/utils/ImageLoadUtilsV2.java @@ -69,6 +69,15 @@ public class ImageLoadUtilsV2 { isDontAnim, null); } + public static void loadImage(ImageView imageView, String url, int defaultRes, int roundDp) { + if (imageView == null) { + return; + } + loadImage(imageView.getContext(), imageView, url, -1, false, + defaultRes, defaultRes, false, null, + new CenterCrop(), new RoundedCorners(UIUtil.dip2px(imageView.getContext(), roundDp))); + } + public static void loadImage(ImageView imageView, String url, int size, boolean isSquare, int errorId, int placeholderId, diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/GIftDialogUnlockPanel.kt b/app/src/main/java/com/nnbc123/app/ui/widget/GIftDialogUnlockPanel.kt new file mode 100644 index 000000000..4e24a04eb --- /dev/null +++ b/app/src/main/java/com/nnbc123/app/ui/widget/GIftDialogUnlockPanel.kt @@ -0,0 +1,98 @@ +package com.nnbc123.app.ui.widget + +import android.content.Context +import android.graphics.Color +import android.util.AttributeSet +import android.view.ViewGroup +import androidx.cardview.widget.CardView +import androidx.core.util.Consumer +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.github.mmin18.widget.RealtimeBlurView +import com.nnbc123.app.R +import com.nnbc123.core.gift.bean.GiftInfo +import com.nnbc123.core.gift.bean.GiftType +import com.nnbc123.core.gift.bean.UnLockBaseGiftInfo +import com.nnbc123.core.gift.bean.UnlockItem + +/** + * Created by Max on 2024/1/26 17:16 + * Desc: + **/ +class GIftDialogUnlockPanel : CardView { + private var recyclerView: RecyclerView? = null + private var adapter: GiftUnLockInfoAdapter = GiftUnLockInfoAdapter(emptyList()) + + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + + init { + inflate(context, R.layout.gift_dialog_unlock_panel, this) + recyclerView = findViewById(R.id.recyclerView) + recyclerView?.adapter = adapter + } + + fun update(currentGift: GiftInfo?) { + if (currentGift == null || currentGift.giftType != GiftType.GIFT_TYPE_UNLOCK) { + this.isVisible = false + return + } + val list = ArrayList() + val baseGift = currentGift.baseGift + val childGift = currentGift.unlockGiftList + if (baseGift != null) { + list.add(UnLockBaseGiftInfo(baseGift)) + } + if (!childGift.isNullOrEmpty()) { + list.addAll(childGift) + } + if (list.isEmpty()) { + this.isVisible = false + return + } + this.isVisible = true + checkAddBlurView() + val index = list.indexOfFirst { + it.getGiftData()?.giftId == currentGift.giftId + } + adapter.selectItemId = currentGift.giftId + adapter.setNewData(baseGift, list) + if (index >= 0) { + recyclerView?.smoothScrollToPosition(index) + } + } + + fun refreshState() { + adapter.notifyItemRangeChanged(0, adapter.itemCount, true) + } + + fun setOnItemClickListener(listener: Consumer) { + adapter.setOnItemClickListener { adapter, view, position -> + val item = adapter.getItem(position) as? UnlockItem + val giftId = item?.getGiftData()?.giftId + if (giftId != null) { + listener.accept(giftId) + } + } + } + + private fun checkAddBlurView() { + if (getChildAt(0) is RealtimeBlurView) { + return + } + val blurView = RealtimeBlurView(context, null) + blurView.setBlurRadius(25f) + blurView.setDownsampleFactor(4f) + blurView.setOverlayColor(Color.parseColor("#e0161722")) + blurView.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + addView(blurView, 0) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java b/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java index 3a339245e..029ad7817 100644 --- a/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java +++ b/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java @@ -31,6 +31,7 @@ import androidx.appcompat.widget.AppCompatTextView; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Group; import androidx.core.content.ContextCompat; +import androidx.core.util.Consumer; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -217,6 +218,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene private AppCompatTextView tvNum; private SuperTextView tvPrivilegeGive; private Group groupPrivilege; + private GIftDialogUnlockPanel unLockPanel; + private ImageView dressUpBannerView; + private SparseArray cacheItemView = new SparseArray<>(); private int mPrivilegePosition = 0; @@ -423,6 +427,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene ivDrawGiftRemoveLast = findViewById(R.id.iv_draw_gift_remove_last); ivDrawGiftRemoveAll = findViewById(R.id.iv_draw_gift_remove_all); ivDrawGiftClose = findViewById(R.id.iv_draw_gift_close); + unLockPanel = findViewById(R.id.panel_unlock); + dressUpBannerView = findViewById(R.id.iv_dress_up_banner); + dressUpBannerView.setOnClickListener(this); ivDrawGiftClose.setOnClickListener(this); ivDrawGiftRemoveLast.setOnClickListener(this); ivDrawGiftRemoveAll.setOnClickListener(this); @@ -432,8 +439,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene giftNumLayout = findViewById(R.id.gift_number_layout); giftNumLayout.setOnClickListener(this); List tabInfoList = new ArrayList<>(); - tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NORMAL, "礼物", "礼物")); - tabInfoList.add(new GiftTab(GiftIndicator.TYPE_LUCKY, "幸运", "幸运")); + tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NORMAL, "普通", "普通")); + tabInfoList.add(new GiftTab(GiftIndicator.TYPE_INTEREST, "趣味", "趣味", true)); tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NOBLE, "贵族", "贵族")); tabInfoList.add(new GiftTab(GiftIndicator.TYPE_WEEK, "星座礼物", "星座礼物")); tabInfoList.add(new GiftTab(GiftIndicator.TYPE_SING_ROOM, "人气", "人气")); @@ -446,8 +453,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene giftIndicator.initTab( tabInfoList, true, - context.getResources().getColor(R.color.color_bdbfd0), - context.getResources().getColor(R.color.color_ffe710) + context.getResources().getColor(R.color.color_CED1DB), + context.getResources().getColor(R.color.color_FFDA24) ); //noinspection ResultOfMethodCallIgnored giftIndicator.addClick() @@ -456,15 +463,13 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene .subscribe(integer -> { updateGiftView(integer); //福袋礼物有定时更新逻辑,每次点击都需要刷新福袋礼物信息 - if (integer == GiftIndicator.TYPE_LUCKY) { + if (integer == GiftIndicator.TYPE_INTEREST) { reloadData(false); } }); if (isInRoom) { - giftIndicator.showPosition(GiftIndicator.TYPE_LUCKY); } else { - giftIndicator.hidePosition(GiftIndicator.TYPE_LUCKY); giftIndicator.hidePosition(GiftIndicator.TYPE_DRAW_GIFT); llTabType.setVisibility(View.GONE); lineTabType.setVisibility(View.GONE); @@ -523,15 +528,17 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene case GiftType.GIFT_TYPE_NORMAL: indicatorType = GiftIndicator.TYPE_NORMAL; break; - case GiftType.GIFT_TYPE_LUCKY: - indicatorType = GiftIndicator.TYPE_LUCKY; - break; case GiftType.GIFT_TYPE_VIP: indicatorType = GiftIndicator.TYPE_NOBLE; break; case GiftType.GIFT_TYPE_WEEK_STAR: indicatorType = GiftIndicator.TYPE_WEEK; break; + case GiftType.GIFT_TYPE_UNLOCK: + case GiftType.GIFT_TYPE_LUCKY: + case GiftType.GIFT_TYPE_DRESS_UP: + indicatorType = GiftIndicator.TYPE_INTEREST; + break; } } showGiftTab(indicatorType, giftInfo); @@ -590,6 +597,15 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene if (DemoCache.readNewGiftTypeTipIndicator()) { viewNewFeature.setVisibility(View.VISIBLE); } + unLockPanel.setOnItemClickListener(new Consumer() { + @Override + public void accept(Integer integer) { + if (integer == null) { + return; + } + trySelectGift(integer); + } + }); } private void initVipPager() { @@ -621,6 +637,33 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene pagerViewVip.setPlayDelay(3000); } + private boolean trySelectGift(int giftId) { + if (pagerList == null) { + return false; + } + int currentPage = gridView.getCurrentItem(); + if (currentPage < 0 || currentPage >= pagerList.size()) { + return false; + } + List list = pagerList.get(currentPage); + if (list == null) { + return false; + } + for (int i = 0; i < list.size(); i++) { + GiftInfoVm item = list.get(i); + GiftInfo itemInfo = item.data(); + if (itemInfo != null && itemInfo.getGiftId() == giftId) { + onGiftClick(item); + RecyclerView recyclerView = cacheItemView.get(currentPage); + if (recyclerView != null) { + recyclerView.smoothScrollToPosition(i); + } + return true; + } + } + return false; + } + private void showLoadingAnimation() { Animation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, @@ -689,8 +732,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene currentGiftInfoList = nobleGiftInfos; } else if (position == GiftIndicator.TYPE_NORMAL) { currentGiftInfoList = getNormalGiftInfos(); - } else if (position == GiftIndicator.TYPE_LUCKY) { - currentGiftInfoList = getLuckyGiftInfos(); } else if (position == GiftIndicator.TYPE_WEEK) { currentGiftInfoList = getWeekStarGiftInfos(); } else if (position == GiftIndicator.TYPE_DRAW_GIFT) { @@ -699,6 +740,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene currentGiftInfoList = getSingleRoomGiftInfos(); } else if (position == GiftIndicator.TYPE_PENALTY) { currentGiftInfoList = getPenaltyGiftInfos(); + } else if (position == GiftIndicator.TYPE_INTEREST) { + currentGiftInfoList = getInterestGiftInfos(); } //是否背包礼物 final boolean isKnap = (position == GiftIndicator.TYPE_KNAP); @@ -755,7 +798,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene } else if (isKnap) { giftIndicator.getBackpackValueView().setVisibility(View.VISIBLE); showEmptyView(); - } else if (position == GiftIndicator.TYPE_LUCKY || + } else if (position == GiftIndicator.TYPE_INTEREST || position == GiftIndicator.TYPE_WEEK || position == GiftIndicator.TYPE_DRAW_GIFT || position == GiftIndicator.TYPE_SING_ROOM || @@ -824,6 +867,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene updateWeekStarDesc(); isShowDrawGiftModel = false; updateDrawGift(); + updateUnLockTips(); + updateDressUpTips(); } /** @@ -877,6 +922,24 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene privilegeView.setAdapter(baseQuickAdapter); } + private void updateUnLockTips() { + unLockPanel.update(currentGiftInfo); + } + + private void updateDressUpTips() { + if (currentGiftInfo == null || currentGiftInfo.getGiftType() != GiftType.GIFT_TYPE_DRESS_UP) { + dressUpBannerView.setVisibility(View.GONE); + return; + } + String banner = currentGiftInfo.getBannerUrl(); + if (banner == null || banner.length() == 0) { + dressUpBannerView.setVisibility(View.GONE); + return; + } + dressUpBannerView.setVisibility(View.VISIBLE); + ImageLoadUtils.loadImage(dressUpBannerView, banner, UIUtil.dip2px(context, 8)); + } + private void updateLuckyBagIntro() { if (luckyMsgDisposable != null) luckyMsgDisposable.dispose(); if (currentGiftInfo == null || currentGiftInfo.getGiftType() != GiftType.GIFT_TYPE_LUCKY) { @@ -908,11 +971,14 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene .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); + int count = luckyMsgAdapter.getItemCount(); + if (count > 0) { + int index = aLong.intValue() % count; + if (index == 0) { + rvLuckyMsg.scrollToPosition(index); + } else { + rvLuckyMsg.smoothScrollToPosition(index); + } } }); } @@ -1130,7 +1196,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene layoutEmpty.setVisibility(View.GONE); gridView.setVisibility(View.VISIBLE); - SparseArray cacheItemView = new SparseArray<>(); lastSelectedItem = pagerList.get(defaultSelectPage).get(defaultSelectItem); setGoldOrRadishText(lastSelectedItem); gridView.setAdapter(new PagerAdapter() { @@ -1166,22 +1231,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene giftAdapter.addData(pagerList.get(pagePos)); giftAdapter.setOnItemClickListener(item -> { - if (item.data.isSendMsg()) { - etSendMessage.setVisibility(View.VISIBLE); - } else { - etSendMessage.setVisibility(View.GONE); - } - if (lastSelectedItem != null) { - lastSelectedItem.isSelect.set(false); - } - item.isSelect.set(true); - lastSelectedItem = item; - currentGiftInfo = item.data; - setGoldOrRadishText(lastSelectedItem); - updateLuckyBagIntro(); - updateWeekStarDesc(); - isShowDrawGiftModel = true; - updateDrawGift(); + onGiftClick(item); }); container.addView(recyclerView); return recyclerView; @@ -1198,6 +1248,27 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene gridView.setCurrentItem(defaultSelectPage); } + private void onGiftClick(GiftInfoVm item) { + if (item.data.isSendMsg()) { + etSendMessage.setVisibility(View.VISIBLE); + } else { + etSendMessage.setVisibility(View.GONE); + } + if (lastSelectedItem != null) { + lastSelectedItem.isSelect.set(false); + } + item.isSelect.set(true); + lastSelectedItem = item; + currentGiftInfo = item.data; + setGoldOrRadishText(lastSelectedItem); + updateLuckyBagIntro(); + updateWeekStarDesc(); + isShowDrawGiftModel = true; + updateDrawGift(); + updateUnLockTips(); + updateDressUpTips(); + } + private List loadGiftInfoList() { List giftInfos; String roomUid = null; @@ -1237,12 +1308,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene GiftType.GIFT_TYPE_WEEK_STAR); } - private List getLuckyGiftInfos() { - return GiftModel.get().getGiftInfosByType( - String.valueOf(AvRoomDataManager.get().getRoomUid()), - GiftType.GIFT_TYPE_LUCKY); - } - private List getDrawGiftInfos() { return GiftModel.get().getGiftInfosByType( String.valueOf(AvRoomDataManager.get().getRoomUid()), @@ -1261,6 +1326,12 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene GiftType.GIFT_TYPE_PENALTY); } + private List getInterestGiftInfos() { + return GiftModel.get().getGiftInfosByType( + String.valueOf(AvRoomDataManager.get().getRoomUid()), + GiftType.GIFT_TYPE_INTEREST); + } + private List getNobleGiftInfos() { return GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_VIP); } @@ -1293,6 +1364,14 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene @Override public void onClick(View v) { switch (v.getId()) { + case R.id.iv_dress_up_banner: + if (currentGiftInfo != null) { + String skipUrl = currentGiftInfo.getBannerSkipUrl(); + if (skipUrl != null) { + CommonWebViewActivity.start(context, skipUrl); + } + } + break; case R.id.ll_gold: StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_GIFT_PANEL_TO_RECHARGE, "礼物面板_去充值:" + GIFT_DIALOG_FROM); ChargeDialog.start(getContext()); @@ -1326,10 +1405,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene micMemberInfo.setAccount(String.valueOf(uid)); targetUids.add(micMemberInfo); Log.e(TAG, "onClick: indicator type: " + giftIndicator.getCurrrentType()); + int number = giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber; giftDialogBtnClickListener.onSendGiftBtnClick( finalCurrentGiftInfo, targetUids, - giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber, + number, giftMessage, giftIndicator.getCurrrentType() == GiftIndicator.TYPE_KNAP, false, @@ -1337,7 +1417,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene new SenGiftCallback() { @Override public void onSuccess() { - onSendGiftSuccess(finalCurrentGiftInfo); + onSendGiftSuccess(finalCurrentGiftInfo, number, targetUids); } @Override @@ -1356,10 +1436,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene micMemberInfo.setAccount(String.valueOf(uid)); targetUids.add(micMemberInfo); Log.e(TAG, "onClick: indicator type: " + giftIndicator.getCurrrentType()); + int number = giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber; giftDialogBtnClickListener.onSendGiftBtnClick( finalCurrentGiftInfo, targetUids, - giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber, + number, giftMessage, giftIndicator.getCurrrentType() == GiftIndicator.TYPE_KNAP, false, @@ -1367,7 +1448,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene new SenGiftCallback() { @Override public void onSuccess() { - onSendGiftSuccess(finalCurrentGiftInfo); + onSendGiftSuccess(finalCurrentGiftInfo, number, targetUids); } @Override @@ -1388,10 +1469,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene sendGiftButton.setEnabled(true); return; } + int number = giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber; giftDialogBtnClickListener.onSendGiftBtnClick( finalCurrentGiftInfo, selectedMembers, - giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber, + number, giftMessage, giftIndicator.getCurrrentType() == GiftIndicator.TYPE_KNAP, avatarListAdapter.getSelectType() == GiftAvatarAdapter.SELECT_TYPE_WHOLE_MIC, @@ -1399,7 +1481,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene new SenGiftCallback() { @Override public void onSuccess() { - onSendGiftSuccess(finalCurrentGiftInfo); + onSendGiftSuccess(finalCurrentGiftInfo, number, selectedMembers); } @Override @@ -1511,11 +1593,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene tvTabInteraction.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); giftIndicator.hidePosition(GiftIndicator.TYPE_DRAW_GIFT); giftIndicator.hidePosition(GiftIndicator.TYPE_PENALTY); - giftIndicator.showPosition(GiftIndicator.TYPE_LUCKY); giftIndicator.showPosition(GiftIndicator.TYPE_NOBLE); giftIndicator.showPosition(GiftIndicator.TYPE_WEEK); giftIndicator.showPosition(GiftIndicator.TYPE_NORMAL); giftIndicator.showPosition(GiftIndicator.TYPE_PRIVILEGE); + giftIndicator.showPosition(GiftIndicator.TYPE_INTEREST); if (AvRoomDataManager.get().isSingleRoom()) { giftIndicator.showPosition(GiftIndicator.TYPE_SING_ROOM); } else { @@ -1539,18 +1621,18 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene giftIndicator.showPosition(GiftIndicator.TYPE_DRAW_GIFT); giftIndicator.showPosition(GiftIndicator.TYPE_PENALTY); - giftIndicator.hidePosition(GiftIndicator.TYPE_LUCKY); giftIndicator.hidePosition(GiftIndicator.TYPE_NOBLE); giftIndicator.hidePosition(GiftIndicator.TYPE_WEEK); giftIndicator.hidePosition(GiftIndicator.TYPE_NORMAL); giftIndicator.hidePosition(GiftIndicator.TYPE_SING_ROOM); giftIndicator.hidePosition(GiftIndicator.TYPE_PRIVILEGE); + giftIndicator.hidePosition(GiftIndicator.TYPE_INTEREST); giftIndicator.setPosition(GiftIndicator.TYPE_DRAW_GIFT); updateGiftView(giftIndicator.getCurrrentType()); } - private void onSendGiftSuccess(GiftInfo giftInfo) { + private void onSendGiftSuccess(GiftInfo giftInfo, int giftNumber, List receiveUsers) { if (sendGiftButton == null) return; sendGiftButton.setText("赠送"); sendGiftButton.setEnabled(true); @@ -1558,6 +1640,65 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene SingleToastUtil.showToast("发送涂鸦礼物:" + giftInfo.getGiftName() + "成功"); clearDrawGift(); dismiss(); + } else if (giftInfo.getGiftType() == GiftType.GIFT_TYPE_UNLOCK) { + int totalNumber = 0; + if (receiveUsers != null) { + totalNumber = receiveUsers.size() * giftNumber; + } + updateUnlockStateSendSuccess(giftInfo, totalNumber); + } + } + + // 更新本地解锁礼物的数据状态(解锁状态、送出的数量) + private void updateUnlockStateSendSuccess(GiftInfo giftInfo, int totalNumber) { + if (giftInfo.getGiftType() != GiftType.GIFT_TYPE_UNLOCK) { + return; + } + GiftInfo baseGift = giftInfo.getBaseGift(); + if (baseGift == null || baseGift.getGiftId() != giftInfo.getGiftId()) { + // 不是基础礼物 + return; + } + // 先更新数据 + updateUnlockGiftDataState(giftInfo.getGiftId(), totalNumber); + // 后更新UI + updateUnlockGiftUiState(giftInfo.getGiftId()); + // 更新提示面板UI + unLockPanel.refreshState(); + } + + // 更新解锁礼物数据状态 + private void updateUnlockGiftDataState(int giftId, int number) { + List panelGiftList = GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_UNLOCK); + if (panelGiftList == null) { + return; + } + for (GiftInfo item : panelGiftList) { + if (item.getGiftType() != GiftType.GIFT_TYPE_UNLOCK) { + continue; + } + if (item.getBaseGift() == null || item.getBaseGift().getGiftId() != giftId) { + continue; + } + item.updateUnlockProgress(number); + } + } + + // 更新解锁礼物Ui状态 + private void updateUnlockGiftUiState(int giftId) { + if (giftIndicator.getCurrrentType() != GiftIndicator.TYPE_INTEREST) { + return; + } + if (ListUtils.isListEmpty(pagerList)) { + return; + } + for (List page : pagerList) { + for (GiftInfoVm item : page) { + GiftInfo itemBaseGift = item.data.getBaseGift(); + if (itemBaseGift != null && itemBaseGift.getGiftId() == giftId) { + item.refreshUnlockState(); + } + } } } @@ -1566,9 +1707,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene int currentType = giftIndicator.getCurrrentType(); switch (currentType) { case GiftIndicator.TYPE_NORMAL: - case GiftIndicator.TYPE_LUCKY: case GiftIndicator.TYPE_NOBLE: case GiftIndicator.TYPE_WEEK: + case GiftIndicator.TYPE_INTEREST: String roomUid = null; if (isInRoom) { if (AvRoomDataManager.get().getRoomUid() > 0) { diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/GiftUnLockInfoAdapter.kt b/app/src/main/java/com/nnbc123/app/ui/widget/GiftUnLockInfoAdapter.kt new file mode 100644 index 000000000..c09b81fc0 --- /dev/null +++ b/app/src/main/java/com/nnbc123/app/ui/widget/GiftUnLockInfoAdapter.kt @@ -0,0 +1,120 @@ +package com.nnbc123.app.ui.widget + +import android.view.View +import android.widget.ImageView +import android.widget.ProgressBar +import android.widget.TextView +import androidx.core.view.isVisible +import com.chad.library.adapter.base.BaseMultiItemQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.chuhai.utils.ktx.getColorById +import com.chuhai.utils.spannable.SpannableTextBuilder +import com.nnbc123.app.R +import com.nnbc123.app.ui.utils.load +import com.nnbc123.core.gift.bean.GiftInfo +import com.nnbc123.core.gift.bean.UnLockGiftInfo +import com.nnbc123.core.gift.bean.UnlockItem + +/** + * Created by Max on 2024/1/25 19:41 + * Desc: + **/ +class GiftUnLockInfoAdapter(list: List) : + BaseMultiItemQuickAdapter(list) { + + var selectItemId: Int = -1 + + private var baseGiftName: String? = null + + init { + addItemType(UnlockItem.ITEM_TYPE_BASE, R.layout.gift_dialog_lock_item_basics) + addItemType(UnlockItem.ITEM_TYPE_CHILD, R.layout.gift_dialog_lock_item_child) + } + + override fun convertPayloads( + helper: BaseViewHolder, + item: UnlockItem?, + payloads: MutableList + ) { + super.convertPayloads(helper, item, payloads) + if (item?.itemType == UnlockItem.ITEM_TYPE_CHILD) { + convertChildState(helper, item) + } + } + + override fun convert(helper: BaseViewHolder, item: UnlockItem?) { + val giftInfo = item?.getGiftData() + when (item?.itemType) { + UnlockItem.ITEM_TYPE_BASE -> { + if (giftInfo?.giftId == selectItemId) { + helper.setBackgroundRes( + R.id.layout_root, + R.drawable.gift_dialog_bg_lock_item_selected + ) + } else { + helper.setBackgroundRes(R.id.layout_root, R.drawable.shape_14ffffff_4dp) + } + helper.getView(R.id.iv_cover).load(giftInfo?.giftUrl) + helper.setText(R.id.tv_name, giftInfo?.giftName ?: "") + helper.setText(R.id.tv_amount, giftInfo?.goldPrice?.toString() ?: "") + } + + UnlockItem.ITEM_TYPE_CHILD -> { + if (giftInfo?.giftId == selectItemId) { + helper.setBackgroundRes( + R.id.layout_root, + R.drawable.gift_dialog_bg_lock_item_selected + ) + } else { + helper.setBackgroundRes(R.id.layout_root, R.drawable.shape_14ffffff_4dp) + } + var unlockItem: UnLockGiftInfo? = null + if (item is UnLockGiftInfo) { + unlockItem = item + } + val total = unlockItem?.condition ?: 0 + helper.getView(R.id.iv_cover).load(giftInfo?.giftUrl) + val nameView = helper.getView(R.id.tv_name) + SpannableTextBuilder(nameView) + .appendText("送出") + .appendText( + " ${total}个 ", + textColor = nameView.context.getColorById(R.color.color_FFDA24) + ) + .appendText("${baseGiftName ?: ""}可解锁").apply() + convertChildState(helper, item) + } + } + } + + private fun convertChildState(helper: BaseViewHolder, item: UnlockItem?) { + var unlockItem: UnLockGiftInfo? = null + if (item is UnLockGiftInfo) { + unlockItem = item + } + val total = unlockItem?.condition ?: 0 + val progress = (unlockItem?.process ?: 0).coerceAtMost(total) + val progressBar = helper.getView(R.id.progress_bar) + progressBar.max = total + progressBar.progress = progress + helper.setText(R.id.tv_count, "$progress/$total") + val lockIconView = helper.getView(R.id.iv_lock) + val alpha: Float + if (unlockItem?.unlocked == true) { + alpha = 1f + lockIconView.isVisible = false + } else { + alpha = 0.5f + lockIconView.isVisible = true + } + helper.setAlpha(R.id.tv_name, alpha) + helper.setAlpha(R.id.iv_cover, alpha) + helper.setAlpha(R.id.tv_count, alpha) + helper.setAlpha(R.id.progress_bar, alpha) + } + + fun setNewData(baseGiftInfo: GiftInfo?, data: MutableList?) { + this.baseGiftName = baseGiftInfo?.giftName + super.setNewData(data) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/GiftIndicator.java b/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/GiftIndicator.java index 0bf589488..3d62982e0 100644 --- a/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/GiftIndicator.java +++ b/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/GiftIndicator.java @@ -80,7 +80,11 @@ public class GiftIndicator extends LinearLayout { */ public static final int TYPE_PRIVILEGE = 8; - private Map map = new HashMap<>(); + /** + * 趣味(福袋礼物、解锁礼物、装扮礼物) + */ + public static final int TYPE_INTEREST = 9; + private List tabList = new ArrayList<>(); private int currrentType = TYPE_NORMAL; @@ -143,10 +147,17 @@ public class GiftIndicator extends LinearLayout { index.getItemView().setOnClickListener(v -> { setPosition(index.getType()); emitter.onNext(index.getType()); + if (index.isNeedNewTips()) { + View view = index.getItemView().findViewById(R.id.tv_new_tag); + if (view.getVisibility() == VISIBLE) { + view.setVisibility(GONE); + DemoCache.saveNewGiftTypeTip(index.getType(), false); + } + } if (index.getType() == TYPE_PENALTY) { - ImageView imageView = index.getItemView().findViewById(R.id.iv_new_tag); - if (imageView.getVisibility() == VISIBLE) { - imageView.setVisibility(GONE); + View view = index.getItemView().findViewById(R.id.tv_new_tag); + if (view.getVisibility() == VISIBLE) { + view.setVisibility(GONE); DemoCache.saveNewGiftTypeTip(false); } } else if (index.getType() == TYPE_KNAP) { @@ -186,10 +197,16 @@ public class GiftIndicator extends LinearLayout { for (GiftTab tab : tabList) { if (tab.getType() == type) { tab.getItemView().setVisibility(VISIBLE); + if (tab.isNeedNewTips()) { + if (DemoCache.readNewGiftTypeTip(tab.getType())) { + View view = tab.getItemView().findViewById(R.id.tv_new_tag); + view.setVisibility(VISIBLE); + } + } if (type == TYPE_PENALTY) { if (DemoCache.readNewGiftTypeTip()) { - ImageView imageView = tab.getItemView().findViewById(R.id.iv_new_tag); - imageView.setVisibility(VISIBLE); + View view = tab.getItemView().findViewById(R.id.tv_new_tag); + view.setVisibility(VISIBLE); } } break; diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java b/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java index c173baceb..d6dbe2976 100644 --- a/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java +++ b/app/src/main/java/com/nnbc123/app/ui/widget/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java @@ -112,7 +112,7 @@ public class LinePagerIndicator extends View implements IPagerIndicator { @Override public void onPageSelected(int position) { - onPageScrolled(position,0,0); +// onPageScrolled(position,0,0); } @Override diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_recharge_white.png b/app/src/main/res/drawable-xhdpi/ic_arrow_recharge_white.png deleted file mode 100644 index 3f9f0eb49..000000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_arrow_recharge_white.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_gift_dialog_new.png b/app/src/main/res/drawable-xhdpi/ic_gift_dialog_new.png deleted file mode 100644 index 336c6d11a..000000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_gift_dialog_new.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/icon_room_send_arrow_white.png b/app/src/main/res/drawable-xhdpi/icon_room_send_arrow_white.png deleted file mode 100644 index 8fd160bba..000000000 Binary files a/app/src/main/res/drawable-xhdpi/icon_room_send_arrow_white.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_dialog_bg_item.9.png b/app/src/main/res/drawable-xxhdpi/gift_dialog_bg_item.9.png new file mode 100644 index 000000000..e9289b4e4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_dialog_bg_item.9.png differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_dialog_ic_diamond.png b/app/src/main/res/drawable-xxhdpi/gift_dialog_ic_diamond.png new file mode 100644 index 000000000..b96020c4a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_dialog_ic_diamond.png differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_dialog_ic_diamond_14.png b/app/src/main/res/drawable-xxhdpi/gift_dialog_ic_diamond_14.png new file mode 100644 index 000000000..55c955a72 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_dialog_ic_diamond_14.png differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_0.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_0.webp new file mode 100644 index 000000000..5650339cc Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_0.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_1.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_1.webp new file mode 100644 index 000000000..1c5700f78 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_1.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_2.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_2.webp new file mode 100644 index 000000000..8211c57a2 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_2.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_3.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_3.webp new file mode 100644 index 000000000..b3f7967b3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_3.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_4.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_4.webp new file mode 100644 index 000000000..249edb184 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_4.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_5.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_5.webp new file mode 100644 index 000000000..5757fdefc Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_5.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_6.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_6.webp new file mode 100644 index 000000000..2702531fb Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_6.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_7.webp b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_7.webp new file mode 100644 index 000000000..df27c2f65 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_bg_level_7.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/gift_wall_ic_diamond.png b/app/src/main/res/drawable-xxhdpi/gift_wall_ic_diamond.png new file mode 100644 index 000000000..17dc4c105 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gift_wall_ic_diamond.png differ diff --git a/app/src/main/res/drawable/bg_common_confirm_press.xml b/app/src/main/res/drawable/bg_common_confirm_press.xml index bae41a9f6..1128a8ffc 100644 --- a/app/src/main/res/drawable/bg_common_confirm_press.xml +++ b/app/src/main/res/drawable/bg_common_confirm_press.xml @@ -4,8 +4,8 @@ diff --git a/app/src/main/res/drawable/bg_magic_dialog_button_send.xml b/app/src/main/res/drawable/bg_magic_dialog_button_send.xml index 89815b608..81dd4befa 100644 --- a/app/src/main/res/drawable/bg_magic_dialog_button_send.xml +++ b/app/src/main/res/drawable/bg_magic_dialog_button_send.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/res/drawable/gift_dialog_bg_lock_item_selected.xml b/app/src/main/res/drawable/gift_dialog_bg_lock_item_selected.xml new file mode 100644 index 000000000..f4bc6790b --- /dev/null +++ b/app/src/main/res/drawable/gift_dialog_bg_lock_item_selected.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gift_dialog_ic_arrow_white_right.xml b/app/src/main/res/drawable/gift_dialog_ic_arrow_white_right.xml new file mode 100644 index 000000000..da5b5d927 --- /dev/null +++ b/app/src/main/res/drawable/gift_dialog_ic_arrow_white_right.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable/gift_dialog_ic_arrow_white_up.xml b/app/src/main/res/drawable/gift_dialog_ic_arrow_white_up.xml new file mode 100644 index 000000000..7a93e6d27 --- /dev/null +++ b/app/src/main/res/drawable/gift_dialog_ic_arrow_white_up.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable/gift_dialog_ic_lock.xml b/app/src/main/res/drawable/gift_dialog_ic_lock.xml new file mode 100644 index 000000000..cb5c4a4e3 --- /dev/null +++ b/app/src/main/res/drawable/gift_dialog_ic_lock.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable/gift_dialog_lock_progress_drawable.xml b/app/src/main/res/drawable/gift_dialog_lock_progress_drawable.xml new file mode 100644 index 000000000..c5629c1e9 --- /dev/null +++ b/app/src/main/res/drawable/gift_dialog_lock_progress_drawable.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_14ffffff_4dp.xml b/app/src/main/res/drawable/shape_14ffffff_4dp.xml new file mode 100644 index 000000000..a0869c5de --- /dev/null +++ b/app/src/main/res/drawable/shape_14ffffff_4dp.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_ff425b_6dp.xml b/app/src/main/res/drawable/shape_ff425b_6dp.xml new file mode 100644 index 000000000..d3ff4d78d --- /dev/null +++ b/app/src/main/res/drawable/shape_ff425b_6dp.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gift_item_select_room.xml b/app/src/main/res/drawable/shape_gift_item_select_room.xml deleted file mode 100644 index 6d68d0a94..000000000 --- a/app/src/main/res/drawable/shape_gift_item_select_room.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/drawable/shape_room_bg_send.xml b/app/src/main/res/drawable/shape_room_bg_send.xml index 6d9a3fbf7..86ab98425 100644 --- a/app/src/main/res/drawable/shape_room_bg_send.xml +++ b/app/src/main/res/drawable/shape_room_bg_send.xml @@ -2,12 +2,12 @@ \ No newline at end of file diff --git a/app/src/main/res/drawable/user_info_ic_help.xml b/app/src/main/res/drawable/user_info_ic_help.xml new file mode 100644 index 000000000..a66a1ffb6 --- /dev/null +++ b/app/src/main/res/drawable/user_info_ic_help.xml @@ -0,0 +1,18 @@ + + + + diff --git a/app/src/main/res/layout/activity_decoration_store.xml b/app/src/main/res/layout/activity_decoration_store.xml index 8abc2a346..c9003e531 100644 --- a/app/src/main/res/layout/activity_decoration_store.xml +++ b/app/src/main/res/layout/activity_decoration_store.xml @@ -4,15 +4,20 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/bg_normal_1c1b22" + android:background="#F8F8FB" android:orientation="vertical"> - + android:background="@color/color_white"> + + + android:layout_height="46dp" /> @@ -67,9 +71,9 @@ android:id="@+id/tv_diamond_num" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="0" - android:includeFontPadding="false" android:layout_marginStart="4dp" + android:includeFontPadding="false" + android:text="0" android:textColor="#ffffbc51" android:textSize="16sp" /> @@ -82,10 +86,10 @@ android:id="@+id/tv_charge" android:layout_width="72dp" android:layout_height="24dp" - android:text="充值" + android:layout_marginEnd="15dp" android:background="@drawable/bg_common_confirm" android:gravity="center" - android:layout_marginEnd="15dp" + android:text="充值" android:textColor="@color/text_normal_282828" android:textSize="12sp" /> diff --git a/app/src/main/res/layout/activity_my_decoration.xml b/app/src/main/res/layout/activity_my_decoration.xml index 88ca3dd69..737f3b548 100644 --- a/app/src/main/res/layout/activity_my_decoration.xml +++ b/app/src/main/res/layout/activity_my_decoration.xml @@ -10,19 +10,28 @@ + android:background="#F8F8FB"> - + android:background="@color/color_white"> + + + + - + android:layout_height="46dp" + android:layout_below="@+id/fl_roll_view" /> diff --git a/app/src/main/res/layout/dialog_bottom_gift.xml b/app/src/main/res/layout/dialog_bottom_gift.xml index 288d57816..76a438738 100644 --- a/app/src/main/res/layout/dialog_bottom_gift.xml +++ b/app/src/main/res/layout/dialog_bottom_gift.xml @@ -6,6 +6,36 @@ android:layout_height="wrap_content" android:layout_gravity="bottom"> + + + + @@ -542,9 +571,9 @@ + android:src="@drawable/gift_dialog_ic_arrow_white_right" /> @@ -605,7 +633,7 @@ android:layout_width="@dimen/dp_10" android:layout_height="@dimen/dp_10" android:layout_marginStart="10dp" - android:src="@drawable/icon_room_send_arrow_white" /> + android:src="@drawable/gift_dialog_ic_arrow_white_up" /> @@ -616,7 +644,7 @@ android:background="@drawable/bg_magic_dialog_button_send" android:text="赠送" android:textColor="@color/text_normal_282828" - android:textSize="@dimen/sp_15" /> + android:textSize="13dp" /> @@ -625,7 +653,7 @@ diff --git a/app/src/main/res/layout/fragment_decoration_common.xml b/app/src/main/res/layout/fragment_decoration_common.xml index a2934fb1f..4c28bea63 100644 --- a/app/src/main/res/layout/fragment_decoration_common.xml +++ b/app/src/main/res/layout/fragment_decoration_common.xml @@ -15,7 +15,7 @@ android:layout_height="match_parent" android:clipToPadding="false" android:paddingStart="14dp" - android:paddingTop="15dp" + android:paddingTop="10dp" android:paddingEnd="14dp" /> diff --git a/app/src/main/res/layout/fragment_user_info_gift.xml b/app/src/main/res/layout/fragment_user_info_gift.xml index 00882e6c8..82d791171 100644 --- a/app/src/main/res/layout/fragment_user_info_gift.xml +++ b/app/src/main/res/layout/fragment_user_info_gift.xml @@ -11,11 +11,10 @@ + android:layout_marginTop="11.5dp" + android:paddingHorizontal="9.5dp" /> diff --git a/app/src/main/res/layout/fragment_userinfo_userinfo.xml b/app/src/main/res/layout/fragment_userinfo_userinfo.xml index 2cd2eb974..9698510ee 100644 --- a/app/src/main/res/layout/fragment_userinfo_userinfo.xml +++ b/app/src/main/res/layout/fragment_userinfo_userinfo.xml @@ -2,6 +2,7 @@ @@ -17,10 +18,10 @@ android:layout_marginTop="12dp" android:background="@color/white" android:orientation="vertical" - android:paddingLeft="@dimen/dp_15" - android:paddingTop="@dimen/dp_12" - android:paddingRight="@dimen/dp_15" - android:paddingBottom="@dimen/dp_12" + android:paddingLeft="@dimen/dp_13" + android:paddingTop="@dimen/dp_8" + android:paddingRight="@dimen/dp_13" + android:paddingBottom="@dimen/dp_16" app:layout_constraintTop_toTopOf="parent"> + android:textColor="#2B2D33" + android:textSize="@dimen/sp_15" + android:textStyle="bold" /> + android:layout_marginTop="@dimen/dp_8" /> - + android:orientation="horizontal" + android:paddingStart="13dp" + android:paddingTop="8dp" + android:paddingEnd="13dp" + android:paddingBottom="16dp"> + + + + + + + - - - - + + diff --git a/app/src/main/res/layout/gift_dialog_lock_item_basics.xml b/app/src/main/res/layout/gift_dialog_lock_item_basics.xml new file mode 100644 index 000000000..ce96e0a9e --- /dev/null +++ b/app/src/main/res/layout/gift_dialog_lock_item_basics.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gift_dialog_lock_item_child.xml b/app/src/main/res/layout/gift_dialog_lock_item_child.xml new file mode 100644 index 000000000..f631ee7c3 --- /dev/null +++ b/app/src/main/res/layout/gift_dialog_lock_item_child.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gift_dialog_unlock_panel.xml b/app/src/main/res/layout/gift_dialog_unlock_panel.xml new file mode 100644 index 000000000..1ac694504 --- /dev/null +++ b/app/src/main/res/layout/gift_dialog_unlock_panel.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_car_garage_normal.xml b/app/src/main/res/layout/item_car_garage_normal.xml index 9915ba4cf..34612e24d 100644 --- a/app/src/main/res/layout/item_car_garage_normal.xml +++ b/app/src/main/res/layout/item_car_garage_normal.xml @@ -1,8 +1,9 @@ + xmlns:tools="http://schemas.android.com/tools"> + @@ -11,18 +12,17 @@ + tools:background="@color/bg_normal_1c1b22"> + android:orientation="vertical" + android:padding="5dp"> + tools:src="@drawable/ic_mark_limit" /> + + - - - + android:maxLines="1" + android:textColor="#696D7A" + android:textSize="11sp" + tools:text="- 1567天 -" /> + + android:textColor="#2B2D33" + android:textSize="13sp" + android:visibility="gone" + tools:background="@drawable/bg_common_confirm" + tools:text="@string/label_can_use" + tools:visibility="visible" /> + android:layout_marginEnd="15dp" + android:background="@color/line_353548" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_my_chat_bubble.xml b/app/src/main/res/layout/item_my_chat_bubble.xml index 6b7fba273..a5256fa04 100644 --- a/app/src/main/res/layout/item_my_chat_bubble.xml +++ b/app/src/main/res/layout/item_my_chat_bubble.xml @@ -102,7 +102,7 @@ android:drawablePadding="1dp" android:gravity="center" android:maxLines="1" - android:textColor="@color/color_999999" + android:textColor="#696D7A" android:textSize="10sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/item_my_head_wear.xml b/app/src/main/res/layout/item_my_head_wear.xml index 5553f6dd2..e1c16ab91 100644 --- a/app/src/main/res/layout/item_my_head_wear.xml +++ b/app/src/main/res/layout/item_my_head_wear.xml @@ -39,59 +39,64 @@ - + android:layout_centerVertical="true" + android:layout_marginStart="13dp" + android:layout_toStartOf="@id/tv_used" + android:layout_toEndOf="@id/ll_head_img" + android:orientation="vertical"> + + + + + + - - - diff --git a/app/src/main/res/layout/item_my_user_card_wear.xml b/app/src/main/res/layout/item_my_user_card_wear.xml index c26da7326..78c9e0d1f 100644 --- a/app/src/main/res/layout/item_my_user_card_wear.xml +++ b/app/src/main/res/layout/item_my_user_card_wear.xml @@ -92,7 +92,7 @@ android:drawablePadding="1dp" android:gravity="center" android:maxLines="1" - android:textColor="@color/color_999999" + android:textColor="#696D7A" android:textSize="10sp" app:layout_constraintBaseline_toBaselineOf="@id/tv_name" app:layout_constraintStart_toEndOf="@id/tv_name" diff --git a/app/src/main/res/layout/layout_gift_indicator_item.xml b/app/src/main/res/layout/layout_gift_indicator_item.xml index dd4cadc25..441cd23dc 100644 --- a/app/src/main/res/layout/layout_gift_indicator_item.xml +++ b/app/src/main/res/layout/layout_gift_indicator_item.xml @@ -5,8 +5,8 @@ android:layout_height="26dp" android:gravity="center" android:orientation="horizontal" - android:paddingLeft="@dimen/dp_7" - android:paddingRight="@dimen/dp_7"> + android:paddingLeft="@dimen/dp_8" + android:paddingRight="@dimen/dp_8"> - diff --git a/app/src/main/res/layout/list_item_dialog_gift.xml b/app/src/main/res/layout/list_item_dialog_gift.xml index 52f0dbd90..2e016e519 100644 --- a/app/src/main/res/layout/list_item_dialog_gift.xml +++ b/app/src/main/res/layout/list_item_dialog_gift.xml @@ -15,38 +15,51 @@ + android:layout_width="match_parent" + android:layout_height="96dp" + android:layout_marginTop="3dp" + android:layout_marginBottom="3dp" + android:gravity="center" + tools:layout_width="88dp"> + + @@ -57,30 +70,33 @@ android:layout_height="wrap_content" android:layout_below="@id/gift_name" android:layout_centerHorizontal="true" + android:alpha="@{item.isLocked?0.5f:1f}" android:drawableStart="@{item.isSelect?item.radishDrawableSelected:item.radishDrawable}" android:drawablePadding="2dp" android:gravity="center" android:includeFontPadding="false" android:text="@{item.goldText}" - android:textColor="@{item.isPrivateChat? @color/text_secondary_878b9c : @color/white_transparent_60}" + android:textColor="@{item.isPrivateChat? @color/text_secondary_878b9c : @color/color_CED1DB}" android:textSize="@dimen/dp_10" tools:ignore="SpUsage" tools:text="123" - tools:textColor="@color/white_transparent_60"/> + tools:textColor="@color/white_transparent_60" /> + android:orientation="horizontal" + android:paddingEnd="2dp"> @@ -89,7 +105,7 @@ android:id="@+id/icon_gift_new" android:layout_width="@dimen/dp_14" android:layout_height="@dimen/dp_14" - android:layout_marginEnd="@dimen/dp_3" + android:layout_marginEnd="@dimen/dp_2" android:src="@drawable/icon_gift_new" android:visibility="@{item.isShowNew ? View.VISIBLE : View.GONE}" tools:visibility="visible" /> @@ -98,7 +114,7 @@ android:id="@+id/icon_gift_limit_time" android:layout_width="@dimen/dp_14" android:layout_height="@dimen/dp_14" - android:layout_marginEnd="@dimen/dp_3" + android:layout_marginEnd="@dimen/dp_2" android:src="@drawable/icon_gift_limit_time" android:visibility="@{item.isShowLimit ? View.VISIBLE : View.GONE}" tools:visibility="visible" /> @@ -107,7 +123,7 @@ android:id="@+id/icon_gift_effect" android:layout_width="@dimen/dp_14" android:layout_height="@dimen/dp_14" - android:layout_marginEnd="@dimen/dp_4" + android:layout_marginEnd="@dimen/dp_2" android:src="@drawable/icon_gift_effect" android:visibility="@{item.isShowEffect ? View.VISIBLE : View.GONE}" tools:visibility="visible" /> @@ -117,7 +133,7 @@ nomalUrl="@{item.vipIcon}" android:layout_width="wrap_content" android:layout_height="16dp" - android:layout_marginEnd="@dimen/dp_3" + android:layout_marginEnd="@dimen/dp_2" android:adjustViewBounds="true" android:visibility="@{TextUtils.isEmpty(item.vipIcon) ? View.GONE : View.VISIBLE}" tools:src="@drawable/icon_gift_effect" /> @@ -135,18 +151,17 @@ android:text="@{item.countText}" android:textColor="@{item.isPrivateChat? @color/text_secondary_878b9c : @color/white}" android:textSize="@dimen/sp_9" - android:visibility="@{item.isKnap ? View.VISIBLE : View.GONE}" /> - + android:visibility="@{item.isKnap ? View.VISIBLE : View.GONE}" + tools:text="x100" + tools:visibility="visible" /> diff --git a/app/src/main/res/layout/list_item_gift_wall_info.xml b/app/src/main/res/layout/list_item_gift_wall_info.xml index d1b263829..1c50dbff7 100644 --- a/app/src/main/res/layout/list_item_gift_wall_info.xml +++ b/app/src/main/res/layout/list_item_gift_wall_info.xml @@ -1,58 +1,82 @@ - + android:layout_marginHorizontal="2.5dp" + android:layout_marginVertical="4dp" + tools:layout_width="84dp"> + + + + + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/line_icon_top" + app:layout_constraintWidth_percent="0.654" + tools:src="@drawable/default_cover" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index aca977342..e4eb2d0fd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -629,5 +629,6 @@ #FFD46C #695CEB #FFFFF265 - + #FF5CEFFF + #7F8494 diff --git a/app/src/module_bank_card/res/layout/item_nameplate_normal.xml b/app/src/module_bank_card/res/layout/item_nameplate_normal.xml index 930b140ca..376ecfe0f 100644 --- a/app/src/module_bank_card/res/layout/item_nameplate_normal.xml +++ b/app/src/module_bank_card/res/layout/item_nameplate_normal.xml @@ -50,15 +50,15 @@ \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/nnbc123/core/UriProvider.java b/core/src/diff_src_erban/java/com/nnbc123/core/UriProvider.java index 6930ce68a..c03c841ee 100644 --- a/core/src/diff_src_erban/java/com/nnbc123/core/UriProvider.java +++ b/core/src/diff_src_erban/java/com/nnbc123/core/UriProvider.java @@ -528,4 +528,10 @@ public class UriProvider { return WEB_URL.concat("/yinmeng/modules/rule/privilegeCardRule.html"); } + /** + * 礼物等级 + */ + public static String getGiftLevelRuleUrl() { + return WEB_URL.concat("/yinmeng/modules/rule/giftWallRule.html"); + } } diff --git a/core/src/diff_src_erban/java/com/nnbc123/core/manager/IMNetEaseManager.java b/core/src/diff_src_erban/java/com/nnbc123/core/manager/IMNetEaseManager.java index 4b28938b5..4705d35dd 100644 --- a/core/src/diff_src_erban/java/com/nnbc123/core/manager/IMNetEaseManager.java +++ b/core/src/diff_src_erban/java/com/nnbc123/core/manager/IMNetEaseManager.java @@ -1443,6 +1443,14 @@ public final class IMNetEaseManager { .setEvent(RoomEvent.ROOM_HOUR_RANK)); } } + break; + case CUSTOM_MSG_GIFT: + if (customAttachment.getSecond() == CUSTOM_MSG_GIFT_UNLOCK) { + addMessages(msg); + } else if (customAttachment.getSecond() == CUSTOM_MSG_GIFT_DRESS) { + addMessages(msg); + } + break; default: break; } diff --git a/core/src/main/java/com/nnbc123/core/DemoCache.java b/core/src/main/java/com/nnbc123/core/DemoCache.java index f6f1217cb..523aad592 100644 --- a/core/src/main/java/com/nnbc123/core/DemoCache.java +++ b/core/src/main/java/com/nnbc123/core/DemoCache.java @@ -381,6 +381,14 @@ public class DemoCache { return SettingsPref.instance().getBoolean(KEY_NEW_GIFT_TYPE_TIP, true); } + public static void saveNewGiftTypeTip(int type,boolean value) { + SettingsPref.instance().putBoolean(KEY_NEW_GIFT_TYPE_TIP + "_" + type, value); + } + + public static boolean readNewGiftTypeTip(int type) { + return SettingsPref.instance().getBoolean(KEY_NEW_GIFT_TYPE_TIP + "_" + type, true); + } + public static void saveNewGiftTypeTipIndicator(boolean value) { SettingsPref.instance().putBoolean(KEY_NEW_GIFT_TYPE_TIP_INDICATOR, value); } diff --git a/core/src/main/java/com/nnbc123/core/decoration/car/bean/CarInfo.java b/core/src/main/java/com/nnbc123/core/decoration/car/bean/CarInfo.java index 520a2a334..84c5cccd1 100644 --- a/core/src/main/java/com/nnbc123/core/decoration/car/bean/CarInfo.java +++ b/core/src/main/java/com/nnbc123/core/decoration/car/bean/CarInfo.java @@ -35,6 +35,8 @@ public class CarInfo extends BaseDecoration implements Serializable { //public static final String EFFECT = "effect"; public static final String CAR_NAME = "carName"; public int expireDays; + private int expireHour; + private int expireMinute; public int limitType; /** * 该状态状态 @@ -105,6 +107,10 @@ public class CarInfo extends BaseDecoration implements Serializable { return valueMap; } + public String getExpireText() { + return expireDays + "天" + expireHour + "小时" + expireMinute + "分钟"; + } + @Override public int getRealPrice() { if (getRemainingDay() > 0 && getStatus() == CarInfo.STATUS_USER_CAN_USE) { diff --git a/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/ChatBubbleInfo.java b/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/ChatBubbleInfo.java index 1e5a7436d..e521f5c50 100644 --- a/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/ChatBubbleInfo.java +++ b/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/ChatBubbleInfo.java @@ -4,6 +4,8 @@ public class ChatBubbleInfo { private String bubbleId; private int comeFrom; private int expireDays; + private int expireHour; + private int expireMinute; private String expireTime; private boolean hasExpired; private String name; @@ -11,6 +13,10 @@ public class ChatBubbleInfo { private boolean hasUsed; private int labelType; + public String getExpireText() { + return expireDays + "天" + expireHour + "小时" + expireMinute + "分钟"; + } + @SuppressWarnings("all") public ChatBubbleInfo() { } diff --git a/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/HeadWearInfo.java b/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/HeadWearInfo.java index 7cfbb578a..2e29cef9c 100644 --- a/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/HeadWearInfo.java +++ b/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/HeadWearInfo.java @@ -41,6 +41,8 @@ public class HeadWearInfo extends BaseDecoration implements Serializable { private int seq; private int days; private int expireDays; + private int expireHour; + private int expireMinute; private int status; private int comeFrom; private boolean enable; @@ -60,6 +62,10 @@ public class HeadWearInfo extends BaseDecoration implements Serializable { return map; } + public String getExpireText() { + return expireDays + "天" + expireHour + "小时" + expireMinute + "分钟"; + } + /** * 实际购买价格 */ @@ -96,6 +102,22 @@ public class HeadWearInfo extends BaseDecoration implements Serializable { return status == HeadWearInfo.STATUS_IN_USED; } + public int getExpireHour() { + return expireHour; + } + + public void setExpireHour(int expireHour) { + this.expireHour = expireHour; + } + + public int getExpireMinute() { + return expireMinute; + } + + public void setExpireMinute(int expireMinute) { + this.expireMinute = expireMinute; + } + // /** * headwearId : 1 diff --git a/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/UserCardWearInfo.java b/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/UserCardWearInfo.java index 2ee052858..9f32966ed 100644 --- a/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/UserCardWearInfo.java +++ b/core/src/main/java/com/nnbc123/core/decoration/headwear/bean/UserCardWearInfo.java @@ -4,6 +4,8 @@ public class UserCardWearInfo { private String cardId; private int comeFrom; private int expireDays; + private int expireHour; + private int expireMinute; private String expireTime; private boolean hasExpired; private String name; @@ -11,6 +13,9 @@ public class UserCardWearInfo { private boolean used; private int labelType; + public String getExpireText() { + return expireDays + "天" + expireHour + "小时" + expireMinute + "分钟"; + } @SuppressWarnings("all") public UserCardWearInfo() { } diff --git a/core/src/main/java/com/nnbc123/core/decoration/nameplate/bean/NamePlateInfo.java b/core/src/main/java/com/nnbc123/core/decoration/nameplate/bean/NamePlateInfo.java index 47006d9b1..78b5c398d 100644 --- a/core/src/main/java/com/nnbc123/core/decoration/nameplate/bean/NamePlateInfo.java +++ b/core/src/main/java/com/nnbc123/core/decoration/nameplate/bean/NamePlateInfo.java @@ -57,8 +57,29 @@ public class NamePlateInfo { private String nameplateImage; private boolean isExpired; private int expireDays; + private int expireHour; + private int expireMinute; private boolean isUsing; private String word; + public String getExpireText() { + return expireDays + "天" + expireHour + "小时" + expireMinute + "分钟"; + } + + public int getExpireHour() { + return expireHour; + } + + public void setExpireHour(int expireHour) { + this.expireHour = expireHour; + } + + public int getExpireMinute() { + return expireMinute; + } + + public void setExpireMinute(int expireMinute) { + this.expireMinute = expireMinute; + } public String getWord() { return word; diff --git a/core/src/main/java/com/nnbc123/core/gift/GiftModel.java b/core/src/main/java/com/nnbc123/core/gift/GiftModel.java index 7e80679ed..cc5d32c4b 100644 --- a/core/src/main/java/com/nnbc123/core/gift/GiftModel.java +++ b/core/src/main/java/com/nnbc123/core/gift/GiftModel.java @@ -236,6 +236,10 @@ public class GiftModel extends BaseModel implements IGiftModel { case GiftType.GIFT_TYPE_PENALTY: giftInfos = allGiftListInfo.getPenaltyGift(); break; + case GiftType.GIFT_TYPE_INTEREST: + case GiftType.GIFT_TYPE_UNLOCK: + giftInfos = allGiftListInfo.getInterestGift(); + break; } return giftInfos == null ? new ArrayList<>() : giftInfos; } @@ -616,6 +620,9 @@ public class GiftModel extends BaseModel implements IGiftModel { if (giftInfo == null) { giftInfo = findGiftInfoById(allGiftListInfo.getPenaltyGift(), giftId); } + if (giftInfo == null) { + giftInfo = findGiftInfoById(allGiftListInfo.getInterestGift(), giftId); + } } return giftInfo; } @@ -686,7 +693,7 @@ public class GiftModel extends BaseModel implements IGiftModel { * * @return - */ - @GET("/gift/listV4") + @GET("/gift/listV5") Single> requestGiftInfos(@Query("roomUid") String roomUid); /** diff --git a/core/src/main/java/com/nnbc123/core/gift/bean/GiftInfo.java b/core/src/main/java/com/nnbc123/core/gift/bean/GiftInfo.java index a0f17768d..29682208b 100644 --- a/core/src/main/java/com/nnbc123/core/gift/bean/GiftInfo.java +++ b/core/src/main/java/com/nnbc123/core/gift/bean/GiftInfo.java @@ -2,6 +2,7 @@ package com.nnbc123.core.gift.bean; import com.google.gson.annotations.SerializedName; import java.io.Serializable; +import java.util.List; /** * Created by @@ -73,6 +74,84 @@ public class GiftInfo implements Serializable { private SimpleUserInfo firstLevelRankUser; private SimpleUserInfo firstCharmRankUser; private boolean drawGift; + private boolean unlocked; + private GiftInfo baseGift; + private List unlockGiftList; + private String giftTag; + private String bannerUrl; + private String bannerSkipUrl; + + public String getBannerUrl() { + return bannerUrl; + } + + public void setBannerUrl(String bannerUrl) { + this.bannerUrl = bannerUrl; + } + + public GiftInfo getBaseGift() { + return baseGift; + } + + public void setBaseGift(GiftInfo baseGift) { + this.baseGift = baseGift; + } + + public List getUnlockGiftList() { + return unlockGiftList; + } + + public void setUnlockGiftList(List unlockGiftList) { + this.unlockGiftList = unlockGiftList; + } + + public String getGiftTag() { + return giftTag; + } + + public void setGiftTag(String giftTag) { + this.giftTag = giftTag; + } + + public boolean isUnlocked() { + return unlocked; + } + + public void setUnlocked(boolean unlocked) { + this.unlocked = unlocked; + } + + /** + * 更新解锁进度 + */ + public void updateUnlockProgress(int addNumber) { + List childGiftList = getUnlockGiftList(); + if (childGiftList == null) { + return; + } + for (int j = 0; j < childGiftList.size(); j++) { + UnLockGiftInfo childItem = childGiftList.get(j); + if (childItem == null) { + continue; + } + childItem.addProgress(addNumber); + GiftInfo childGiftInfo = childItem.getTargetGift(); + if (childGiftInfo != null && childGiftInfo.getGiftId() == getGiftId()) { + Boolean unlocked = childItem.getUnlocked(); + if (unlocked != null) { + this.setUnlocked(unlocked); + } + } + } + } + + public String getBannerSkipUrl() { + return bannerSkipUrl; + } + + public void setBannerSkipUrl(String bannerSkipUrl) { + this.bannerSkipUrl = bannerSkipUrl; + } // @SuppressWarnings("all") @@ -463,6 +542,7 @@ public class GiftInfo implements Serializable { if (this.isRoomExclude() != other.isRoomExclude()) return false; if (this.getOtherViewType() != other.getOtherViewType()) return false; if (this.isDrawGift() != other.isDrawGift()) return false; + if (this.isUnlocked() != other.isUnlocked()) return false; final Object this$giftName = this.getGiftName(); final Object other$giftName = other.getGiftName(); if (this$giftName == null ? other$giftName != null : !this$giftName.equals(other$giftName)) return false; @@ -499,6 +579,21 @@ public class GiftInfo implements Serializable { final Object this$firstCharmRankUser = this.getFirstCharmRankUser(); final Object other$firstCharmRankUser = other.getFirstCharmRankUser(); if (this$firstCharmRankUser == null ? other$firstCharmRankUser != null : !this$firstCharmRankUser.equals(other$firstCharmRankUser)) return false; + final Object this$baseGift = this.getBaseGift(); + final Object other$baseGift = other.getBaseGift(); + if (this$baseGift == null ? other$baseGift != null : !this$baseGift.equals(other$baseGift)) return false; + final Object this$unlockGiftList = this.getUnlockGiftList(); + final Object other$unlockGiftList = other.getUnlockGiftList(); + if (this$unlockGiftList == null ? other$unlockGiftList != null : !this$unlockGiftList.equals(other$unlockGiftList)) return false; + final Object this$giftTag = this.getGiftTag(); + final Object other$giftTag = other.getGiftTag(); + if (this$giftTag == null ? other$giftTag != null : !this$giftTag.equals(other$giftTag)) return false; + final Object this$bannerUrl = this.getBannerUrl(); + final Object other$bannerUrl = other.getBannerUrl(); + if (this$bannerUrl == null ? other$bannerUrl != null : !this$bannerUrl.equals(other$bannerUrl)) return false; + final Object this$bannerSkipUrl = this.getBannerSkipUrl(); + final Object other$bannerSkipUrl = other.getBannerSkipUrl(); + if (this$bannerSkipUrl == null ? other$bannerSkipUrl != null : !this$bannerSkipUrl.equals(other$bannerSkipUrl)) return false; return true; } @@ -531,6 +626,7 @@ public class GiftInfo implements Serializable { result = result * PRIME + (this.isRoomExclude() ? 79 : 97); result = result * PRIME + this.getOtherViewType(); result = result * PRIME + (this.isDrawGift() ? 79 : 97); + result = result * PRIME + (this.isUnlocked() ? 79 : 97); final Object $giftName = this.getGiftName(); result = result * PRIME + ($giftName == null ? 43 : $giftName.hashCode()); final Object $giftUrl = this.getGiftUrl(); @@ -555,6 +651,16 @@ public class GiftInfo implements Serializable { result = result * PRIME + ($firstLevelRankUser == null ? 43 : $firstLevelRankUser.hashCode()); final Object $firstCharmRankUser = this.getFirstCharmRankUser(); result = result * PRIME + ($firstCharmRankUser == null ? 43 : $firstCharmRankUser.hashCode()); + final Object $baseGift = this.getBaseGift(); + result = result * PRIME + ($baseGift == null ? 43 : $baseGift.hashCode()); + final Object $unlockGiftList = this.getUnlockGiftList(); + result = result * PRIME + ($unlockGiftList == null ? 43 : $unlockGiftList.hashCode()); + final Object $giftTag = this.getGiftTag(); + result = result * PRIME + ($giftTag == null ? 43 : $giftTag.hashCode()); + final Object $bannerUrl = this.getBannerUrl(); + result = result * PRIME + ($bannerUrl == null ? 43 : $bannerUrl.hashCode()); + final Object $bannerSkipUrl = this.getBannerSkipUrl(); + result = result * PRIME + ($bannerSkipUrl == null ? 43 : $bannerSkipUrl.hashCode()); return result; } diff --git a/core/src/main/java/com/nnbc123/core/gift/bean/GiftListInfo.java b/core/src/main/java/com/nnbc123/core/gift/bean/GiftListInfo.java index 9d5d0ea34..fd61b891e 100644 --- a/core/src/main/java/com/nnbc123/core/gift/bean/GiftListInfo.java +++ b/core/src/main/java/com/nnbc123/core/gift/bean/GiftListInfo.java @@ -16,6 +16,7 @@ public class GiftListInfo implements Serializable { private List drawGift; private List singlePopularGift; private List penaltyGift; + private List interestGift; private String giftVersion; // @@ -113,6 +114,14 @@ public class GiftListInfo implements Serializable { this.giftVersion = giftVersion; } + public List getInterestGift() { + return interestGift; + } + + public void setInterestGift(List interestGift) { + this.interestGift = interestGift; + } + @Override @SuppressWarnings("all") public boolean equals(final Object o) { @@ -144,6 +153,9 @@ public class GiftListInfo implements Serializable { final Object this$penaltyGift = this.getPenaltyGift(); final Object other$penaltyGift = other.getPenaltyGift(); if (this$penaltyGift == null ? other$penaltyGift != null : !this$penaltyGift.equals(other$penaltyGift)) return false; + final Object this$interestGift = this.getInterestGift(); + final Object other$interestGift = other.getInterestGift(); + if (this$interestGift == null ? other$interestGift != null : !this$interestGift.equals(other$interestGift)) return false; final Object this$giftVersion = this.getGiftVersion(); final Object other$giftVersion = other.getGiftVersion(); if (this$giftVersion == null ? other$giftVersion != null : !this$giftVersion.equals(other$giftVersion)) return false; @@ -176,6 +188,8 @@ public class GiftListInfo implements Serializable { result = result * PRIME + ($singlePopularGift == null ? 43 : $singlePopularGift.hashCode()); final Object $penaltyGift = this.getPenaltyGift(); result = result * PRIME + ($penaltyGift == null ? 43 : $penaltyGift.hashCode()); + final Object $interestGift = this.getInterestGift(); + result = result * PRIME + ($interestGift == null ? 43 : $interestGift.hashCode()); final Object $giftVersion = this.getGiftVersion(); result = result * PRIME + ($giftVersion == null ? 43 : $giftVersion.hashCode()); return result; diff --git a/core/src/main/java/com/nnbc123/core/gift/bean/GiftTab.java b/core/src/main/java/com/nnbc123/core/gift/bean/GiftTab.java index cf2c53df5..b8f5ffec5 100644 --- a/core/src/main/java/com/nnbc123/core/gift/bean/GiftTab.java +++ b/core/src/main/java/com/nnbc123/core/gift/bean/GiftTab.java @@ -13,10 +13,19 @@ public class GiftTab { this.selectedTitle = selectedTitle; } + public GiftTab(int type, String unSelectedTitle, String selectedTitle, boolean needNewTips) { + this.type = type; + this.unSelectedTitle = unSelectedTitle; + this.selectedTitle = selectedTitle; + this.needNewTips = needNewTips; + } + private int type; private String selectedTitle; private String unSelectedTitle; private View itemView; + // 是否需要提示:“new” + private boolean needNewTips; // @SuppressWarnings("all") @@ -59,6 +68,14 @@ public class GiftTab { this.itemView = itemView; } + public boolean isNeedNewTips() { + return needNewTips; + } + + public void setNeedNewTips(boolean needNewTips) { + this.needNewTips = needNewTips; + } + @Override @SuppressWarnings("all") public boolean equals(final Object o) { diff --git a/core/src/main/java/com/nnbc123/core/gift/bean/GiftType.java b/core/src/main/java/com/nnbc123/core/gift/bean/GiftType.java index f45337d1f..58d96b488 100644 --- a/core/src/main/java/com/nnbc123/core/gift/bean/GiftType.java +++ b/core/src/main/java/com/nnbc123/core/gift/bean/GiftType.java @@ -42,4 +42,18 @@ public class GiftType { public static final int GIFT_TYPE_SINGLE_ROOM = 11; public static final int GIFT_TYPE_PENALTY = 12; + + /** + * 礼物类型 -- 解锁礼物 + */ + public static final int GIFT_TYPE_UNLOCK = 16; + + /** + * 礼物类型 -- 装扮礼物 + */ + public static final int GIFT_TYPE_DRESS_UP = 17; + + // 趣味礼物(本地自定义维护的) + @Deprecated() + public static final int GIFT_TYPE_INTEREST = 1000; } diff --git a/core/src/main/java/com/nnbc123/core/gift/bean/UnLockBaseGiftInfo.kt b/core/src/main/java/com/nnbc123/core/gift/bean/UnLockBaseGiftInfo.kt new file mode 100644 index 000000000..5dd9a0891 --- /dev/null +++ b/core/src/main/java/com/nnbc123/core/gift/bean/UnLockBaseGiftInfo.kt @@ -0,0 +1,15 @@ +package com.nnbc123.core.gift.bean + +/** + * Created by Max on 2024/1/26 17:09 + * Desc: + **/ +data class UnLockBaseGiftInfo(val giftInfo: GiftInfo) : UnlockItem { + override fun getGiftData(): GiftInfo? { + return giftInfo + } + + override fun getItemType(): Int { + return UnlockItem.ITEM_TYPE_BASE + } +} \ No newline at end of file diff --git a/core/src/main/java/com/nnbc123/core/gift/bean/UnLockGiftInfo.kt b/core/src/main/java/com/nnbc123/core/gift/bean/UnLockGiftInfo.kt new file mode 100644 index 000000000..26e936bdc --- /dev/null +++ b/core/src/main/java/com/nnbc123/core/gift/bean/UnLockGiftInfo.kt @@ -0,0 +1,31 @@ +package com.nnbc123.core.gift.bean + + +/** + * Created by Max on 2024/1/26 15:36 + * Desc:可解锁礼物 + **/ +data class UnLockGiftInfo( + val targetGift: GiftInfo? = null, + val condition: Int? = null, + var process: Int? = null, + var unlocked: Boolean? = null +) : UnlockItem { + override fun getGiftData(): GiftInfo? { + return targetGift + } + + override fun getItemType(): Int { + return UnlockItem.ITEM_TYPE_CHILD + } + + // 加进度(发送基础礼物成功后:数量累加) + fun addProgress(count: Int) { + val p = process ?: 0 + process = p + count + if ((process ?: 0) >= (condition ?: 0)) { + unlocked = true + } + } + +} \ No newline at end of file diff --git a/core/src/main/java/com/nnbc123/core/gift/bean/UnlockItem.kt b/core/src/main/java/com/nnbc123/core/gift/bean/UnlockItem.kt new file mode 100644 index 000000000..9480a5459 --- /dev/null +++ b/core/src/main/java/com/nnbc123/core/gift/bean/UnlockItem.kt @@ -0,0 +1,16 @@ +package com.nnbc123.core.gift.bean + +import com.chad.library.adapter.base.entity.MultiItemEntity + +/** + * Created by Max on 2024/1/26 17:06 + * Desc: + **/ +interface UnlockItem : MultiItemEntity { + companion object { + const val ITEM_TYPE_BASE = 0 + const val ITEM_TYPE_CHILD = 1 + } + + fun getGiftData(): GiftInfo? +} \ No newline at end of file diff --git a/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachParser.java b/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachParser.java index dc1084bfd..385519c0e 100644 --- a/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachParser.java +++ b/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachParser.java @@ -19,6 +19,7 @@ import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_ import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_LEVEL_UP_NOTICE; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GAME_INVITE; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GAME_INVITE_SECOND; +import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GIFT; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_MEMBER_COUNT; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_ROOM_NOTIFY; import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_TOPIC; @@ -622,6 +623,13 @@ public class CustomAttachParser implements MsgAttachmentParser { attachment = new GameInviteAttachment(first, second); } break; + case CUSTOM_MSG_GIFT: + if (second == CustomAttachment.CUSTOM_MSG_GIFT_UNLOCK) { + attachment = new UnLockGiftAttachment(first, second); + } else if (second == CustomAttachment.CUSTOM_MSG_GIFT_DRESS) { + attachment = new DressUpGiftAttachment(first, second); + } + break; default: LogUtils.e("未定义的first,请现在CustomAttachParser中解析first=" + first + " second=" + second); break; diff --git a/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachment.java b/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachment.java index 6e1808491..1d3ad30b5 100644 --- a/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachment.java +++ b/core/src/main/java/com/nnbc123/core/im/custom/bean/CustomAttachment.java @@ -437,6 +437,10 @@ public class CustomAttachment implements MsgAttachment { public static final int CUSTOM_MSG_HOUR_RANK = 97; // 小时榜 public static final int CUSTOM_MSG_HOUR_RANK_UPDATE = 971; // 小时榜更新 + public static final int CUSTOM_MSG_GIFT = 98; // 礼物相关 + public static final int CUSTOM_MSG_GIFT_UNLOCK = 981; // 解锁了礼物 + public static final int CUSTOM_MSG_GIFT_DRESS = 982; // 获得装扮礼物 + public static final int CUSTOM_MSG_PRIVILEGE = 102; //特权卡 public static final int CUSTOM_MSG_PRIVILEGE_SECOND = 1020;//特权卡(图片、gif) public static final int CUSTOM_MSG_PRIVILEGE_SECOND_VIDEO = 1021;//特权卡(视频类型) diff --git a/core/src/main/java/com/nnbc123/core/im/custom/bean/DressUpGiftAttachment.kt b/core/src/main/java/com/nnbc123/core/im/custom/bean/DressUpGiftAttachment.kt new file mode 100644 index 000000000..fbfe8ad5b --- /dev/null +++ b/core/src/main/java/com/nnbc123/core/im/custom/bean/DressUpGiftAttachment.kt @@ -0,0 +1,49 @@ +package com.nnbc123.core.im.custom.bean + +import com.alibaba.fastjson.JSONObject + +/** + * Created by Max on 2024/1/29 15:54 + * Desc: + **/ +class DressUpGiftAttachment : CustomAttachment { + + var uid: Long? = null + var nick: String? = null + var dressId: Long? = null + var dressName: String? = null + var dressUrl: String? = null + + constructor() : super() + constructor(first: Int, second: Int) : super(first, second) + + fun getDressNameNotNull(): String { + return dressName ?: "" + } + + fun getDressUrlNotNull(): String { + return dressName ?: "" + } + + override fun parseData(data: JSONObject?) { + super.parseData(data) + if (data == null) { + return + } + if (data.containsKey("uid")) { + this.uid = data.getLong("uid") + } + if (data.containsKey("nick")) { + this.nick = data.getString("nick") + } + if (data.containsKey("dressId")) { + this.dressId = data.getLong("dressId") + } + if (data.containsKey("dressName")) { + this.dressName = data.getString("dressName") + } + if (data.containsKey("dressUrl")) { + this.dressUrl = data.getString("dressUrl") + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/nnbc123/core/im/custom/bean/UnLockGiftAttachment.kt b/core/src/main/java/com/nnbc123/core/im/custom/bean/UnLockGiftAttachment.kt new file mode 100644 index 000000000..93f682e76 --- /dev/null +++ b/core/src/main/java/com/nnbc123/core/im/custom/bean/UnLockGiftAttachment.kt @@ -0,0 +1,50 @@ +package com.nnbc123.core.im.custom.bean + +import com.alibaba.fastjson.JSONObject + +/** + * Created by Max on 2024/1/29 15:54 + * Desc: + **/ +class UnLockGiftAttachment : CustomAttachment{ + + var uid: Long? = null + var nick: String? = null + var giftId: Long? = null + var giftName: String? = null + var giftUrl: String? = null + + constructor() : super() + constructor(first: Int, second: Int) : super(first, second) + + + fun getGiftNameNotNull(): String { + return giftName ?: "" + } + + fun getGiftUrlNotNull(): String { + return giftUrl ?: "" + } + + override fun parseData(data: JSONObject?) { + super.parseData(data) + if (data == null) { + return + } + if (data.containsKey("uid")) { + this.uid = data.getLong("uid") + } + if (data.containsKey("nick")) { + this.nick = data.getString("nick") + } + if (data.containsKey("giftId")) { + this.giftId = data.getLong("giftId") + } + if (data.containsKey("giftName")) { + this.giftName = data.getString("giftName") + } + if (data.containsKey("giftUrl")) { + this.giftUrl = data.getString("giftUrl") + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/nnbc123/core/user/bean/GiftWallInfo.java b/core/src/main/java/com/nnbc123/core/user/bean/GiftWallInfo.java index b79ad670b..f35c39294 100644 --- a/core/src/main/java/com/nnbc123/core/user/bean/GiftWallInfo.java +++ b/core/src/main/java/com/nnbc123/core/user/bean/GiftWallInfo.java @@ -13,6 +13,15 @@ public class GiftWallInfo implements Serializable { private String giftName; private String picUrl; private int giftPrice; + private int giftLevel; + + public int getGiftLevel() { + return giftLevel; + } + + public void setGiftLevel(int giftLevel) { + this.giftLevel = giftLevel; + } public long getUid() { return uid; diff --git a/library/src/main/java/com/nnbc123/library/utils/ResUtil.java b/library/src/main/java/com/nnbc123/library/utils/ResUtil.java index 95ad3bf2d..c65ea0ca4 100644 --- a/library/src/main/java/com/nnbc123/library/utils/ResUtil.java +++ b/library/src/main/java/com/nnbc123/library/utils/ResUtil.java @@ -2,7 +2,9 @@ package com.nnbc123.library.utils; import android.app.Application; +import androidx.annotation.ColorRes; import androidx.annotation.StringRes; +import androidx.core.content.ContextCompat; public class ResUtil { @@ -15,4 +17,9 @@ public class ResUtil { public static String getString(@StringRes int resId) { return context.getString(resId); } + + public static int getColor(@ColorRes int resId) { + return ContextCompat.getColor(context, resId); + } + }