diff --git a/app/build.gradle b/app/build.gradle index 9d127ac48..1abf412b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,8 +150,8 @@ android { debug { buildConfigField "String", "BASE_URL", "\"http://api.uat.lecheng163.com/\"" buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL" - buildConfigField "String", "BASE_URL_STAGING", "\"https://yinyou.api.shengxuanwangluo.com/\"" - buildConfigField "String", "BASE_URL_RELEASE", "\"https://yinyou.api.shengxuanwangluo.com/\"" + buildConfigField "String", "BASE_URL_STAGING", "BASE_URL" + buildConfigField "String", "BASE_URL_RELEASE", "BASE_URL" minifyEnabled false shrinkResources false signingConfig signingConfigs.v1 diff --git a/app/src/main/assets/svga/wish_list.svga b/app/src/main/assets/svga/wish_list.svga new file mode 100644 index 000000000..6cf263abf Binary files /dev/null and b/app/src/main/assets/svga/wish_list.svga differ diff --git a/app/src/main/java/com/mango/moshen/avroom/fragment/BaseRoomFragment.kt b/app/src/main/java/com/mango/moshen/avroom/fragment/BaseRoomFragment.kt index 09f535813..8c8c6b30e 100644 --- a/app/src/main/java/com/mango/moshen/avroom/fragment/BaseRoomFragment.kt +++ b/app/src/main/java/com/mango/moshen/avroom/fragment/BaseRoomFragment.kt @@ -136,6 +136,8 @@ import io.reactivex.disposables.Disposable import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode +import kotlin.math.max +import kotlin.math.min /** @@ -299,8 +301,7 @@ open class BaseRoomFragment?> : StatisticManager.Instance() .onEvent(StatisticsProtocol.EVENT_ROOM_POP_SHOW, "房间pop曝光", mapOf("name" to "航海冒险")) } - - + initWishListPager() } @CallSuper @@ -512,14 +513,15 @@ open class BaseRoomFragment?> : } } - private fun initVipPager() { + private fun initWishListPager() { pagerViewWishList?.let { pagerViewWishList -> val adapter = object : StaticPagerAdapter() { var wishGiftList: List? = null - set(value) { - pagerViewWishList.isVisible = !value.isNullOrEmpty() - field = value - } + set(value) { + pagerViewWishList.isVisible = !value.isNullOrEmpty() + field = value + } + override fun getCount(): Int { return wishGiftList?.size ?: 0 } @@ -531,11 +533,16 @@ open class BaseRoomFragment?> : wishGiftList?.getOrNull(position)?.let { rootView.findViewById(R.id.iv_gift).load(it.giftUrl) rootView.findViewById(R.id.tv_gift_name).text = it.giftName - val isComplete = it.actualNum == it.targetNum + val isComplete = it.actualNum >= it.targetNum rootView.findViewById(R.id.tv_progress).text = SpannableBuilder() .append( - "${it.actualNum}", + "${ + min( + it.actualNum, + it.targetNum + ) + }${if (it.actualNum > it.targetNum) "+" else ""}", ForegroundColorSpan(("#FFC300".toColorInt())) ) .append( @@ -575,7 +582,6 @@ open class BaseRoomFragment?> : open fun updateView() { // 更新底栏 showBottomViewForDifRole() - initVipPager() } /** diff --git a/app/src/main/java/com/mango/moshen/avroom/presenter/AvRoomPresenter.java b/app/src/main/java/com/mango/moshen/avroom/presenter/AvRoomPresenter.java index 95df6f39c..97e43acce 100644 --- a/app/src/main/java/com/mango/moshen/avroom/presenter/AvRoomPresenter.java +++ b/app/src/main/java/com/mango/moshen/avroom/presenter/AvRoomPresenter.java @@ -128,10 +128,10 @@ public class AvRoomPresenter extends BaseMvpPresenter { .map(this::dealMicMemberFromIMNet) .flatMap(this::dealMicChatRoomMemberFromIMNet) .compose(bindUntilEvent(PresenterEvent.DESTROY)) + .doOnNext(roomQueueInfoSparseArray -> AudioEngineManager.get().startRtcEngine(AuthModel.get().getCurrentUid(), roomInfo.getAudioSdkType())) .observeOn(AndroidSchedulers.mainThread()) .subscribe(roomQueueInfoSparseArray -> { long uid = AuthModel.get().getCurrentUid(); - AudioEngineManager.get().startRtcEngine(uid, roomInfo.getAudioSdkType()); if (getMvpView() != null) { getMvpView().enterRoomSuccess(); } diff --git a/app/src/main/java/com/mango/moshen/avroom/widget/MessageView.java b/app/src/main/java/com/mango/moshen/avroom/widget/MessageView.java index 2385ca605..de31adfd8 100644 --- a/app/src/main/java/com/mango/moshen/avroom/widget/MessageView.java +++ b/app/src/main/java/com/mango/moshen/avroom/widget/MessageView.java @@ -5,6 +5,7 @@ import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_RED_PACK import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_BOX_ME; import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_FANS_TEAM_JOIN; import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_GIFT_COMPOUND; +import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_WISH_LIST; import static com.mango.core.redpackage.RedPackageTypeKt.ALL_DIAMOND; import static com.mango.core.redpackage.RedPackageTypeKt.ALL_GIFT; import static com.mango.core.redpackage.RedPackageTypeKt.ROOM_DIAMOND; @@ -40,6 +41,8 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; +import com.mango.core.im.custom.bean.WishListAttachment; +import com.mango.core.room.wishlist.WishListModel; import com.netease.nim.uikit.business.uinfo.UserInfoHelper; import com.netease.nim.uikit.common.ui.span.RadiusBackgroundSpan; import com.netease.nim.uikit.common.util.log.LogUtil; @@ -972,6 +975,10 @@ public class MessageView extends FrameLayout { setLuckyGiftServerNotifyMsg(chatRoomMessage, tvContent); } else if (first == CUSTOM_MSG_GIFT_COMPOUND) { setGiftCompoundMsg(chatRoomMessage, tvContent); + } else if (first == CUSTOM_MSG_WISH_LIST) { + if (second == CustomAttachment.CUSTOM_MSG_WISH_LIST_FINISH) { + setWishListComplete(chatRoomMessage, tvContent); + } } else { tvContent.setTextColor(Color.WHITE); tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip)); @@ -1385,12 +1392,29 @@ public class MessageView extends FrameLayout { tvContent.setBackground(null); tvContent.setTextColor(Color.WHITE); tvContent.setPadding(0, 0, 0, 0); - RoomFollowOwnerAttachment2 roomFollowOwnerAttachment = (RoomFollowOwnerAttachment2) chatRoomMessage.getAttachment(); SpannableBuilder append = new SpannableBuilder(tvContent) .append(mContext.getResources().getDrawable(R.drawable.bg_follow), ScreenUtil.dip2px(228), ScreenUtil.dip2px(34)); tvContent.setText(append.build()); } + /** + * 心愿单完成消息 + * + * @param chatRoomMessage + * @param tvContent + */ + private void setWishListComplete(ChatRoomMessage chatRoomMessage, TextView tvContent) { + if (!(chatRoomMessage.getAttachment() instanceof WishListAttachment)) { + return; + } + tvContent.setBackground(null); + tvContent.setTextColor(Color.WHITE); + tvContent.setPadding(0, 0, 0, 0); + SpannableBuilder append = new SpannableBuilder(tvContent) + .append(mContext.getResources().getDrawable(R.drawable.bg_wish_complete_msg), ScreenUtil.dip2px(171), ScreenUtil.dip2px(35)); + tvContent.setText(append.build()); + } + private void invitePK(RoomPkAttachment attachment, TextView tvContent) { Map micMemberMap = attachment.getRoomPKInvitedUpMicMemberMap(); @@ -2839,6 +2863,10 @@ public class MessageView extends FrameLayout { if (attachment instanceof TarotAttachment) { account = ((TarotAttachment) attachment).getTarotMsgBean().getUid() + ""; } + } else if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_WISH_LIST) { + if (attachment.getSecond() == CustomAttachment.CUSTOM_MSG_WISH_LIST_FINISH) { + WishListModel.INSTANCE.sendWishListCelebrate().subscribe(); + } } } if (TextUtils.isEmpty(account)) return; diff --git a/app/src/main/java/com/mango/moshen/avroom/widget/RoomEffectView.kt b/app/src/main/java/com/mango/moshen/avroom/widget/RoomEffectView.kt index a66ed609a..470d9b689 100644 --- a/app/src/main/java/com/mango/moshen/avroom/widget/RoomEffectView.kt +++ b/app/src/main/java/com/mango/moshen/avroom/widget/RoomEffectView.kt @@ -19,6 +19,9 @@ import android.view.animation.AnimationUtils import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView +import androidx.core.view.isVisible +import androidx.core.view.marginTop +import androidx.core.view.updateLayoutParams import com.coorchice.library.SuperTextView import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage @@ -197,6 +200,22 @@ class RoomEffectView @JvmOverloads constructor( false ) } + RoomEvent.WISH_LIST_EFFECT -> { + if (!binding.svgaWishList.isAnimating) { + binding.svgaWishList.isVisible = true + binding.svgaWishList.updateLayoutParams { + leftMargin = + (Math.random() * (ScreenUtil.screenWidth - ScreenUtil.dip2px( + 100f + ))).toInt() + topMargin = + (Math.random() * ScreenUtil.dip2px(200f) + ScreenUtil.dip2px( + 200f + )).toInt() + } + binding.svgaWishList.startAnimation() + } + } else -> {} } } diff --git a/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelDialog.kt b/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelDialog.kt index c6acc5fff..da6dd0e29 100644 --- a/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelDialog.kt +++ b/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelDialog.kt @@ -78,7 +78,7 @@ class WishListPanelDialog : BaseDialog() { if (it.isSuccess && !it.data.isNullOrEmpty()) { it.data?.let { gifts -> binding.tvTitle.text = - "今日心愿礼物(${gifts.filter { info -> info.actualNum == info.targetNum }.size}/${gifts.size})" + "今日心愿礼物(${gifts.filter { info -> info.actualNum >= info.targetNum }.size}/${gifts.size})" } } else { binding.tvTitle.text = "今日心愿礼物" diff --git a/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelGiftAdapter.kt b/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelGiftAdapter.kt index d438a60ff..95e48a124 100644 --- a/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelGiftAdapter.kt +++ b/app/src/main/java/com/mango/moshen/avroom/wishlist/WishListPanelGiftAdapter.kt @@ -11,6 +11,7 @@ import com.mango.core.room.wishlist.WishItemInfo import com.mango.moshen.R import com.mango.moshen.ui.utils.load import com.mango.moshen.utils.SpannableBuilder +import kotlin.math.min class WishListPanelGiftAdapter : @@ -27,12 +28,17 @@ class WishListPanelGiftAdapter : progressBar.max = item.targetNum progressBar.progress = item.actualNum - val isComplete = item.actualNum == item.targetNum + val isComplete = item.actualNum >= item.targetNum helper.setGone(R.id.iv_complete, isComplete) helper.getView(R.id.tv_progress).text = SpannableBuilder() .append( - "${item.actualNum}", + "${ + min( + item.actualNum, + item.targetNum + ) + }${if (item.actualNum > item.targetNum) "+" else ""}", ForegroundColorSpan((if (isComplete) "#E991B8" else "#FFA0C3").toColorInt()) ) .append( diff --git a/app/src/main/res/drawable-xhdpi/bg_wish_complete_msg.png b/app/src/main/res/drawable-xhdpi/bg_wish_complete_msg.png new file mode 100644 index 000000000..e4d0b4c96 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bg_wish_complete_msg.png differ diff --git a/app/src/main/res/layout/layout_room_effect.xml b/app/src/main/res/layout/layout_room_effect.xml index ffa86510d..194524b66 100644 --- a/app/src/main/res/layout/layout_room_effect.xml +++ b/app/src/main/res/layout/layout_room_effect.xml @@ -38,6 +38,17 @@ android:visibility="gone" app:autoPlay="true" /> + + = + api.sendWishListCelebrate(AvRoomDataManager.get().roomUid.toString()) + .io2main() + .handleStringData() + private interface Api { @@ -155,6 +161,14 @@ object WishListModel : BaseModel() { @GET("/wishGift/listWishGiftHistory") suspend fun getWisHistoryList(@Query("roomUid") roomUid: String): ServiceResult> + /** + * 获取房间心愿礼物列表 + * + * @return + */ + @GET("/wishGift/sendCelebrate") + fun sendWishListCelebrate(@Query("roomUid") roomUid: String): Single> + } } \ No newline at end of file