diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 486ccfaa7..8781a882c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -969,6 +969,14 @@ android:exported="false" android:screenOrientation="portrait" /> + + + + diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java index 79ba72bfc..6378581e3 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java @@ -93,6 +93,7 @@ import com.yizhuan.xchat_android_core.gift.bean.LuckyBagNoticeInfo; import com.yizhuan.xchat_android_core.im.custom.bean.RoomPKAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.RoomPkBean; import com.yizhuan.xchat_android_core.im.custom.bean.RoomReceivedLuckyGiftAttachment; +import com.yizhuan.xchat_android_core.initial.InitialModel; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.manager.RoomEvent; @@ -418,6 +419,7 @@ public class AVRoomActivity extends BaseMvpActivity() .setPageSize(pageSize) - .setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.avroom_anotherroompk_roompksearchactivity_01))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.avroom_anotherroompk_roompksearchactivity_01))) .setLayoutManager(LinearLayoutManager(this)) .setRecyclerView(binding.recyclerView) .setAdapter(roomPKSearchAdapter) diff --git a/app/src/main/java/com/yizhuan/erban/avroom/presenter/HomePartyPresenter.java b/app/src/main/java/com/yizhuan/erban/avroom/presenter/HomePartyPresenter.java index 45db6856a..3a728c977 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/presenter/HomePartyPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/presenter/HomePartyPresenter.java @@ -55,12 +55,12 @@ public class HomePartyPresenter extends BaseRoomPresenter { private boolean isLeaveMode = false; /** - * 上麦 + * 上麥 * * @param micPosition * @param uId - * @param isInviteUpMic 是否是主动的,false:主动 - * @param isReconnect 是否需要清除礼物值,普通情况下上麦传false,断网重连传ture + * @param isInviteUpMic 是否是主動的,false:主動 + * @param isReconnect 是否需要清除禮物值,普通情況下上麥傳false,斷網重連傳ture */ public void upMicroPhone(final int micPosition, final String uId, boolean isInviteUpMic, boolean isReconnect) { final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; @@ -89,7 +89,7 @@ public class HomePartyPresenter extends BaseRoomPresenter { upMicroPhone(micPosition, uId, isInviteUpMic, roomInfo, false); } - //isGiven上次是否异常退出 + //isGiven上次是否異常退出 public void sendDragonBar(FaceInfo faceInfo, String point, boolean isGiven) { RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; if (roomInfo == null) return; @@ -150,7 +150,7 @@ public class HomePartyPresenter extends BaseRoomPresenter { faceReceiveInfo.setResultIndexes(integers); faceReceiveInfos.add(faceReceiveInfo); - // 发送云信信息给所有人 + // 發送雲信信息給所有人 FaceAttachment faceAttachment = new FaceAttachment(CustomAttachment.CUSTOM_MSG_DRAGON_BAR, second); faceAttachment.setUid(userInfo.getUid()); @@ -159,7 +159,7 @@ public class HomePartyPresenter extends BaseRoomPresenter { return ChatRoomMessageBuilder.createChatRoomCustomMessage( // 聊天室id roomInfo.getRoomId() + "", - // 自定义消息 + // 自定義消息 faceAttachment ); } @@ -178,13 +178,13 @@ public class HomePartyPresenter extends BaseRoomPresenter { if (chatRoomMessage != null) { if (chatRoomMessage.getMsgType() == MsgTypeEnum.custom) { CustomAttachment attachment = (CustomAttachment) chatRoomMessage.getAttachment(); - // 显示表情在对应的位置 + // 顯示錶情在對應的位置 if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_DRAGON_BAR) { FaceAttachment faceAttachment = (FaceAttachment) attachment; List faceReceiveInfos = faceAttachment.getFaceReceiveInfos(); if (faceReceiveInfos != null && faceReceiveInfos.size() > 0) { - // 显示动画 + // 显示動畫 IMNetEaseManager.get().getChatRoomEventObservable() .onNext(new RoomEvent().setEvent(RoomEvent.DRAGON_BAR_SELF_START).setChatRoomMessage(chatRoomMessage)); } @@ -215,16 +215,16 @@ public class HomePartyPresenter extends BaseRoomPresenter { /** - * 本地更新房主位信息或者关闭离线模式 + * 本地更新房主位信息或者關閉離線模式 */ @SuppressWarnings("CheckResult") public void leaveModeCheck() { - isLeaveMode = AvRoomDataManager.get().isLeaveMode(); // 进房缓存离线模式状态 + isLeaveMode = AvRoomDataManager.get().isLeaveMode(); // 進房緩存離線模式狀態 if (!AvRoomDataManager.get().isCpRoom() && !AvRoomDataManager.get().isOpenKTV()) { RoomQueueInfo queueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByMicPosition(-1); - // 新版管理员首次进房,如果房主位有人,并且房间是离开模式,需要调用接口关闭离开模式(提高关闭离开模式的几率) + // 新版管理員首次進房,如果房主位有人,並且房間是離開模式,需要調用接口關閉離開模式(提高關閉離開模式的幾率) if (AvRoomDataManager.get().isManager()) { if (queueInfo != null) { @@ -245,7 +245,7 @@ public class HomePartyPresenter extends BaseRoomPresenter { RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; int position = AvRoomDataManager.get().getMicPosition(AvRoomDataManager.get().getRoomUid()); if (roomInfo != null && roomInfo.isLeaveMode() && micPosition == position) { - // 新版由管理员和房主位上麦用户共同调接口关闭离开模式(提高关闭离开模式成功率,降低接口调用频率); + // 新版由管理員和房主位上麥用戶共同調接口關閉離開模式(提高關閉離開模式成功率,降低接口調用頻率); if (AvRoomDataManager.get().isManager() || String.valueOf(AuthModel.get().getCurrentUid()).equals(account)) { new RoomSettingModel().leaveModeClose(roomInfo.getUid()).subscribe(new BeanObserver() { @Override @@ -273,7 +273,7 @@ public class HomePartyPresenter extends BaseRoomPresenter { isLeaveMode = AvRoomDataManager.get().isLeaveMode(); - if (!isLeaveMode && AvRoomDataManager.get().isShowGiftValue()) // 礼物值模式下关闭离开模式,本地清除礼物值 + if (!isLeaveMode && AvRoomDataManager.get().isShowGiftValue()) // 禮物值模式下關閉離開模式,本地清除禮物值 GiftValueMrg.get().handleDownMic(-1, String.valueOf(AvRoomDataManager.get().getRoomUid())); } @@ -328,6 +328,11 @@ public class HomePartyPresenter extends BaseRoomPresenter { getMvpView().onShowBanner(bannerInfos); }, throwable -> getMvpView().onShowBanner(bannerInfos)); } else { + if(GoldBoxHelper.isShowFairy()){ + BannerInfo bannerInfo = new BannerInfo(); + bannerInfo.setFairy(true); + bannerInfos.add(0, bannerInfo); + } if (firstCharge) { BannerInfo bannerInfo = new BannerInfo(); bannerInfo.setFirstCharge(true); diff --git a/app/src/main/java/com/yizhuan/erban/avroom/presenter/SingleRoomPresenter.java b/app/src/main/java/com/yizhuan/erban/avroom/presenter/SingleRoomPresenter.java index eb9cdae62..22ee2fa02 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/presenter/SingleRoomPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/presenter/SingleRoomPresenter.java @@ -45,6 +45,11 @@ public class SingleRoomPresenter extends BaseRoomPresenter { getMvpView().onShowBanner(bannerInfos); }, throwable -> getMvpView().onShowBanner(bannerInfos)); } else { + if(GoldBoxHelper.isShowFairy()){ + BannerInfo bannerInfo = new BannerInfo(); + bannerInfo.setFairy(true); + bannerInfos.add(0, bannerInfo); + } if (firstCharge) { BannerInfo bannerInfo = new BannerInfo(); bannerInfo.setFirstCharge(true); diff --git a/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKSearchActivity.kt b/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKSearchActivity.kt index 6dcd511ac..17a4a5b46 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKSearchActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKSearchActivity.kt @@ -46,7 +46,7 @@ class SingleRoomPKSearchActivity : BaseViewBindingActivity() .setPageSize(pageSize) - .setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.avroom_singleroompk_singleroompksearchactivity_01))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.avroom_singleroompk_singleroompksearchactivity_01))) .setLayoutManager(LinearLayoutManager(this)) .setRecyclerView(binding.recyclerView) .setAdapter(roomPKSearchAdapter) diff --git a/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java b/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java index ef29f91ba..a22a9a58e 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java @@ -1,8 +1,20 @@ package com.yizhuan.erban.avroom.widget; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GIFT_COMPOUND; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_RED_PACKAGE; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_BOX_ME; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_CONVERT_L1; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_CONVERT_L2; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_CONVERT_L3; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_BALL_L1; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_BALL_L2; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_BALL_L3; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_GIFT_L1; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_GIFT_L2; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_GIFT_L3; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_GIFT_L4; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_GIFT_L5; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_FANS_TEAM_JOIN; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_GIFT_COMPOUND; import static com.yizhuan.xchat_android_core.redpackage.RedPackageTypeKt.ALL_DIAMOND; @@ -59,6 +71,8 @@ import com.yizhuan.erban.common.util.Utils; import com.yizhuan.erban.common.widget.CustomAutoWidthImageSpan; import com.yizhuan.erban.common.widget.CustomImageSpan; import com.yizhuan.erban.common.widget.OriginalDrawStatusClickSpan; +import com.yizhuan.erban.treasure_box.widget.GoldBoxHelper; +import com.yizhuan.erban.treasurefairy.HomeFairyActivity; import com.yizhuan.erban.ui.utils.ImageLoadUtils; import com.yizhuan.erban.ui.widget.DividerItemDecoration; import com.yizhuan.erban.ui.widget.MyItemAnimator; @@ -88,6 +102,7 @@ import com.yizhuan.xchat_android_core.im.custom.bean.CleanScreenAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.DatingAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.FaceAttachment; +import com.yizhuan.xchat_android_core.im.custom.bean.FairyMsgAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.FansTeamMsgAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.GiftAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.GiftBatchAttachment; @@ -132,6 +147,7 @@ import com.yizhuan.xchat_android_core.noble.NobleInfo; import com.yizhuan.xchat_android_core.noble.NobleUtil; import com.yizhuan.xchat_android_core.praise.PraiseModel; import com.yizhuan.xchat_android_core.redpackage.RedEnvelopeRoomMsg; +import com.yizhuan.xchat_android_core.room.anotherroompk.ShowUserInfoDialogEvent; import com.yizhuan.xchat_android_core.room.bean.DatingNotifyInfo; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.bean.RoomMessageViewNoticeInfo; @@ -148,13 +164,15 @@ import com.yizhuan.xchat_android_core.room.queuing_mic.attachment.QueuingMicAtta import com.yizhuan.xchat_android_core.room.queuing_mic.bean.QueuingMicInfo; import com.yizhuan.xchat_android_core.statistic.StatisticManager; import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol; +import com.yizhuan.xchat_android_core.treasurefairy.FairyMsgInfo; import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_core.user.bean.UserInfo; import com.yizhuan.xchat_android_core.utils.ExtensionUtil; -import com.yizhuan.xchat_android_core.utils.Logger; +import com.yizhuan.xchat_android_core.utils.StringExtensionKt; import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver; import com.yizhuan.xchat_android_core.utils.net.RxHelper; import com.yizhuan.xchat_android_core.vip.VipMessageInfo; +import com.yizhuan.xchat_android_library.rxbus.RxBus; import com.yizhuan.xchat_android_library.utils.FormatUtils; import com.yizhuan.xchat_android_library.utils.JavaUtil; import com.yizhuan.xchat_android_library.utils.ListUtils; @@ -977,6 +995,8 @@ public class MessageView extends FrameLayout { setLuckyGiftServerNotifyMsg(chatRoomMessage, tvContent); } else if (first == CUSTOM_MSG_GIFT_COMPOUND) { setGiftCompoundMsg(chatRoomMessage, tvContent); + } else if (first == CUSTOM_MSG_FAIRY) { + setFairyMsg(chatRoomMessage, tvContent); } else { tvContent.setTextColor(Color.WHITE); tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip)); @@ -990,6 +1010,87 @@ public class MessageView extends FrameLayout { } } + private void setFairyMsg(ChatRoomMessage chatRoomMessage, TextView tvContent) { + if (chatRoomMessage.getAttachment() instanceof FairyMsgAttachment) { + FairyMsgAttachment attachment = (FairyMsgAttachment) chatRoomMessage.getAttachment(); + FairyMsgInfo fairyMsgInfo = attachment.getFairyMsgInfo(); + if (fairyMsgInfo == null) return; + SpannableBuilder builder = null; + switch (attachment.getSecond()) { + case CUSTOM_MSG_SUB_DRAW_GIFT_L1: + case CUSTOM_MSG_SUB_DRAW_GIFT_L2: + case CUSTOM_MSG_SUB_DRAW_BALL_L1: + builder = builderDrawMsg(tvContent, fairyMsgInfo, "厲害了!"); + break; + case CUSTOM_MSG_SUB_DRAW_GIFT_L3: + case CUSTOM_MSG_SUB_DRAW_GIFT_L4: + case CUSTOM_MSG_SUB_DRAW_GIFT_L5: + case CUSTOM_MSG_SUB_DRAW_BALL_L2: + case CUSTOM_MSG_SUB_DRAW_BALL_L3: + builder = builderDrawMsg(tvContent, fairyMsgInfo, "好運爆棚!"); + break; + case CUSTOM_MSG_SUB_CONVERT_L1: + builder = builderConvertMsg(tvContent, fairyMsgInfo, "初級召喚"); + break; + case CUSTOM_MSG_SUB_CONVERT_L2: + builder = builderConvertMsg(tvContent, fairyMsgInfo, "史詩召喚"); + break; + case CUSTOM_MSG_SUB_CONVERT_L3: + builder = builderConvertMsg(tvContent, fairyMsgInfo, "傳說召喚"); + break; + } + + if (builder != null) { + if (GoldBoxHelper.isShowFairy()) { + builder.append(" 去參加!", new OriginalDrawStatusClickSpan(Color.parseColor("#FFBC51")) { + @Override + public void onClick(@NonNull View widget) { + StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_TREASURE_ELF_SCREEN_ENTRANCE_CLICK, "奪寶精靈公屏入口點擊"); + + HomeFairyActivity.start(mContext); + } + }); + } + tvContent.setOnClickListener(null); + tvContent.setMovementMethod(new LinkMovementMethod()); + tvContent.setText(builder.build()); + } + } + + } + + private SpannableBuilder builderConvertMsg(TextView textView, @NonNull FairyMsgInfo fairyMsgInfo, String type) { + return new SpannableBuilder(textView) + .append("厲害了!", new ForegroundColorSpan(whiteColor)) + .append(StringExtensionKt.subAndReplaceDot(fairyMsgInfo.getNick(), 7), new OriginalDrawStatusClickSpan(roomTipNickColor, false) { + + @Override + public void onClick(@NonNull View widget) { + RxBus.get().post(new ShowUserInfoDialogEvent(String.valueOf(fairyMsgInfo.getUid()))); + } + }) + .append("在奪寶精靈中 " + type, new ForegroundColorSpan(whiteColor)) + .append(fairyMsgInfo.getRewardShowValue() + "鑽" + fairyMsgInfo.getRewardName(), new ForegroundColorSpan(roomTipColor)); + } + + private SpannableBuilder builderDrawMsg(TextView textView, @NonNull FairyMsgInfo fairyMsgInfo, String desc) { + SpannableBuilder builder = new SpannableBuilder(textView) + .append(desc, new ForegroundColorSpan(whiteColor)) + .append(StringExtensionKt.subAndReplaceDot(fairyMsgInfo.getNick(), 7), new OriginalDrawStatusClickSpan(roomTipNickColor, false) { + + @Override + public void onClick(@NonNull View widget) { + RxBus.get().post(new ShowUserInfoDialogEvent(String.valueOf(fairyMsgInfo.getUid()))); + } + }) + .append(" 在奪寶精靈中獲得 ", new ForegroundColorSpan(whiteColor)) + .append(fairyMsgInfo.getRewardName(), new ForegroundColorSpan(Color.WHITE)); + if (fairyMsgInfo.getRewardNum() > 1) { + builder.append(" x" + fairyMsgInfo.getRewardNum(), new ForegroundColorSpan(roomTipNickColor)); + } + return builder; + } + @SuppressLint("CheckResult") private void setGiftCompoundMsg(ChatRoomMessage chatRoomMessage, TextView tvContent) { if (chatRoomMessage.getAttachment() instanceof GiftCompoundAttachment) { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt b/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt index 138e0fe9e..5b2046c94 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt @@ -39,6 +39,7 @@ import com.yizhuan.erban.ui.webview.CommonWebViewActivity import com.yizhuan.erban.ui.webview.DialogWebViewActivity import com.yizhuan.erban.ui.widget.SimpleAnimListener import com.yizhuan.erban.ui.widget.drawgift.DrawGiftPlayHelper +import com.yizhuan.erban.utils.MsgBuilder import com.yizhuan.erban.utils.SpannableBuilder import com.yizhuan.xchat_android_constants.XChatConstants import com.yizhuan.xchat_android_core.auth.AuthModel @@ -136,6 +137,10 @@ class RoomEffectView @JvmOverloads constructor( private var luckySeaSVGADisposable: Disposable? = null private val messagesLuckySeaSVGA: MutableList by lazy { ArrayList() } + private var fairyAnimation: Animation? = null + private var fairyDisposable: Disposable? = null + private val fairyMessages: MutableList> by lazy { ArrayList() } + private fun loopCarAnim() { if (context.isDestroyed()) return isSvgaPlaying = false @@ -221,6 +226,14 @@ class RoomEffectView @JvmOverloads constructor( RoomEvent.LUCKY_SEA_GIFT_SERVER_NOTIFY -> {// 深海奇缘礼物全服飘屏通知 addLuckySeaNotifyBySVGA(roomEvent.chatRoomMessage) } + RoomEvent.FAIRY_DRAW_GIFT_L4, + RoomEvent.FAIRY_DRAW_GIFT_L5, + RoomEvent.FAIRY_CONVERT_L1, + RoomEvent.FAIRY_CONVERT_L2, + RoomEvent.FAIRY_CONVERT_L3 -> addFairyNotify( + roomEvent.event, + roomEvent.chatRoomMessage + ) else -> {} } } @@ -236,6 +249,105 @@ class RoomEffectView @JvmOverloads constructor( }) } + /** + * 幸运池飘屏 + * + * @param chatRoomMessage + */ + private fun addFairyNotify(roomEvent: Int, chatRoomMessage: ChatRoomMessage) { + if (binding.clNotify.visibility == GONE) { + binding.clNotify.visibility = VISIBLE + } + fairyMessages.add(Pair(roomEvent, chatRoomMessage)) + if (fairyDisposable == null || fairyMessages.size == 1) { + fairyDisposable = Observable.interval(0, PERIOD.toLong(), TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .takeWhile { fairyMessages.size > 0 } + .subscribe { + showFairyNotify( + fairyMessages.removeAt(0) + ) + } + } + } + + private fun showFairyNotify(pair: Pair) { + val attachment = pair.second.attachment as FairyMsgAttachment + when (pair.first) { + RoomEvent.FAIRY_DRAW_GIFT_L4, + RoomEvent.FAIRY_CONVERT_L1, + RoomEvent.FAIRY_CONVERT_L2 -> { + val textView = + LayoutInflater.from(mContext) + .inflate(R.layout.layout_room_fairy_notify, null) as TextView + val text = MsgBuilder.buildFairyMsg(pair.first, attachment) + textView.text = text.build() + fairyAnimation = AnimationUtils.loadAnimation(mContext, R.anim.anim_box_notify) + binding.flFairyNotify.addView(textView) + textView.startAnimation(fairyAnimation) + binding.flFairyNotify.postDelayed( + { binding.flFairyNotify.removeView(textView) }, + SHOW_TIME.toLong() + ) + } + RoomEvent.FAIRY_DRAW_GIFT_L5, + RoomEvent.FAIRY_CONVERT_L3 -> { + showFairyNotifyBySVGA(pair) + } + } + + } + + private fun showFairyNotifyBySVGA(pair: Pair) { + val attachment = pair.second.attachment as FairyMsgAttachment + val text = MsgBuilder.buildFairyMsg(pair.first, attachment) + val svgaImageView = SVGAImageView(mContext) + svgaImageView.loops = 1 + svgaImageView.clearsAfterStop = true + val params = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT) + svgaImageView.layoutParams = params + svgaImageView.callback = object : SimpleSvgaCallback() { + override fun onFinished() { + binding.flFairyNotify.post { + binding.flFairyNotify.removeView( + svgaImageView + ) + } + } + } + binding.flFairyNotify.addView(svgaImageView) + shareParser().decodeFromAssets( + "svga/all_fairy.svga", + object : SVGAParser.ParseCompletion { + override fun onComplete(videoItem: SVGAVideoEntity) { + val dynamicEntity = SVGADynamicEntity() + val textPaint = TextPaint() + textPaint.color = Color.WHITE //字体颜色 + textPaint.textSize = 24f //字体大小 + dynamicEntity.setDynamicText( + StaticLayout( + text.build(), + 0, + text.build().length, + textPaint, + 0, + Layout.Alignment.ALIGN_CENTER, + 1.0f, + 0.0f, + false + ), "touming_text_name" + ) + val drawable = SVGADrawable(videoItem, dynamicEntity) + svgaImageView.setImageDrawable(drawable) + svgaImageView.startAnimation() + } + + override fun onError() {} + }, + null + ) + } + /** * 幸運池飄屏 * diff --git a/app/src/main/java/com/yizhuan/erban/base/Event.kt b/app/src/main/java/com/yizhuan/erban/base/Event.kt new file mode 100644 index 000000000..cc0809ce4 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/base/Event.kt @@ -0,0 +1,27 @@ +package com.yizhuan.erban.base + +/** + * Used as a wrapper for data that is exposed via a LiveData that represents an event. + */ +open class Event(private val content: T) { + + var hasBeenHandled = false + private set // Allow external read but not write + + /** + * Returns the content and prevents its use again. + */ + fun getContentIfNotHandled(): T? { + return if (hasBeenHandled) { + null + } else { + hasBeenHandled = true + content + } + } + + /** + * Returns the content, even if it's already been handled. + */ + fun peekContent(): T = content +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/common/EmptyViewHelper.java b/app/src/main/java/com/yizhuan/erban/common/EmptyViewHelper.java index 8cb25ee32..47d293269 100644 --- a/app/src/main/java/com/yizhuan/erban/common/EmptyViewHelper.java +++ b/app/src/main/java/com/yizhuan/erban/common/EmptyViewHelper.java @@ -14,7 +14,7 @@ import com.yizhuan.xchat_android_library.utils.ResUtil; public class EmptyViewHelper { - public static View createEmptyView(Context context, String text) { + public static View createEmptyTextView(Context context, String text) { if (!NetworkUtils.isNetworkAvailable(context)) text = ResUtil.getString(R.string.erban_common_emptyviewhelper_01); View view = LayoutInflater.from(context).inflate(R.layout.layout_ktv_empty, null); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); diff --git a/app/src/main/java/com/yizhuan/erban/common/widget/OriginalDrawStatusClickSpan.java b/app/src/main/java/com/yizhuan/erban/common/widget/OriginalDrawStatusClickSpan.java index 55f6c4e3b..16c0352d1 100644 --- a/app/src/main/java/com/yizhuan/erban/common/widget/OriginalDrawStatusClickSpan.java +++ b/app/src/main/java/com/yizhuan/erban/common/widget/OriginalDrawStatusClickSpan.java @@ -9,6 +9,7 @@ import androidx.annotation.NonNull; public abstract class OriginalDrawStatusClickSpan extends ClickableSpan { private final Integer mColor; + private final boolean underlineText; public OriginalDrawStatusClickSpan() { this(null); @@ -16,13 +17,19 @@ public abstract class OriginalDrawStatusClickSpan extends ClickableSpan { public OriginalDrawStatusClickSpan(@ColorInt Integer color) { this.mColor = color; + this.underlineText = true; + } + + public OriginalDrawStatusClickSpan(@ColorInt Integer color, boolean underlineText) { + this.mColor = color; + this.underlineText = underlineText; } @Override public void updateDrawState(@NonNull TextPaint ds) { if (mColor != null) { ds.setColor(mColor); - ds.setUnderlineText(true); + ds.setUnderlineText(underlineText); } } diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationCommonFragment.kt b/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationCommonFragment.kt index e8daf1c2c..3451de8de 100644 --- a/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationCommonFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationCommonFragment.kt @@ -54,7 +54,7 @@ class DecorationCommonFragment : BaseViewBindingFragment(), .setLayoutManager(LinearLayoutManager(context)) .setRecyclerView(binding.mRecyclerView) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( context, getString(R.string.empty_data) ) diff --git a/app/src/main/java/com/yizhuan/erban/fansteam/FansTeamJoinedActivity.kt b/app/src/main/java/com/yizhuan/erban/fansteam/FansTeamJoinedActivity.kt index b97e72ce4..6a005927c 100644 --- a/app/src/main/java/com/yizhuan/erban/fansteam/FansTeamJoinedActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/fansteam/FansTeamJoinedActivity.kt @@ -53,7 +53,7 @@ class FansTeamJoinedActivity : BaseViewBindingActivity( .setRecyclerView(binding.recyclerView) .setAdapter(VisitorListAdapter()) .setPageSize(pageSize) - .setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.home_activity_visitorlistactivity_02))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.home_activity_visitorlistactivity_02))) .build() rvDelegate.adapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/RoomActAdapter.java b/app/src/main/java/com/yizhuan/erban/home/adapter/RoomActAdapter.java index 9203a5073..30100b3eb 100644 --- a/app/src/main/java/com/yizhuan/erban/home/adapter/RoomActAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/RoomActAdapter.java @@ -12,6 +12,7 @@ import com.yizhuan.erban.R; import com.yizhuan.erban.avroom.firstcharge.FirstChargeDialog; import com.yizhuan.erban.shipantics.PullRadishActivity; import com.yizhuan.erban.treasure_box.widget.GoldBoxHelper; +import com.yizhuan.erban.treasurefairy.HomeFairyActivity; import com.yizhuan.erban.ui.utils.ImageLoadUtils; import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter; import com.yizhuan.erban.utils.CommonJumpHelper; @@ -42,7 +43,9 @@ public class RoomActAdapter extends StaticPagerAdapter { BannerInfo bannerInfo = data.get(position); String actId = String.valueOf(bannerInfo.getBannerId()); ivCover.setScaleType(ImageView.ScaleType.CENTER_CROP); - if (bannerInfo.isFirstCharge()) { + if (bannerInfo.isFairy()) { + ivCover.setImageResource(R.drawable.ic_fairy_entrance); + } else if (bannerInfo.isFirstCharge()) { ivCover.setImageResource(R.drawable.ic_first_charge_enter); } else if (bannerInfo.isBox()) { GlideApp.with(BasicConfig.INSTANCE.getAppContext()) @@ -55,7 +58,9 @@ public class RoomActAdapter extends StaticPagerAdapter { ImageLoadUtils.loadImage(mContext, bannerInfo.getBannerPic(), ivCover, R.drawable.default_cover); } ivCover.setOnClickListener(v -> { - if (bannerInfo.isFirstCharge()) { + if (bannerInfo.isFairy()) { + HomeFairyActivity.start(mContext); + } else if (bannerInfo.isFirstCharge()) { FirstChargeDialog.start(mContext); } else if (bannerInfo.isBox()) { GoldBoxHelper.handleBoxClick(mContext); diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/RoomCommonFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomCommonFragment.kt index 60447b41c..8be8e08af 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/RoomCommonFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomCommonFragment.kt @@ -52,7 +52,7 @@ class RoomCommonFragment : BaseViewBindingFragment() .setAdapter(mAdapter) .setLayoutManager(LinearLayoutManager(mContext)) .setPageSize(20) - .setEmptyView(EmptyViewHelper.createEmptyView(mContext, ResUtil.getString(R.string.home_fragment_roomcommonfragment_01))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomcommonfragment_01))) .setRefreshLayout(binding.refreshLayout) .setRecyclerView(binding.recyclerView) .build() diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/RoomGameFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomGameFragment.kt index b13d8169e..4c59b9106 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/RoomGameFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomGameFragment.kt @@ -48,7 +48,7 @@ class RoomGameFragment : BaseViewBindingFragment() { .setAdapter(roomHotAdapter) .setRecyclerView(binding.recyclerView) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( context, ResUtil.getString(R.string.home_fragment_roomgamefragment_01) ) diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/RoomLikeFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomLikeFragment.kt index 9fe863f9a..27e9c441e 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/RoomLikeFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/RoomLikeFragment.kt @@ -74,7 +74,7 @@ class RoomLikeFragment : BaseViewBindingFragment() { .setLayoutManager(LinearLayoutManager(mContext)) .setPageSize(pageSize) .setRefreshLayout(binding.refreshLayout) - .setEmptyView(EmptyViewHelper.createEmptyView(mContext, ResUtil.getString(R.string.home_fragment_roomlikefragment_01))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomlikefragment_01))) .setRecyclerView(binding.rvCollect) .build() diff --git a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt index e6fdad5a7..959a6a99d 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt @@ -72,7 +72,7 @@ class GiveGoldActivity : BaseViewBindingActivity() { .setLayoutManager(LinearLayoutManager(this)) .setPageSize(20) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( this, ResUtil.getString(R.string.me_give_gold_empty) ) diff --git a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt index c0f460752..79a2deb7d 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt @@ -40,7 +40,7 @@ class GiveGoldSearchActivity : BaseActivity(), TextWatcher { val adapter = GiveSearchAdapter() rvDelegate = RVDelegate.Builder() .setPageSize(Int.MAX_VALUE) - .setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.pay_activity_givegoldsearchactivity_01))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.pay_activity_givegoldsearchactivity_01))) .setLayoutManager(LinearLayoutManager(this)) .setRecyclerView(recyclerView) .setAdapter(adapter) diff --git a/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt index 7834f6a66..6bb9e1a90 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt @@ -45,7 +45,7 @@ class GiveDiamondFragment : BaseViewBindingFragment( .setLayoutManager(LinearLayoutManager(context)) .setPageSize(20) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( context, ResUtil.getString(R.string.me_give_gold_empty) ) diff --git a/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt index 101df8fcf..2732a052f 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt @@ -46,7 +46,7 @@ class GiveGiftFragment : BaseViewBindingFragment() { .setLayoutManager(LinearLayoutManager(context)) .setPageSize(20) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( context, ResUtil.getString(R.string.me_give_gold_empty) ) diff --git a/app/src/main/java/com/yizhuan/erban/relation/cp/activity/CpInviteRecordActivity.kt b/app/src/main/java/com/yizhuan/erban/relation/cp/activity/CpInviteRecordActivity.kt index 6f777c5f8..96d43bfcb 100644 --- a/app/src/main/java/com/yizhuan/erban/relation/cp/activity/CpInviteRecordActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/relation/cp/activity/CpInviteRecordActivity.kt @@ -86,7 +86,7 @@ class CpInviteRecordActivity : BaseBindingActivity() { adapter.setNewData(it) if (it.isEmpty()) { adapter.setHeaderAndEmpty(false) - adapter.emptyView = createEmptyView() + adapter.emptyView = createEmptyTextView() } dialogManager.dismissDialog() }, @@ -89,15 +89,15 @@ class SkillHomeActivity : BaseBindingActivity() { toast(th.message) mBinding.refreshLayout.isRefreshing = false adapter.setHeaderAndEmpty(false) - adapter.emptyView = createEmptyView() + adapter.emptyView = createEmptyTextView() dialogManager.dismissDialog() }) } - private fun createEmptyView(): View { + private fun createEmptyTextView(): View { if (pageType == PAGE_TYPE_CUSTOM) { - return EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.skill_activity_skillhomeactivity_02)) + return EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.skill_activity_skillhomeactivity_02)) } val rootView = FrameLayout(this) rootView.layoutParams = diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/FairyViewModel.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/FairyViewModel.kt new file mode 100644 index 000000000..2e3b1cdf0 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/FairyViewModel.kt @@ -0,0 +1,468 @@ +package com.yizhuan.erban.treasurefairy + +import android.util.SparseArray +import androidx.core.util.forEach +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.yizhuan.erban.base.BaseViewModel +import com.yizhuan.erban.base.Event +import com.yizhuan.erban.treasurefairy.view.MyFairyItemView +import com.yizhuan.xchat_android_core.bean.response.ListResult +import com.yizhuan.xchat_android_core.gift.bean.SimpleUserInfo +import com.yizhuan.xchat_android_core.treasurefairy.* +import com.yizhuan.xchat_android_core.utils.net.ServerException +import com.yizhuan.xchat_android_core.utils.toast + +class FairyViewModel : BaseViewModel() { + + private val _drawInfoLiveData = MutableLiveData() + val drawInfoLiveData: MutableLiveData = _drawInfoLiveData + + private val _prizeInfoListLiveData = MutableLiveData?>() + val prizeInfoListLiveData: MutableLiveData?> = _prizeInfoListLiveData + + private val _resultLiveData = MutableLiveData>?>() + val resultLiveData: MutableLiveData>?> = _resultLiveData + + private val _showGetKeyLiveData = MutableLiveData>() + val showGetKeyLiveData: LiveData> = _showGetKeyLiveData + + private val _drawForestLiveData = MutableLiveData>?>() + val drawForestLiveData: MutableLiveData>?> = _drawForestLiveData + + private val _forestInfoLiveData = MutableLiveData() + val forestInfoLiveData: MutableLiveData = _forestInfoLiveData + + private val _forestPoolLiveData = MutableLiveData?>?>() + val forestPoolLiveData: MutableLiveData?>?> = _forestPoolLiveData + + private val _forestRecordLiveData = MutableLiveData>() + val forestRecordLiveData: LiveData> = _forestRecordLiveData + + private val _myFairyInfoLiveData = MutableLiveData() + val myFairyInfoLiveData: MutableLiveData = _myFairyInfoLiveData + + private val _friendsListLiveData = MutableLiveData?>() + val friendsListLiveData: MutableLiveData?> = _friendsListLiveData + + private val _sendFairyLiveData = MutableLiveData>() + val sendFairyLiveData: LiveData> = _sendFairyLiveData + + private val _sendFairyRecordLiveData = MutableLiveData>() + val sendFairyRecordLiveData: LiveData> = _sendFairyRecordLiveData + + private val _compoundFairyInfosLiveData = MutableLiveData?>() + val compoundFairyInfosLiveData: MutableLiveData?> = _compoundFairyInfosLiveData + + private val _testResultLiveData = MutableLiveData?>() + val testResultLiveData: MutableLiveData?> = _testResultLiveData + + private val _testLegendResultLiveData = MutableLiveData?>() + val testLegendResultLiveData: MutableLiveData?> = _testLegendResultLiveData + + private val _testRecordLiveData = MutableLiveData>() + val testRecordLiveData: LiveData> = _testRecordLiveData + + private val _exchangeGiftListLiveData = MutableLiveData?>() + val exchangeGiftListLiveData: MutableLiveData?> = _exchangeGiftListLiveData + + private val _exchangeGiftLiveData = MutableLiveData>() + val exchangeGiftLiveData: LiveData> = _exchangeGiftLiveData + + private val _debrisExchangeListLiveData = MutableLiveData?>() + val debrisExchangeListLiveData: MutableLiveData?> = _debrisExchangeListLiveData + + private val _debrisExchangeLiveData = MutableLiveData>() + val debrisExchangeLiveData: LiveData> = _debrisExchangeLiveData + + private val _exchangeFairyRecordLiveData = MutableLiveData>() + val exchangeFairyRecordLiveData: LiveData> = + _exchangeFairyRecordLiveData + + private val _exchangeDebrisRecordLiveData = MutableLiveData>() + val exchangeDebrisRecordLiveData: LiveData> = + _exchangeDebrisRecordLiveData + + init { + initPrizeInfoList() + } + + fun initDrawInfo() { + safeLaunch( + onError = { + _drawInfoLiveData.value = null + }, + block = { + _drawInfoLiveData.value = TreasureFairyModel.getDrawInfo() + } + ) + } + + fun initPrizeInfoList() { + safeLaunch( + onError = { + _prizeInfoListLiveData.value = null + }, + block = { + _prizeInfoListLiveData.value = TreasureFairyModel.getPrizeInfoList() + } + ) + } + + fun drawFairy(drawNum: Int) { + safeLaunch( + onError = { + if (it is ServerException && it.code == 211188) { + _showGetKeyLiveData.value = Event(true) + } else { + it.message.toast() + } + _resultLiveData.value = null + }, + block = { + val result = TreasureFairyModel.drawTreasureFairy(drawNum) + _resultLiveData.value = result?.let { Event(it) } + _drawInfoLiveData.value = TreasureFairyModel.getDrawInfo() + } + ) + } + + fun drawForestFairy(drawNum: Int, poolLevel: Int) { + safeLaunch( + onError = { + it.message.toast() + _drawForestLiveData.value = null + }, + block = { + val result = TreasureFairyModel.drawForestFairy(drawNum, poolLevel) + _drawForestLiveData.value = result?.let { Event(it) } + _forestInfoLiveData.value = TreasureFairyModel.getForestInfo() + } + ) + } + + fun cleanDrawForestLiveData() { + _drawForestLiveData.value = null + } + + fun getForestInfo() { + safeLaunch( + onError = { + _forestInfoLiveData.value = null + }, + block = { + _forestInfoLiveData.value = TreasureFairyModel.getForestInfo() + } + ) + } + + fun getForestPrizePool(poolLevel: Int) { + safeLaunch( + onError = { + _forestPoolLiveData.value = null + }, + block = { + _forestPoolLiveData.value = + Pair(poolLevel, TreasureFairyModel.getForestPrizePool(poolLevel)) + } + ) + } + + fun getForestRecord( + page: Int, + pageSize: Int + ) { + safeLaunch( + onError = { + _forestRecordLiveData.value = ListResult.failed(page) + }, + block = { + val result = TreasureFairyModel.getForestRecord(page, pageSize) + _forestRecordLiveData.value = ListResult.success(result, page) + } + ) + } + + fun getMyFairyInfo() { + safeLaunch( + onError = { + _myFairyInfoLiveData.value = null + it.message.toast() + }, + block = { + _myFairyInfoLiveData.value = TreasureFairyModel.getMyFairyInfo() + } + ) + } + + fun getFriendsList(nick: String? = null) { + safeLaunch( + onError = { + _friendsListLiveData.value = null + it.message.toast() + }, + block = { + _friendsListLiveData.value = TreasureFairyModel.getFriendsList(nick) + } + ) + } + + + fun askForFairy(elfId: Long, targetUid: Long) { + safeLaunch( + onError = { + _sendFairyLiveData.value = Event(false) + it.message.toast() + }, + block = { + TreasureFairyModel.askForFairy(elfId, targetUid) + _sendFairyLiveData.value = Event(true) + "已向好友發送索要信息".toast() + } + ) + } + + fun sendFairy(elfId: Long, targetUid: Long) { + safeLaunch( + onError = { + _sendFairyLiveData.value = Event(false) + it.message.toast() + }, + block = { + TreasureFairyModel.sendFairy(elfId, targetUid) + _sendFairyLiveData.value = Event(true) + "贈送成功!".toast() + } + ) + } + + fun getSendFairyList( + page: Int, + pageSize: Int + ) { + safeLaunch( + onError = { + _sendFairyRecordLiveData.value = ListResult.failed(page) + }, + block = { + val result = TreasureFairyModel.getSendFairyList(page, pageSize) + _sendFairyRecordLiveData.value = ListResult.success(result, page) + } + ) + } + + fun cleanTestParam() { + _compoundFairyInfosLiveData.value = null + _testLegendResultLiveData.value = null + _testResultLiveData.value = null + val myFairyInfo = _myFairyInfoLiveData.value + myFairyInfo?.lowElves?.forEach { + it.selectedNum = 0 + } + myFairyInfo?.middleElves?.forEach { + it.selectedNum = 0 + } + _myFairyInfoLiveData.value = myFairyInfo + } + + fun addTestFairy(fairyInfo: FairyInfo) { + val array = _compoundFairyInfosLiveData.value ?: SparseArray() + + if (array.size() >= 3) { + "試煉爐已滿!".toast() + } else { + if (fairyInfo.elfNum == 0) { + "你還未捕捉到該精靈".toast() + return + } + var selectedNum = 0 + array.forEach { _, value -> + if (value.elfId == fairyInfo.elfId) { + selectedNum++ + } + } + + if (selectedNum + 1 > fairyInfo.elfNum) { + "精靈數量不足".toast() + return + } + array.put(nextIndex(array), fairyInfo) + + fairyInfo.selectedNum = selectedNum + 1 + + _compoundFairyInfosLiveData.value = array + } + } + + fun minusTestFairy(index: Int) { + val array = _compoundFairyInfosLiveData.value ?: SparseArray() + val fairyInfo = array.get(index) + if (fairyInfo != null) { + array.remove(index) + var selectedNum = 0 + array.forEach { _, value -> + if (value.elfId == fairyInfo.elfId) { + selectedNum++ + } + } + fairyInfo.selectedNum = selectedNum + _compoundFairyInfosLiveData.value = array + } + } + + fun oneKeyAdd(fairyInfos: List) { + val compoundFairyInfos = _compoundFairyInfosLiveData.value ?: SparseArray() + var needNum = 3 - compoundFairyInfos.size() + if (needNum == 0) { + "試煉爐已滿!".toast() + return + } + fairyInfos.forEach { + while (it.elfNum - it.selectedNum > 0 && needNum > 0) { + it.selectedNum++ + needNum-- + compoundFairyInfos.put(nextIndex(compoundFairyInfos), it) + } + } + if (needNum == 3) { + "精靈數量不足".toast() + return + } + _compoundFairyInfosLiveData.value = compoundFairyInfos + } + + private fun nextIndex(fairyInfos: SparseArray): Int { + return when { + fairyInfos.get(0) == null -> { + 0 + } + fairyInfos.get(1) == null -> { + 1 + } + else -> { + 2 + } + } + } + + fun testFairy(level: Int): Boolean { + val fairyInfos = _compoundFairyInfosLiveData.value ?: SparseArray() + if (fairyInfos.size() != 3) { + "精靈數量不足".toast() + return false + } + safeLaunch( + onError = { + if (level == MyFairyItemView.EPIC) { + _testLegendResultLiveData.value = null + } else { + _testResultLiveData.value = null + } + + it.message.toast() + }, + block = { + val fairyTestParam = FairyTestParam() + fairyInfos.forEach { _, value -> + fairyTestParam.expendList.add(Compound(value.elfId, 1)) + } + fairyTestParam.level = level + val result = TreasureFairyModel.testFairy(fairyTestParam) + (if (level == MyFairyItemView.EPIC) { + _testLegendResultLiveData + } else { + _testResultLiveData + }).value = result?.let { Event(it) } + getMyFairyInfo() + } + ) + return true + } + + fun getTestFairyRecordList( + page: Int, + pageSize: Int + ) { + safeLaunch( + onError = { + _testRecordLiveData.value = ListResult.failed(page) + }, + block = { + val result = TreasureFairyModel.getTestFairyRecordList(page, pageSize) + _testRecordLiveData.value = ListResult.success(result, page) + } + ) + } + + fun getExchangeGiftInfoList() { + safeLaunch( + onError = { + _exchangeGiftListLiveData.value = null + }, + block = { + val result = TreasureFairyModel.getExchangeGiftInfoList() + _exchangeGiftListLiveData.value = result + } + ) + } + + + fun getDebrisExchangeList() { + safeLaunch( + onError = { + _debrisExchangeListLiveData.value = null + }, + block = { + val result = TreasureFairyModel.getDebrisExchangeList() + _debrisExchangeListLiveData.value = result + } + ) + } + + fun exchangeGift(itemId: Long) { + safeLaunch { + val result = TreasureFairyModel.exchangeGift(itemId) + _exchangeGiftLiveData.value = result?.let { Event(it) } + _myFairyInfoLiveData.value = TreasureFairyModel.getMyFairyInfo() + } + } + + fun debrisExchange(itemId: Long) { + safeLaunch { + val result = TreasureFairyModel.exchangeGift(itemId) + _debrisExchangeLiveData.value = result?.let { Event(it) } + _myFairyInfoLiveData.value = TreasureFairyModel.getMyFairyInfo() + } + } + + fun getExchangeFairyRecord( + page: Int, + pageSize: Int + ) { + safeLaunch( + onError = { + _exchangeFairyRecordLiveData.value = ListResult.failed(page) + }, + block = { + val result = TreasureFairyModel.getExchangeRecord(1, page, pageSize) + _exchangeFairyRecordLiveData.value = ListResult.success(result, page) + } + ) + } + + fun getExchangeDebrisRecord( + page: Int, + pageSize: Int + ) { + safeLaunch( + onError = { + _exchangeDebrisRecordLiveData.value = ListResult.failed(page) + }, + block = { + val result = TreasureFairyModel.getExchangeRecord(2, page, pageSize) + _exchangeDebrisRecordLiveData.value = ListResult.success(result, page) + } + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/HomeFairyActivity.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/HomeFairyActivity.kt new file mode 100644 index 000000000..51e226168 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/HomeFairyActivity.kt @@ -0,0 +1,289 @@ +package com.yizhuan.erban.treasurefairy + +import android.animation.ObjectAnimator +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import android.graphics.Path +import android.text.style.ForegroundColorSpan +import android.view.* +import android.widget.LinearLayout +import android.widget.TextView +import androidx.activity.viewModels +import androidx.core.content.ContextCompat +import androidx.core.graphics.toColorInt +import com.netease.nim.uikit.common.util.sys.ScreenUtil +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingActivity +import com.yizhuan.erban.common.widget.dialog.DialogManager +import com.yizhuan.erban.databinding.TreasureFairyDialogHomeBinding +import com.yizhuan.erban.treasurefairy.dialog.ForestFairyDialog +import com.yizhuan.erban.treasurefairy.dialog.HomeMorePopupWindow +import com.yizhuan.erban.treasurefairy.dialog.HomePrizeDialog +import com.yizhuan.erban.treasurefairy.dialog.MyFairyDialog +import com.yizhuan.erban.treasurefairy.view.CustomDrawable +import com.yizhuan.erban.ui.webview.FairyDialogWebViewActivity +import com.yizhuan.erban.utils.SpannableBuilder +import com.yizhuan.xchat_android_core.UriProvider +import com.yizhuan.xchat_android_core.statistic.StatisticManager +import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import java.util.concurrent.TimeUnit + +/** + * author: wushaocheng + * time: 2023/3/7 + * desc: 奪寶精靈 + */ +class HomeFairyActivity : BaseViewBindingActivity() { + private var selectIndex = 0 + private var targetIndex: Int = -1 + private val removeRunnable = Runnable { binding.llPrizeHint.removeAllViews() } + private val hintPrizeCacheList = ArrayList() + + + private var disposable: Disposable? = null + private val viewModel: FairyViewModel by viewModels() + + companion object { + @JvmStatic + fun start(context: Context) { + val starter = Intent(context, HomeFairyActivity::class.java) + context.startActivity(starter) + } + } + + private val fairyItems by lazy { + listOf( + binding.fairyItem0, binding.fairyItem1, binding.fairyItem2, binding.fairyItem3, + binding.fairyItem4, binding.fairyItem5, binding.fairyItem6, binding.fairyItem7, + binding.fairyItem8, binding.fairyItem9, binding.fairyItem10, binding.fairyItem11 + ) + } + + @SuppressLint("SetTextI18n") + override fun init() { + //這裏的height用MATCH_PARENT狀態欄會被頂上去,不知道什麼鬼 + window.setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + ScreenUtil.screenHeight - ScreenUtil.getStatusBarHeight(this) + ) + window.setGravity(Gravity.BOTTOM) + binding.fairyItem0.isSelected = true + looperHintPrize() + binding.tvKeyNum.setOnClickListener { + FairyDialogWebViewActivity.start(this, UriProvider.getFairyKey()) + } + binding.ivMyFairy.setOnClickListener { + MyFairyDialog.newInstance().show(this) + } + binding.ivFairyTreasure.setOnClickListener { + ForestFairyDialog.newInstance().show(this) + } + binding.ivOpen1.setOnClickListener { + if (checkKeyNum(1)) { + rotatePrize() + viewModel.drawFairy(1) + } + + } + binding.ivOpen10.setOnClickListener { + if (checkKeyNum(10)) { + rotatePrize() + viewModel.drawFairy(10) + } + } + + binding.ivOpen100.setOnClickListener { + if (checkKeyNum(100)) { + rotatePrize() + viewModel.drawFairy(100) + } + } + binding.rootView.setOnClickListener { finish() } + binding.viewBg.setOnClickListener { + //do nothing + } + + binding.ivMore.setOnClickListener { + val popupWindow = HomeMorePopupWindow(context) + popupWindow.show(binding.ivMore, Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL) + } + + binding.viewPrizeClick.setOnClickListener { + if (disposable?.isDisposed == false && targetIndex != -1) { + fairyItems[selectIndex].isSelected = false + fairyItems[targetIndex].isSelected = true + selectIndex = targetIndex + targetIndex = -1 + HomePrizeDialog.newInstance().show(context) + disposable?.dispose() + } + } + + viewModel.prizeInfoListLiveData.observe(this) { + it?.forEachIndexed { index, prizeInfo -> + if (index < fairyItems.size) { + fairyItems[index].setPrizeInfo(prizeInfo) + } + } + } + + viewModel.resultLiveData.observe(this) { event -> + event?.getContentIfNotHandled()?.let { + targetIndex = viewModel.prizeInfoListLiveData.value + ?.indexOfFirst { prize -> + it[0].itemIndex == prize.itemIndex + } ?: -2 + if (targetIndex == -2) { + viewModel.initPrizeInfoList() + } + hintPrizeCacheList.addAll(it.filter { prizeInfo -> prizeInfo.rewardLevel >= 3 }) + } ?: run { + targetIndex = -1 + disposable?.dispose() + } + } + + viewModel.drawInfoLiveData.observe(this) { + it?.let { + binding.tvKeyNum.text = it.drawTicketNum.toString() + binding.tvCurrentLuckyValue.text = it.luckyNum.toString() + + binding.tvShortLuckyValue.text = + SpannableBuilder() + .append("幸運值達到", ForegroundColorSpan("#59FDFF".toColorInt())) + .append("${it.needLuckyNum}", ForegroundColorSpan("#FFE8AA".toColorInt())) + .append("后,下次奪寶獲贈精靈球", ForegroundColorSpan("#59FDFF".toColorInt())) + .build() + binding.ivLuckyStone.post { + val drawable = + CustomDrawable( + ContextCompat.getDrawable( + this, + R.drawable.treasure_fairy_ic_lucky_stone + )!! + ) + val path = Path() + path.addRect( + 0f, + 0f, + binding.ivLuckyStone.width.toFloat(), + binding.ivLuckyStone.height * + (1 - it.luckyNum / it.needLuckyNum.toFloat().coerceAtLeast(1f)), + Path.Direction.CW + ) + drawable.setSrcPath(path) + binding.ivLuckyStone.setImageDrawable(drawable) + } + } + } + + viewModel.showGetKeyLiveData.observe(this) { + it.getContentIfNotHandled()?.let { + DialogManager(context).showOkCancelDialog("購買限時裝扮活動奪寶券", "去參与", "取消") { + FairyDialogWebViewActivity.start(context, UriProvider.getFairyKey()) + } + } + } + } + + private fun checkKeyNum(num: Int): Boolean { + StatisticManager.Instance().onEvent( + StatisticsProtocol.EVENT_TREASURE_ELF_LOTTERY_CLICK, "奪寶精靈抽獎點擊", + mapOf("open_count" to "${num}次") + ) + val keyNum = binding.tvKeyNum.text.toString().toInt() + if (keyNum >= num) { + return true + } + DialogManager(context).showOkCancelDialog("購買限時裝扮活動奪寶券", "去參与", "取消") { + FairyDialogWebViewActivity.start(context, UriProvider.getFairyKey()) + } + return false + } + + override fun onResume() { + super.onResume() + viewModel.initDrawInfo() + } + + private fun rotatePrize() { + enabledOpenBtn(false) + targetIndex = -1 + var minCount = 0 + disposable?.dispose() + disposable = Observable.interval(70, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .compose(bindToLifecycle()) + .doOnNext { + fairyItems[selectIndex].isSelected = false + selectIndex++ + minCount++ + if (selectIndex == fairyItems.size) selectIndex = 0 + if (targetIndex != -2) { + fairyItems[selectIndex].isSelected = true + } + if ((selectIndex == targetIndex || targetIndex == -2) && minCount >= 24) { + HomePrizeDialog.newInstance().show(context) + disposable?.dispose() + } + } + .doFinally { enabledOpenBtn(true) } + .subscribe() + } + + private fun enabledOpenBtn(enable: Boolean) { + binding.ivOpen1.isEnabled = enable + binding.ivOpen10.isEnabled = enable + binding.ivOpen100.isEnabled = enable + } + + @SuppressLint("CheckResult") + private fun looperHintPrize() { + Observable.interval(0, 250, TimeUnit.MILLISECONDS) + .compose(bindToLifecycle()) + .observeOn(AndroidSchedulers.mainThread()) + .filter { hintPrizeCacheList.size > 0 } + .subscribe( + { + addPrizeHintView(hintPrizeCacheList.removeAt(0)) + }) { looperHintPrize() } //出錯了繼續looper...... + } + + private fun addPrizeHintView(prizeInfo: PrizeInfo) { + binding.llPrizeHint.removeCallbacks(removeRunnable) + binding.llPrizeHint.postDelayed(removeRunnable, 3000) + val linearLayout = + LayoutInflater.from(context) + .inflate(R.layout.item_fairy_prize_hint, null) as LinearLayout + val layoutParams = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ScreenUtil.dip2px(25f)) + layoutParams.setMargins(0, 0, 0, ScreenUtil.dip2px(5f)) + linearLayout.layoutParams = layoutParams + linearLayout.setBackgroundResource(R.drawable.treasure_fairy_bg_big_prize) + linearLayout.setPadding(ScreenUtil.dip2px(10f), 0, ScreenUtil.dip2px(10f), 0) + binding.llPrizeHint.addView(linearLayout) + if (binding.llPrizeHint.childCount > 6) { + binding.llPrizeHint.removeViewAt(0) + } + for (i in 0 until binding.llPrizeHint.childCount) { + ObjectAnimator.ofFloat( + binding.llPrizeHint.getChildAt(i), + "translationY", + ScreenUtil.dip2px(25f).toFloat(), + 0f + ) + .setDuration(200) + .start() + } + (linearLayout.findViewById(R.id.tv_prize_name) as TextView).text = + prizeInfo.rewardName + (linearLayout.findViewById(R.id.tv_prize_num) as TextView).text = + "x" + prizeInfo.rewardNum + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeDebrisAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeDebrisAdapter.kt new file mode 100644 index 000000000..bc94e2ef3 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeDebrisAdapter.kt @@ -0,0 +1,19 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2 +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo + +class ExchangeDebrisAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_exchange_debris) { + + override fun convert(helper: BaseViewHolder, item: ExchangeGiftInfo) { + ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_prize_icon), item.rewardPicUrl) + helper.setText(R.id.tv_prize_name, item.getPrizeName()) + helper.setText(R.id.tv_need_num, "${item.expendNum}") + helper.addOnClickListener(R.id.tv_exchange) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeDebrisRecordAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeDebrisRecordAdapter.kt new file mode 100644 index 000000000..41f7b37f6 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeDebrisRecordAdapter.kt @@ -0,0 +1,24 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo +import java.text.SimpleDateFormat +import java.util.* + +class ExchangeDebrisRecordAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_exchange_debris_record) { + + private val formatYear = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + private val formatHour = SimpleDateFormat("HH:mm:ss", Locale.CHINA) + + override fun convert(helper: BaseViewHolder, item: ExchangeGiftInfo) { + + helper.setText(R.id.tv_time_year, formatYear.format(item.createTime)) + helper.setText(R.id.tv_time_hour, formatHour.format(item.createTime)) + helper.setText(R.id.tv_prize_name, item.rewardName) + helper.setText(R.id.tv_prize_num, item.getPrizeUnit()) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeFairyRecordAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeFairyRecordAdapter.kt new file mode 100644 index 000000000..b704584df --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeFairyRecordAdapter.kt @@ -0,0 +1,30 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo +import java.text.SimpleDateFormat +import java.util.* + +class ExchangeFairyRecordAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_exchange_fairy_record) { + + private val formatYear = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + private val formatHour = SimpleDateFormat("HH:mm:ss", Locale.CHINA) + + override fun convert(helper: BaseViewHolder, item: ExchangeGiftInfo) { + + helper.setText(R.id.tv_time_year, formatYear.format(item.createTime)) + helper.setText(R.id.tv_time_hour, formatHour.format(item.createTime)) + helper.setText(R.id.tv_prize_name, "${item.rewardName}x${item.rewardNum}") + helper.setText( + R.id.tv_prize_type, when (item.convertLevel) { + 1 -> mContext.getString(R.string.fairy_primary_call) + 2 -> mContext.getString(R.string.fairy_epic_call) + else -> mContext.getString(R.string.fairy_legend_call) + } + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeFairyResultAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeFairyResultAdapter.kt new file mode 100644 index 000000000..7576b9af5 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ExchangeFairyResultAdapter.kt @@ -0,0 +1,17 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2 +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo + +class ExchangeFairyResultAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_forest_prize_single) { + + override fun convert(helper: BaseViewHolder, item: ExchangeGiftInfo) { + ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_prize_icon), item.rewardPicUrl) + helper.setText(R.id.tv_prize_name, item.rewardName) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestIndicatorAdapter.java b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestIndicatorAdapter.java new file mode 100644 index 000000000..fbfa9b954 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestIndicatorAdapter.java @@ -0,0 +1,96 @@ +package com.yizhuan.erban.treasurefairy.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.Gravity; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.yizhuan.erban.R; +import com.yizhuan.erban.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView; +import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil; +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter; +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator; + +import java.util.List; + +public class ForestIndicatorAdapter extends CommonNavigatorAdapter { + private final Context mContext; + private final List mTitleList; + + private int textSize = 15; + private float minScale = 1f; + private OnItemSelectListener mOnItemSelectListener; + + public ForestIndicatorAdapter(Context context, List charSequences) { + this.mContext = context; + this.mTitleList = charSequences; + } + + @Override + public int getCount() { + return mTitleList == null ? 0 : mTitleList.size(); + } + + @Override + public IPagerTitleView getTitleView(Context context, final int i) { + ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true); + scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.white)); + scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.white)); + scaleTransitionPagerTitleView.setMinScale(minScale); + scaleTransitionPagerTitleView.setTextSize(textSize); + int padding = UIUtil.dip2px(context, 12); + scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0); + scaleTransitionPagerTitleView.setText(mTitleList.get(i)); + scaleTransitionPagerTitleView.setOnClickListener(view -> { + if (mOnItemSelectListener != null) { + mOnItemSelectListener.onItemSelect(i, scaleTransitionPagerTitleView); + } + + }); + return scaleTransitionPagerTitleView; + } + + @Override + public IPagerIndicator getIndicator(Context context) { + LinePagerIndicator indicator = new LinePagerIndicator(context); + indicator.setMode(LinePagerIndicator.MODE_EXACTLY); + indicator.setLineHeight(UIUtil.dip2px(mContext, 4)); + indicator.setRoundRadius(UIUtil.dip2px(mContext, 2)); + indicator.setLineWidth(UIUtil.dip2px(mContext, 60)); + indicator.setColors(Color.parseColor("#69FFEB"),Color.parseColor("#EAFF89")); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.BOTTOM; + indicator.setLayoutParams(lp); + return indicator; + } + + public int getTextSize() { + return textSize; + } + + public void setTextSize(int textSize) { + this.textSize = textSize; + } + + public float getMinScale() { + return minScale; + } + + public void setMinScale(float minScale) { + this.minScale = minScale; + } + + public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) { + mOnItemSelectListener = onItemSelectListener; + } + + public interface OnItemSelectListener { + void onItemSelect(int position, TextView view); + } +} diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizeAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizeAdapter.kt new file mode 100644 index 000000000..59e652a2e --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizeAdapter.kt @@ -0,0 +1,24 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class ForestPrizeAdapter(val isSingle: Boolean = false) : + BaseQuickAdapter( + if (isSingle) { + R.layout.treasure_fairy_item_forest_prize_single + } else { + R.layout.treasure_fairy_item_forest_prize + } + ) { + + override fun convert(helper: BaseViewHolder, item: PrizeInfo) { + helper.getView(R.id.iv_prize_icon).load(item.rewardPicUrl) + helper.setText(R.id.tv_prize_name, "${item.rewardName}x${item.rewardNum}") + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizesChildAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizesChildAdapter.kt new file mode 100644 index 000000000..063c87631 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizesChildAdapter.kt @@ -0,0 +1,18 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class ForestPrizesChildAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_forest_prizes_child) { + + override fun convert(helper: BaseViewHolder, item: PrizeInfo) { + helper.getView(R.id.iv_prize_icon).load(item.rewardPicUrl) + helper.setText(R.id.tv_prize_name, item.rewardName) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizesRecordAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizesRecordAdapter.kt new file mode 100644 index 000000000..6c8e10c56 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/ForestPrizesRecordAdapter.kt @@ -0,0 +1,30 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo +import java.text.SimpleDateFormat +import java.util.* + +class ForestPrizesRecordAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_forest_prizes_record) { + + private val formatYear = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + private val formatHour = SimpleDateFormat("HH:mm:ss", Locale.CHINA) + + override fun convert(helper: BaseViewHolder, item: PrizeInfo) { + + helper.setText(R.id.tv_time_year, formatYear.format(item.drawTime)) + helper.setText(R.id.tv_time_hour, formatHour.format(item.drawTime)) + helper.setText(R.id.tv_prize_name, "${item.rewardName}x${item.rewardNum}") + helper.setText( + R.id.tv_prize_type, when (item.poolLevel) { + 1 -> mContext.getString(R.string.fairy_primary_forest) + 2 -> mContext.getString(R.string.fairy_epic_forest) + else -> mContext.getString(R.string.fairy_legend_forest) + } + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/HomePrizeAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/HomePrizeAdapter.kt new file mode 100644 index 000000000..bdf9db6cb --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/HomePrizeAdapter.kt @@ -0,0 +1,25 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class HomePrizeAdapter(val isSingle: Boolean = false) : + BaseQuickAdapter( + if (isSingle) { + R.layout.treasure_fairy_item_home_prize_single + } else { + R.layout.treasure_fairy_item_home_prize + } + ) { + + override fun convert(helper: BaseViewHolder, item: PrizeInfo) { + helper.getView(R.id.iv_prize_icon).load(item.rewardPicUrl) + helper.setText(R.id.tv_prize_num, "x${item.rewardNum}") + helper.setText(R.id.tv_prize_name, item.rewardName) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/MyFairyFriendsAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/MyFairyFriendsAdapter.kt new file mode 100644 index 000000000..15cff452a --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/MyFairyFriendsAdapter.kt @@ -0,0 +1,20 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.gift.bean.SimpleUserInfo +import com.yizhuan.xchat_android_core.utils.ifNullOrEmpty + +class MyFairyFriendsAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_my_fairy_friend) { + + override fun convert(helper: BaseViewHolder, item: SimpleUserInfo) { + helper.getView(R.id.iv_avatar).load(item.avatar) + helper.setText(R.id.tv_nickname, item.nick) + helper.setText(R.id.tv_desc, item.userDesc.ifNullOrEmpty { mContext.getString(R.string.fairy_default_signature) }) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/MyFairyRecordAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/MyFairyRecordAdapter.kt new file mode 100644 index 000000000..59839e9ee --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/MyFairyRecordAdapter.kt @@ -0,0 +1,27 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.SendFairyInfo +import java.text.SimpleDateFormat +import java.util.* + +class MyFairyRecordAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_my_fairy_record) { + + private val format = SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒", Locale.CHINA) + + override fun convert(helper: BaseViewHolder, item: SendFairyInfo) { + helper.getView(R.id.iv_fairy_icon).load(item.elfPicUrl) + helper.setText(R.id.tv_record_time, format.format(item.createTime)) + val isSend = item.type == 2 + helper.setText( + R.id.tv_content, + "${if (isSend) "你" else item.targetNick}贈送${if (isSend) "" else "了你"}一張“${item.elfName}”精靈卡" + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyAdapter.kt new file mode 100644 index 000000000..c175545a5 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyAdapter.kt @@ -0,0 +1,25 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo +import java.util.* + +class TestFairyAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_test_fairy) { + + + override fun convert(helper: BaseViewHolder, item: FairyInfo) { + helper.getView(R.id.iv_fairy_icon).load(item.elfPicUrl) + helper.setText(R.id.tv_fairy_num, "${item.selectedNum}/${item.elfNum}") + helper.setText(R.id.tv_fairy_name, item.elfName) + helper.setBackgroundRes( + R.id.ll_root, + if (item.selectedNum > 0) R.drawable.treasure_fairy_bg_test_fairy_item_select else 0 + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyRecordAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyRecordAdapter.kt new file mode 100644 index 000000000..f182b4582 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyRecordAdapter.kt @@ -0,0 +1,33 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.xchat_android_core.treasurefairy.TestFairyRecordInfo +import java.text.SimpleDateFormat +import java.util.* + +class TestFairyRecordAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_test_fairy_record) { + + private val formatYear = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + private val formatHour = SimpleDateFormat("HH:mm:ss", Locale.CHINA) + + override fun convert(helper: BaseViewHolder, item: TestFairyRecordInfo) { + + helper.setText(R.id.tv_time_year, formatYear.format(item.createTime)) + helper.setText(R.id.tv_time_hour, formatHour.format(item.createTime)) + helper.setText(R.id.tv_prize_name, item.elfName) + helper.setText( + R.id.tv_prize_type, when (item.elfLevel) { + 2 -> "史詩試煉" + else -> "傳說試煉" + } + ) + + helper.setText( + R.id.tv_fairy_infos, + item.expendList.joinToString(separator = "\n") { "${it.elfName}x${it.elfNum}" }) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyResultAdapter.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyResultAdapter.kt new file mode 100644 index 000000000..174132203 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/adapter/TestFairyResultAdapter.kt @@ -0,0 +1,18 @@ +package com.yizhuan.erban.treasurefairy.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo + +class TestFairyResultAdapter : + BaseQuickAdapter(R.layout.treasure_fairy_item_forest_prize_single) { + + override fun convert(helper: BaseViewHolder, item: FairyInfo) { + helper.getView(R.id.iv_prize_icon).load(item.elfPicUrl) + helper.setText(R.id.tv_prize_name, item.elfName) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeFairyDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeFairyDialog.kt new file mode 100644 index 000000000..3aa8d107d --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeFairyDialog.kt @@ -0,0 +1,67 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.fragment.app.activityViewModels +import androidx.viewpager.widget.ViewPager +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomVPAdapter +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogExchangeBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.fragment.ExchangeDebrisFragment +import com.yizhuan.erban.treasurefairy.fragment.ExchangeFairyFragment + +class ExchangeFairyDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.BOTTOM + + companion object { + fun newInstance(): ExchangeFairyDialog { + val args = Bundle() + val fragment = ExchangeFairyDialog() + fragment.arguments = args + return fragment + } + } + + private val viewModel: FairyViewModel by activityViewModels() + + @SuppressLint("CheckResult") + override fun init() { + binding.ivBack.setOnClickListener { + dismissAllowingStateLoss() + } + binding.tvRecord.setOnClickListener { + ExchangeRecordDialog.newInstance().show(context) + } + binding.rg.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.rb_epic -> binding.viewPager.currentItem = 0 + R.id.rb_legend -> binding.viewPager.currentItem = 1 + } + } + binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { + override fun onPageSelected(position: Int) { + when (position) { + 0 -> binding.rg.check(R.id.rb_epic) + 1 -> binding.rg.check(R.id.rb_legend) + } + } + }) + + binding.viewPager.adapter = RoomVPAdapter( + childFragmentManager, + listOf( + ExchangeFairyFragment.newInstance(), + ExchangeDebrisFragment.newInstance() + ) + ) + viewModel.getMyFairyInfo() + viewModel.cleanTestParam() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeFairyResultDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeFairyResultDialog.kt new file mode 100644 index 000000000..1f375567f --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeFairyResultDialog.kt @@ -0,0 +1,59 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogTestFairyResultBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.ExchangeFairyResultAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo + +class ExchangeFairyResultDialog : BaseDialog() { + + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: ExchangeFairyResultAdapter + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var height = WindowManager.LayoutParams.WRAP_CONTENT + override var gravity = Gravity.CENTER + private val viewModel: FairyViewModel by activityViewModels() + + companion object { + fun newInstance(): ExchangeFairyResultDialog { + val args = Bundle() + val fragment = ExchangeFairyResultDialog() + fragment.arguments = args + return fragment + } + } + + @SuppressLint("CheckResult") + override fun init() { + binding.tvClose.setOnClickListener { + dismissAllowingStateLoss() + } + val prizeInfoList = viewModel.exchangeGiftLiveData.value + if (prizeInfoList == null) { + dismissAllowingStateLoss() + return + } + + prizeAdapter = ExchangeFairyResultAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setRecyclerView(binding.recyclerView) + .setLayoutManager( + LinearLayoutManager(context) + ) + .build() + + rvDelegate.setNewData(arrayListOf(prizeInfoList.peekContent())) + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeRecordDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeRecordDialog.kt new file mode 100644 index 000000000..c0a84580b --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ExchangeRecordDialog.kt @@ -0,0 +1,59 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.viewpager.widget.ViewPager +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomVPAdapter +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogExchangeRecordBinding +import com.yizhuan.erban.treasurefairy.fragment.ExchangeDebrisRecordFragment +import com.yizhuan.erban.treasurefairy.fragment.ExchangeFairyRecordFragment + +class ExchangeRecordDialog : BaseDialog() { + + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var height = WindowManager.LayoutParams.WRAP_CONTENT + override var gravity = Gravity.CENTER + + companion object { + fun newInstance(): ExchangeRecordDialog { + val args = Bundle() + val fragment = ExchangeRecordDialog() + fragment.arguments = args + return fragment + } + } + + @SuppressLint("CheckResult") + override fun init() { + binding.rootView.setOnClickListener { + dismissAllowingStateLoss() + } + binding.rg.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.rb_prizes -> binding.viewPager.currentItem = 0 + R.id.rb_record -> binding.viewPager.currentItem = 1 + } + } + binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { + override fun onPageSelected(position: Int) { + when (position) { + 0 -> binding.rg.check(R.id.rb_prizes) + 1 -> binding.rg.check(R.id.rb_record) + } + } + }) + binding.viewPager.adapter = RoomVPAdapter( + childFragmentManager, + listOf( + ExchangeFairyRecordFragment.newInstance(), + ExchangeDebrisRecordFragment.newInstance() + ) + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestFairyDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestFairyDialog.kt new file mode 100644 index 000000000..967a94c96 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestFairyDialog.kt @@ -0,0 +1,176 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.core.view.isInvisible +import androidx.fragment.app.activityViewModels +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogForestBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.ui.utils.loadAvatar +import com.yizhuan.xchat_android_core.utils.subAndReplaceDot +import com.yizhuan.xchat_android_core.utils.toIntOrDef +import com.yizhuan.xchat_android_core.utils.toast + +class ForestFairyDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.BOTTOM + private val viewModel: FairyViewModel by activityViewModels() + private var currentType = 1 + + private val showResultRunnable = Runnable { + if (canShowResult) { + canShowResult = false + enabledOpenBtn(true) + ForestPrizeDialog.newInstance().show(context) + } else { + resultNotShowed = true + } + } + private var canShowResult = false + private var resultNotShowed = false + + companion object { + fun newInstance(): ForestFairyDialog { + val args = Bundle() + val fragment = ForestFairyDialog() + fragment.arguments = args + return fragment + } + + const val BASE = 1 + const val EPIC = 2 + const val LEGEND = 3 + } + + + @SuppressLint("CheckResult") + override fun init() { + binding.ivBack.setOnClickListener { + dismissAllowingStateLoss() + } + binding.ivRecord.setOnClickListener { + ForestRecordDialog.newInstance().show(context) + } + binding.ivMyFairy.setOnClickListener { + MyFairyDialog.newInstance().show(context) + } + binding.ivFairyTest.setOnClickListener { + TestFairyDialog.newInstance().show(context) + } + binding.ivFairyStore.setOnClickListener { + ExchangeFairyDialog.newInstance().show(context) + } + + binding.ivPrevious.setOnClickListener { + currentType-- + switchType() + } + binding.ivNext.setOnClickListener { + currentType++ + switchType() + } + binding.viewBgGrab1.setOnClickListener { + if (checkBallNum(1)) { + enabledOpenBtn(false) + binding.animView.startPlay(requireContext().assets, "vap/fairy_anim_once.mp4") + binding.animView.postDelayed(showResultRunnable, 1900) + viewModel.drawForestFairy(1, currentType) + } + } + + binding.viewBgGrab10.setOnClickListener { + if (checkBallNum(10)) { + enabledOpenBtn(false) + binding.animView.startPlay(requireContext().assets, "vap/fairy_anim_ten.mp4") + binding.animView.postDelayed(showResultRunnable, 1900) + viewModel.drawForestFairy(10, currentType) + } + } + + binding.animView.setOnClickListener { + if (canShowResult) { + binding.animView.removeCallbacks(showResultRunnable) + showResultRunnable.run() + } + } + + viewModel.drawForestLiveData.observe(viewLifecycleOwner) { + it?.getContentIfNotHandled()?.let { + canShowResult = true + if (resultNotShowed) { + showResultRunnable.run() + } + } ?: run { + enabledOpenBtn(true) + } + } + + viewModel.getForestInfo() + + viewModel.forestInfoLiveData.observe(viewLifecycleOwner) { + it?.let { + binding.ivAvatar.loadAvatar(it.avatar) + binding.tvNickname.text = it.nick.subAndReplaceDot(7) + binding.tvKeyNumBase.text = it.lowBallNum + binding.tvKeyNumEpic.text = it.middleBallNum + binding.tvKeyNumLegend.text = it.highBallNum + } + } + + } + + private fun checkBallNum(openNum: Int): Boolean { + val ballNum = viewModel.forestInfoLiveData.value?.let { + when (currentType) { + BASE -> it.lowBallNum.toIntOrDef(0) + EPIC -> it.middleBallNum.toIntOrDef(0) + else -> it.highBallNum.toIntOrDef(0) + } + } ?: 0 + return if (ballNum >= openNum) { + true + } else { + "精靈球數量不足".toast() + false + } + } + + private fun enabledOpenBtn(enable: Boolean) { + binding.viewBgGrab1.isEnabled = enable + binding.viewBgGrab10.isEnabled = enable + } + + @SuppressLint("SetTextI18n") + private fun switchType() { + when (currentType) { + BASE -> { + binding.ivPrevious.isInvisible = true + binding.tvGrabText1.text = "(初級球X1)" + binding.tvGrabText10.text = "(初級球X10)" + binding.tvTips.text = "使用初級球有一定幾率抓到初級精靈" + binding.viewBgForestBase.setBackgroundResource(R.drawable.treasure_fairy_bg_forest_base) + } + EPIC -> { + binding.ivNext.isInvisible = false + binding.ivPrevious.isInvisible = false + binding.tvGrabText1.text = "(超級球X1)" + binding.tvGrabText10.text = "(超級球X10)" + binding.tvTips.text = "使用超級球有一定幾率抓到史詩精靈" + binding.viewBgForestBase.setBackgroundResource(R.drawable.treasure_fairy_bg_forest_epic) + } + LEGEND -> { + binding.ivNext.isInvisible = true + binding.tvGrabText1.text = "(大師球X1)" + binding.tvGrabText10.text = "(大師球X10)" + binding.tvTips.text = "使用大師球必定抓到傳說精靈" + binding.viewBgForestBase.setBackgroundResource(R.drawable.treasure_fairy_bg_forest_legend) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestPrizeDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestPrizeDialog.kt new file mode 100644 index 000000000..0d424f5d2 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestPrizeDialog.kt @@ -0,0 +1,86 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.core.view.updateLayoutParams +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.netease.nim.uikit.common.util.sys.ScreenUtil +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogForestPrizeBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.ForestPrizeAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class ForestPrizeDialog : BaseDialog() { + + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: ForestPrizeAdapter + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var height = WindowManager.LayoutParams.WRAP_CONTENT + override var gravity = Gravity.CENTER + private val viewModel: FairyViewModel by activityViewModels() + + companion object { + fun newInstance(isFairy: Boolean = false): ForestPrizeDialog { + val args = Bundle() + args.putBoolean("isFairy", isFairy) + val fragment = ForestPrizeDialog() + fragment.arguments = args + return fragment + } + } + + @SuppressLint("CheckResult") + override fun init() { + binding.tvClose.setOnClickListener { + dismissAllowingStateLoss() + } + val prizeInfoList = viewModel.drawForestLiveData.value?.peekContent() + if (prizeInfoList.isNullOrEmpty()) return + val isSingle = prizeInfoList.size == 1 + val hasSurprise = prizeInfoList.find { it.propType == 1 } != null + val isFairy = + requireArguments().getBoolean("isFairy", true) || !hasSurprise + if (isFairy) { + viewModel.cleanDrawForestLiveData() + } + binding.tvTitle.text = if (isFairy) "恭喜獲得" else "意外發現" + if (!isFairy && !isSingle && hasSurprise) { + newInstance(true).show(context) + } + + val showPrizeInfoList = + prizeInfoList.filter { if (isFairy) (it.propType != 1) else (it.propType == 1) } + val isShowDateSingle = showPrizeInfoList.size == 1 + if (!isShowDateSingle) { + binding.viewBg.updateLayoutParams { + width = ScreenUtil.dip2px(318f) + height = ScreenUtil.dip2px(383f) + } + binding.viewBg.setBackgroundResource(R.drawable.treasure_fairy_bg_forest_prize) + } + prizeAdapter = ForestPrizeAdapter(isShowDateSingle) + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setRecyclerView(binding.recyclerView) + .setLayoutManager( + if (isShowDateSingle) { + LinearLayoutManager(context) + } else { + GridLayoutManager(context, 3, LinearLayoutManager.VERTICAL, false) + } + ) + .build() + + rvDelegate.setNewData(showPrizeInfoList) + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestRecordDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestRecordDialog.kt new file mode 100644 index 000000000..4c5622677 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/ForestRecordDialog.kt @@ -0,0 +1,59 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.viewpager.widget.ViewPager +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomVPAdapter +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogForestRecordBinding +import com.yizhuan.erban.treasurefairy.fragment.ForestPrizesFragment +import com.yizhuan.erban.treasurefairy.fragment.ForestRecordFragment + +class ForestRecordDialog : BaseDialog() { + + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var height = WindowManager.LayoutParams.WRAP_CONTENT + override var gravity = Gravity.CENTER + + companion object { + fun newInstance(): ForestRecordDialog { + val args = Bundle() + val fragment = ForestRecordDialog() + fragment.arguments = args + return fragment + } + } + + @SuppressLint("CheckResult") + override fun init() { + binding.rootView.setOnClickListener { + dismissAllowingStateLoss() + } + binding.rg.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.rb_prizes -> binding.viewPager.currentItem = 0 + R.id.rb_record -> binding.viewPager.currentItem = 1 + } + } + binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { + override fun onPageSelected(position: Int) { + when (position) { + 0 -> binding.rg.check(R.id.rb_prizes) + 1 -> binding.rg.check(R.id.rb_record) + } + } + }) + binding.viewPager.adapter = RoomVPAdapter( + childFragmentManager, + listOf( + ForestPrizesFragment.newInstance(), + ForestRecordFragment.newInstance(), + ) + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/HomeMorePopupWindow.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/HomeMorePopupWindow.kt new file mode 100644 index 000000000..cba2f42d7 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/HomeMorePopupWindow.kt @@ -0,0 +1,37 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.content.Context +import android.graphics.Color +import android.view.View +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.webview.FairyDialogWebViewActivity +import com.yizhuan.xchat_android_core.UriProvider +import razerdp.basepopup.BasePopupWindow + +class HomeMorePopupWindow(private val context: Context) : BasePopupWindow(context) { + + init { + contentView = createPopupById(R.layout.treasure_fairy_popup_window_home_more) + setOutSideDismiss(true) + setBackgroundColor(Color.TRANSPARENT) + setPopupAnimationStyle(-1) + findViewById(R.id.tv_rule).setOnClickListener { + FairyDialogWebViewActivity.start(context, UriProvider.getFairyRule()) + dismiss() + } + findViewById(R.id.tv_record).setOnClickListener { + FairyDialogWebViewActivity.start(context, UriProvider.getFairyRecord()) + dismiss() + } + findViewById(R.id.tv_rank).setOnClickListener { + FairyDialogWebViewActivity.start(context, UriProvider.getFairySuperior()) + dismiss() + } + } + + fun show(anchor: View?, popupGravity: Int) { + setPopupGravity(popupGravity) + showPopupWindow(anchor) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/HomePrizeDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/HomePrizeDialog.kt new file mode 100644 index 000000000..589b39457 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/HomePrizeDialog.kt @@ -0,0 +1,58 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogHomePrizeBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.HomePrizeAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class HomePrizeDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.BOTTOM + + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: HomePrizeAdapter + private val viewModel: FairyViewModel by activityViewModels() + + companion object { + fun newInstance(): HomePrizeDialog { + val args = Bundle() + val fragment = HomePrizeDialog() + fragment.arguments = args + return fragment + } + } + + @SuppressLint("CheckResult") + override fun init() { + binding.rootView.setOnClickListener { + dismissAllowingStateLoss() + } + val prizeInfoList = viewModel.resultLiveData.value?.peekContent() + if (prizeInfoList.isNullOrEmpty()) return + val isSingle = prizeInfoList.size == 1 + prizeAdapter = HomePrizeAdapter(isSingle) + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setRecyclerView(binding.recyclerView) + .setLayoutManager( + if (isSingle) { + LinearLayoutManager(context) + } else { + GridLayoutManager(context, 4, LinearLayoutManager.VERTICAL, false) + } + ) + .build() + rvDelegate.setNewData(prizeInfoList) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairyDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairyDialog.kt new file mode 100644 index 000000000..53b39f1c6 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairyDialog.kt @@ -0,0 +1,73 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.fragment.app.activityViewModels +import androidx.viewpager.widget.ViewPager +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomVPAdapter +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogMyFairyBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.fragment.MyFairyFragment +import com.yizhuan.erban.treasurefairy.view.MyFairyItemView +import com.yizhuan.xchat_android_core.DemoCache + +class MyFairyDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.BOTTOM + + companion object { + fun newInstance(): MyFairyDialog { + val args = Bundle() + val fragment = MyFairyDialog() + fragment.arguments = args + return fragment + } + } + + private val viewModel: FairyViewModel by activityViewModels() + + @SuppressLint("CheckResult") + override fun init() { + binding.ivBack.setOnClickListener { + dismissAllowingStateLoss() + } + binding.ivRecord.setOnClickListener { + MyFairyRecordDialog.newInstance().show(context) + } + binding.rg.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.rb_base -> binding.viewPager.currentItem = 0 + R.id.rb_epic -> binding.viewPager.currentItem = 1 + R.id.rb_legend -> binding.viewPager.currentItem = 2 + } + } + binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { + override fun onPageSelected(position: Int) { + when (position) { + 0 -> binding.rg.check(R.id.rb_base) + 1 -> binding.rg.check(R.id.rb_epic) + 2 -> binding.rg.check(R.id.rb_legend) + } + DemoCache.saveMyFairyIndex(position) + } + }) + binding.viewPager.adapter = RoomVPAdapter( + childFragmentManager, + listOf( + MyFairyFragment.newInstance(MyFairyItemView.BASE), + MyFairyFragment.newInstance(MyFairyItemView.EPIC), + MyFairyFragment.newInstance(MyFairyItemView.LEGEND) + ) + ) + + binding.viewPager.setCurrentItem(DemoCache.readMyFairyIndex(), false) + + viewModel.getMyFairyInfo() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairyRecordDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairyRecordDialog.kt new file mode 100644 index 000000000..50dac2b57 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairyRecordDialog.kt @@ -0,0 +1,62 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyDialogMyFairyRecordBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.MyFairyRecordAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.SendFairyInfo + +class MyFairyRecordDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.CENTER + + companion object { + fun newInstance(): MyFairyRecordDialog { + val args = Bundle() + val fragment = MyFairyRecordDialog() + fragment.arguments = args + return fragment + } + } + + private var page = 1 + private val pageSize = 20 + private lateinit var rvDelegate: RVDelegate + private lateinit var recordAdapter: MyFairyRecordAdapter + private val viewModel: FairyViewModel by activityViewModels() + + @SuppressLint("CheckResult") + override fun init() { + + recordAdapter = MyFairyRecordAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(recordAdapter) + .setRecyclerView(binding.recyclerView) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無記錄")) + .setLayoutManager(LinearLayoutManager(context)) + .build() + + viewModel.sendFairyRecordLiveData.observe(viewLifecycleOwner) { + rvDelegate.loadData(it) + } + + recordAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) + + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + page = if (isRefresh) 1 else (page + 1) + viewModel.getSendFairyList(page, pageSize) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySearchFriendsDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySearchFriendsDialog.kt new file mode 100644 index 000000000..ee922dd07 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySearchFriendsDialog.kt @@ -0,0 +1,62 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.core.widget.doAfterTextChanged +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogMyFairySearchFriendBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.MyFairyFriendsAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.gift.bean.SimpleUserInfo +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo + +class MyFairySearchFriendsDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.BOTTOM + + companion object { + fun newInstance(fairyInfo: FairyInfo, isSend: Boolean): MyFairySearchFriendsDialog { + val args = Bundle() + args.putSerializable("fairyInfo", fairyInfo) + args.putBoolean("isSend", isSend) + val fragment = MyFairySearchFriendsDialog() + fragment.arguments = args + return fragment + } + } + + private lateinit var rvDelegate: RVDelegate + private lateinit var friendsAdapter: MyFairyFriendsAdapter + private val viewModel: FairyViewModel by activityViewModels() + + @SuppressLint("CheckResult") + override fun init() { + binding.ivBack.setOnClickListener { dismissAllowingStateLoss() } + friendsAdapter = MyFairyFriendsAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(friendsAdapter) + .setRecyclerView(binding.recyclerView) + .setLayoutManager(LinearLayoutManager(context)) + .build() + friendsAdapter.setOnItemClickListener { _, _, position -> + friendsAdapter.getItem(position)?.let { + MyFairySendDialog.newInstance(requireArguments(), it).show(context) + } + } + viewModel.getFriendsList() + viewModel.friendsListLiveData.observe(viewLifecycleOwner) { + rvDelegate.setNewData(it) + } + binding.editSearch.doAfterTextChanged { + viewModel.getFriendsList(it?.toString()) + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySendDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySendDialog.kt new file mode 100644 index 000000000..bd8360929 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySendDialog.kt @@ -0,0 +1,79 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.graphics.Color +import android.os.Bundle +import android.text.style.ForegroundColorSpan +import android.view.Gravity +import android.view.WindowManager +import androidx.core.graphics.toColorInt +import androidx.fragment.app.activityViewModels +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogMyFairySendBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.erban.utils.SpannableBuilder +import com.yizhuan.xchat_android_core.gift.bean.SimpleUserInfo +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo + +class MyFairySendDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.CENTER + private var onSendListener: (() -> Unit)? = null + + companion object { + fun newInstance(bundle: Bundle, userInfo: SimpleUserInfo): MyFairySendDialog { + val args = Bundle() + args.putSerializable("userInfo", userInfo) + args.putAll(bundle) + val fragment = MyFairySendDialog() + fragment.arguments = args + return fragment + } + } + + private val viewModel: FairyViewModel by activityViewModels() + private val userInfo by lazy { requireArguments().getSerializable("userInfo") as SimpleUserInfo } + private val fairyInfo by lazy { requireArguments().getSerializable("fairyInfo") as FairyInfo } + private val isSend by lazy { requireArguments().getBoolean("isSend") } + + @SuppressLint("CheckResult") + override fun init() { + + binding.ivFairyIcon.load(fairyInfo.elfPicUrl) + binding.tvContent.text = + SpannableBuilder() + .append(if (isSend) "確定贈送”" else "確定向", ForegroundColorSpan(Color.WHITE)) + .append("${userInfo.nick}", ForegroundColorSpan("#FEF8AA".toColorInt())) + .append( + "”${if (isSend) "" else "索要"}1張“${fairyInfo.elfName}”精靈卡嗎?", + ForegroundColorSpan(Color.WHITE) + ) + .build() + binding.tvSend.text = if (isSend) "贈 送" else "索 要" + binding.tvClose.setOnClickListener { + dismissAllowingStateLoss() + } + binding.tvSend.setOnClickListener { + if (isSend) { + viewModel.sendFairy(fairyInfo.elfId, userInfo.uid) + } else { + viewModel.askForFairy(fairyInfo.elfId, userInfo.uid) + } + } + + viewModel.sendFairyLiveData.observe(viewLifecycleOwner) { + if (it.getContentIfNotHandled() == true) { + dismissAllowingStateLoss() + onSendListener?.invoke() + } + } + } + + fun setOnSendListener(onSendListener: () -> Nothing) { + this.onSendListener = onSendListener + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyDialog.kt new file mode 100644 index 000000000..67063a2a6 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyDialog.kt @@ -0,0 +1,68 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.fragment.app.activityViewModels +import androidx.viewpager.widget.ViewPager +import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.adapter.RoomVPAdapter +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogTestFairyBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.fragment.TestFairyFragment +import com.yizhuan.erban.treasurefairy.view.MyFairyItemView + +class TestFairyDialog : BaseDialog() { + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var gravity = Gravity.BOTTOM + + companion object { + fun newInstance(): TestFairyDialog { + val args = Bundle() + val fragment = TestFairyDialog() + fragment.arguments = args + return fragment + } + } + + private val viewModel: FairyViewModel by activityViewModels() + + @SuppressLint("CheckResult") + override fun init() { + binding.ivBack.setOnClickListener { + dismissAllowingStateLoss() + } + binding.tvRecord.setOnClickListener { + TestFairyRecordDialog.newInstance().show(context) + } + binding.rg.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.rb_epic -> binding.viewPager.currentItem = 0 + R.id.rb_legend -> binding.viewPager.currentItem = 1 + } + } + binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { + override fun onPageSelected(position: Int) { + when (position) { + 0 -> binding.rg.check(R.id.rb_epic) + 1 -> binding.rg.check(R.id.rb_legend) + } + viewModel.cleanTestParam() + } + }) + + binding.viewPager.adapter = RoomVPAdapter( + childFragmentManager, + listOf( + TestFairyFragment.newInstance(MyFairyItemView.BASE), + TestFairyFragment.newInstance(MyFairyItemView.EPIC) + ) + ) + viewModel.getMyFairyInfo() + viewModel.cleanTestParam() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyRecordDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyRecordDialog.kt new file mode 100644 index 000000000..f82c7d6f3 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyRecordDialog.kt @@ -0,0 +1,61 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.netease.nim.uikit.common.util.sys.ScreenUtil +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyDialogTestFairyRecordBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.TestFairyRecordAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.TestFairyRecordInfo + +class TestFairyRecordDialog : BaseDialog() { + + + companion object { + fun newInstance(): TestFairyRecordDialog { + val args = Bundle() + val fragment = TestFairyRecordDialog() + fragment.arguments = args + return fragment + } + } + + private var page = 1 + private val pageSize = 20 + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: TestFairyRecordAdapter + private val viewModel: FairyViewModel by activityViewModels() + override var width: Int = ScreenUtil.dip2px(318f) + override var height: Int = ScreenUtil.dip2px(388f) + + + @SuppressLint("CheckResult") + override fun init() { + prizeAdapter = TestFairyRecordAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setPageSize(pageSize) + .setRecyclerView(binding.recyclerView) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無數據")) + .setLayoutManager(LinearLayoutManager(context)) + .build() + + viewModel.testRecordLiveData.observe(viewLifecycleOwner) { + rvDelegate.loadData(it) + } + + prizeAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) + + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + page = if (isRefresh) 1 else (page + 1) + viewModel.getTestFairyRecordList(page, pageSize) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyResultDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyResultDialog.kt new file mode 100644 index 000000000..e295be3e7 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/TestFairyResultDialog.kt @@ -0,0 +1,55 @@ +package com.yizhuan.erban.treasurefairy.dialog + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseDialog +import com.yizhuan.erban.databinding.TreasureFairyDialogTestFairyResultBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.TestFairyResultAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo + +class TestFairyResultDialog : BaseDialog() { + + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: TestFairyResultAdapter + + override var width = WindowManager.LayoutParams.MATCH_PARENT + override var height = WindowManager.LayoutParams.WRAP_CONTENT + override var gravity = Gravity.CENTER + private val viewModel: FairyViewModel by activityViewModels() + + companion object { + fun newInstance(fairyInfo: FairyInfo): TestFairyResultDialog { + val args = Bundle() + args.putSerializable("fairyInfo",fairyInfo) + val fragment = TestFairyResultDialog() + fragment.arguments = args + return fragment + } + } + + private val fairyInfo by lazy { requireArguments().getSerializable("fairyInfo") as FairyInfo } + @SuppressLint("CheckResult") + override fun init() { + binding.tvClose.setOnClickListener { + dismissAllowingStateLoss() + } + prizeAdapter = TestFairyResultAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setRecyclerView(binding.recyclerView) + .setLayoutManager( + LinearLayoutManager(context) + ) + .build() + + rvDelegate.setNewData(arrayListOf(fairyInfo)) + viewModel.cleanTestParam() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeDebrisFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeDebrisFragment.kt new file mode 100644 index 000000000..dc2532b86 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeDebrisFragment.kt @@ -0,0 +1,78 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyFragmentExchangeDebrisBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.ExchangeDebrisAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.erban.ui.utils.loadAvatar +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo +import com.yizhuan.xchat_android_core.user.UserModel +import com.yizhuan.xchat_android_core.utils.subAndReplaceDot +import com.yizhuan.xchat_android_core.utils.toast + +class ExchangeDebrisFragment : + BaseViewBindingFragment() { + + + companion object { + fun newInstance(): ExchangeDebrisFragment { + val args = Bundle() + val fragment = ExchangeDebrisFragment() + fragment.arguments = args + return fragment + } + } + + private val viewModel: FairyViewModel by activityViewModels() + private lateinit var rvDelegate: RVDelegate + private lateinit var debrisAdapter: ExchangeDebrisAdapter + + @SuppressLint("CheckResult") + override fun init() { + debrisAdapter = ExchangeDebrisAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(debrisAdapter) + .setRecyclerView(binding.recyclerView) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無數據")) + .setLayoutManager(GridLayoutManager(context, 2, LinearLayoutManager.VERTICAL, false)) + .build() + viewModel.getDebrisExchangeList() + viewModel.debrisExchangeListLiveData.observe(viewLifecycleOwner) { + rvDelegate.setNewData(it) + } + debrisAdapter.setOnItemChildClickListener { _, _, position -> + debrisAdapter.getItem(position)?.let { + dialogManager.showTipsDialog("您將要兌換“${it.getPrizeName()}”", "兌換") { + viewModel.debrisExchange(it.itemId) + } + } + } + + viewModel.getMyFairyInfo() + + viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) { + it?.let { + binding.tvDebrisNum.text = it.chipNum.toString() + } + } + + UserModel.get().cacheLoginUserInfo?.let { + binding.ivAvatar.loadAvatar(it.avatar) + binding.tvNickname.text = it.nick.subAndReplaceDot(7) + } + + viewModel.debrisExchangeLiveData.observe(viewLifecycleOwner) { + it?.getContentIfNotHandled()?.let { + "兌換成功~".toast() + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeDebrisRecordFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeDebrisRecordFragment.kt new file mode 100644 index 000000000..f2a4c56a8 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeDebrisRecordFragment.kt @@ -0,0 +1,58 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyFragmentExchangeRecordDebrisBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.ExchangeDebrisRecordAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo + +class ExchangeDebrisRecordFragment : BaseViewBindingFragment() { + + + companion object { + fun newInstance(): ExchangeDebrisRecordFragment { + val args = Bundle() + val fragment = ExchangeDebrisRecordFragment() + fragment.arguments = args + return fragment + } + } + + private var page = 1 + private val pageSize = 20 + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: ExchangeDebrisRecordAdapter + private val viewModel: FairyViewModel by activityViewModels() + + + @SuppressLint("CheckResult") + override fun init() { + prizeAdapter = ExchangeDebrisRecordAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setPageSize(pageSize) + .setRecyclerView(binding.recyclerView) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無數據")) + .setLayoutManager(LinearLayoutManager(context)) + .build() + + viewModel.exchangeDebrisRecordLiveData.observe(viewLifecycleOwner) { + rvDelegate.loadData(it) + } + + prizeAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) + + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + page = if (isRefresh) 1 else (page + 1) + viewModel.getExchangeDebrisRecord(page, pageSize) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeFairyFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeFairyFragment.kt new file mode 100644 index 000000000..6ca68ad99 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeFairyFragment.kt @@ -0,0 +1,128 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.core.view.isInvisible +import androidx.fragment.app.activityViewModels +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.databinding.TreasureFairyFragmentExchangeFairyBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.dialog.ExchangeFairyResultDialog +import com.yizhuan.erban.treasurefairy.view.MyFairyItemView +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo +import com.yizhuan.xchat_android_core.treasurefairy.MyFairyInfo + +class ExchangeFairyFragment : BaseViewBindingFragment() { + + + companion object { + fun newInstance(): ExchangeFairyFragment { + val args = Bundle() + val fragment = ExchangeFairyFragment() + fragment.arguments = args + return fragment + } + } + + private val viewModel: FairyViewModel by activityViewModels() + private var fairyType = MyFairyItemView.BASE + private val fairyItems by lazy { + arrayListOf( + binding.fairyItem0, + binding.fairyItem1, + binding.fairyItem2, + binding.fairyItem3, + binding.fairyItem4 + ) + } + + @SuppressLint("CheckResult") + override fun init() { + binding.ivPrevious.setOnClickListener { + fairyType-- + switchLevel() + } + binding.ivNext.setOnClickListener { + fairyType++ + switchLevel() + } + + binding.ivCompound.isEnabled = false + + viewModel.getMyFairyInfo() + + viewModel.getExchangeGiftInfoList() + + viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) { + it?.let { setupMyFairyInfo(it) } + } + + viewModel.exchangeGiftListLiveData.observe(viewLifecycleOwner) { + it?.let { setupExchangeGiftList(it) } + } + + viewModel.exchangeGiftLiveData.observe(viewLifecycleOwner) { + it?.getContentIfNotHandled()?.let { + ExchangeFairyResultDialog.newInstance().show(context) + } + } + + } + + private fun switchLevel() { + viewModel.myFairyInfoLiveData.value?.let { + setupMyFairyInfo(it) + } + viewModel.exchangeGiftListLiveData.value?.let { + setupExchangeGiftList(it) + } + } + + @SuppressLint("SetTextI18n") + private fun setupExchangeGiftList(exchangeGiftList: List) { + val exchangeGift = exchangeGiftList.firstOrNull { it.level == fairyType } ?: return + binding.ivGift.load(exchangeGift.rewardPicUrl) + binding.tvGiftName.text = exchangeGift.rewardName + binding.tvGiftPrice.text = "${exchangeGift.rewardShowValue}鑽" + binding.ivCompound.setOnClickListener { + viewModel.exchangeGift(exchangeGift.itemId) + } + } + + @SuppressLint("SetTextI18n") + private fun setupMyFairyInfo(myFairyInfo: MyFairyInfo) { + val fairyInfos = when (fairyType) { + MyFairyItemView.BASE -> { + binding.ivPrevious.isInvisible = true + binding.ivTitle.setImageResource(R.drawable.treasure_fairy_ic_exchange_fairy_base) + myFairyInfo.lowElves + } + MyFairyItemView.EPIC -> { + binding.ivNext.isInvisible = false + binding.ivPrevious.isInvisible = false + binding.ivTitle.setImageResource(R.drawable.treasure_fairy_ic_exchange_fairy_epic) + myFairyInfo.middleElves + } + else -> { + binding.ivNext.isInvisible = true + binding.ivTitle.setImageResource(R.drawable.treasure_fairy_ic_exchange_fairy_legend) + myFairyInfo.highElves + } + } + + var isEnabled = true + fairyInfos?.let { + fairyItems.forEachIndexed { index, itemView -> + itemView.setFairyInfo(it.getOrNull(index)) + if (it.getOrNull(index)?.elfNum ?: 0 < 1) { + isEnabled = false + } + } + } + binding.ivCompound.isEnabled = isEnabled + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeFairyRecordFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeFairyRecordFragment.kt new file mode 100644 index 000000000..34b52a607 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ExchangeFairyRecordFragment.kt @@ -0,0 +1,58 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyFragmentExchangeRecordFairyBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.ExchangeFairyRecordAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo + +class ExchangeFairyRecordFragment : BaseViewBindingFragment() { + + + companion object { + fun newInstance(): ExchangeFairyRecordFragment { + val args = Bundle() + val fragment = ExchangeFairyRecordFragment() + fragment.arguments = args + return fragment + } + } + + private var page = 1 + private val pageSize = 20 + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: ExchangeFairyRecordAdapter + private val viewModel: FairyViewModel by activityViewModels() + + + @SuppressLint("CheckResult") + override fun init() { + prizeAdapter = ExchangeFairyRecordAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setPageSize(pageSize) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無數據")) + .setRecyclerView(binding.recyclerView) + .setLayoutManager(LinearLayoutManager(context)) + .build() + + viewModel.exchangeFairyRecordLiveData.observe(viewLifecycleOwner) { + rvDelegate.loadData(it) + } + + prizeAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) + + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + page = if (isRefresh) 1 else (page + 1) + viewModel.getExchangeFairyRecord(page, pageSize) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestPrizesChildFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestPrizesChildFragment.kt new file mode 100644 index 000000000..914864654 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestPrizesChildFragment.kt @@ -0,0 +1,58 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyFragmentForestPrizesChildBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.ForestPrizesChildAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class ForestPrizesChildFragment : + BaseViewBindingFragment() { + + companion object { + fun newInstance(type: Int): ForestPrizesChildFragment { + val args = Bundle() + args.putInt("poolLevel", type) + val fragment = ForestPrizesChildFragment() + fragment.arguments = args + return fragment + } + } + + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: ForestPrizesChildAdapter + private val viewModel: FairyViewModel by activityViewModels() + + @SuppressLint("CheckResult") + override fun init() { + prizeAdapter = ForestPrizesChildAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無數據")) + .setRecyclerView(binding.recyclerView) + .setLayoutManager(GridLayoutManager(context, 3, LinearLayoutManager.VERTICAL, false)) + .build() + + val poolLevel = requireArguments().getInt("poolLevel") + viewModel.getForestPrizePool(poolLevel) + + viewModel.forestPoolLiveData.observe(viewLifecycleOwner) { + it?.let { + if (it.first == poolLevel) { + rvDelegate.setNewData(it.second) + } + } ?: run { + rvDelegate.setNewData(null) + } + + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestPrizesFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestPrizesFragment.kt new file mode 100644 index 000000000..ce1d1e3e6 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestPrizesFragment.kt @@ -0,0 +1,56 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import android.widget.LinearLayout +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.viewpager.widget.ViewPager +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.databinding.TreasureFairyFragmentForestPrizesBinding +import com.yizhuan.erban.treasurefairy.adapter.ForestIndicatorAdapter +import com.yizhuan.erban.ui.user.adapter.UserInfoPagerAdapter +import com.yizhuan.erban.ui.widget.magicindicator.MagicIndicator +import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator + +class ForestPrizesFragment : BaseViewBindingFragment() { + + + companion object { + fun newInstance(): ForestPrizesFragment { + val args = Bundle() + val fragment = ForestPrizesFragment() + fragment.arguments = args + return fragment + } + } + + @SuppressLint("CheckResult") + override fun init() { + val viewPager: ViewPager = binding.viewPager + val magicIndicator: MagicIndicator = binding.magicIndicator + val fragmentList: MutableList = ArrayList() + fragmentList.add(ForestPrizesChildFragment.newInstance(1)) + fragmentList.add(ForestPrizesChildFragment.newInstance(2)) + fragmentList.add(ForestPrizesChildFragment.newInstance(3)) + val pagerAdapter = UserInfoPagerAdapter(childFragmentManager, fragmentList) + val tagList: MutableList = ArrayList() + tagList.add("初級森林") + tagList.add("史詩森林") + tagList.add("傳說森林") + val commonNavigator = CommonNavigator(context) + commonNavigator.setTitleWrapContent(true) + val magicIndicatorAdapter = ForestIndicatorAdapter(context, tagList) + magicIndicatorAdapter.setOnItemSelectListener { position: Int, _: TextView -> + viewPager.currentItem = position + } + commonNavigator.adapter = magicIndicatorAdapter + magicIndicator.navigator = commonNavigator + commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE + viewPager.offscreenPageLimit = 1 + viewPager.adapter = pagerAdapter + ViewPagerHelper.bind(magicIndicator, viewPager) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestRecordFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestRecordFragment.kt new file mode 100644 index 000000000..8e7acd6c5 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/ForestRecordFragment.kt @@ -0,0 +1,58 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyFragmentForestRecordBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.ForestPrizesRecordAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class ForestRecordFragment : BaseViewBindingFragment() { + + + companion object { + fun newInstance(): ForestRecordFragment { + val args = Bundle() + val fragment = ForestRecordFragment() + fragment.arguments = args + return fragment + } + } + + private var page = 1 + private val pageSize = 20 + private lateinit var rvDelegate: RVDelegate + private lateinit var prizeAdapter: ForestPrizesRecordAdapter + private val viewModel: FairyViewModel by activityViewModels() + + + @SuppressLint("CheckResult") + override fun init() { + prizeAdapter = ForestPrizesRecordAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(prizeAdapter) + .setPageSize(pageSize) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無數據")) + .setRecyclerView(binding.recyclerView) + .setLayoutManager(LinearLayoutManager(context)) + .build() + + viewModel.forestRecordLiveData.observe(viewLifecycleOwner) { + rvDelegate.loadData(it) + } + + prizeAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView) + + loadData(true) + } + + private fun loadData(isRefresh: Boolean) { + page = if (isRefresh) 1 else (page + 1) + viewModel.getForestRecord(page, pageSize) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/MyFairyFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/MyFairyFragment.kt new file mode 100644 index 000000000..d4652cfb4 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/MyFairyFragment.kt @@ -0,0 +1,75 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.databinding.TreasureFairyFragmentMyFairyBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.dialog.MyFairySearchFriendsDialog +import com.yizhuan.erban.treasurefairy.view.MyFairyItemView + +class MyFairyFragment : BaseViewBindingFragment() { + + + companion object { + fun newInstance(fairyType: Int): MyFairyFragment { + val args = Bundle() + args.putInt("fairyType", fairyType) + val fragment = MyFairyFragment() + fragment.arguments = args + return fragment + } + } + + private val fairyType by lazy { requireArguments().getInt("fairyType", MyFairyItemView.BASE) } + private val viewModel: FairyViewModel by activityViewModels() + + @SuppressLint("CheckResult") + override fun init() { + val fairyItems = arrayListOf( + binding.fairyItem0, + binding.fairyItem1, + binding.fairyItem2, + binding.fairyItem3, + binding.fairyItem4 + ) + fairyItems.forEach { + it.setFairyType(fairyType) + it.setOnItemClickListener { view, fairyInfo -> + if (fairyInfo == null) return@setOnItemClickListener + when (view.id) { + R.id.iv_fairy_send -> { + MyFairySearchFriendsDialog.newInstance(fairyInfo, true).show(context) + } + R.id.iv_fairy_get -> { + MyFairySearchFriendsDialog.newInstance(fairyInfo, false).show(context) + } + } + } + } + viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) { + it?.let { + val fairyInfos = when (fairyType) { + MyFairyItemView.BASE -> { + it.lowElves + } + MyFairyItemView.EPIC -> { + it.middleElves + } + else -> { + it.highElves + } + } + fairyInfos?.let { + fairyItems.forEachIndexed { index, itemView -> + itemView.setFairyInfo(it.getOrNull(index)) + } + } + } + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/TestFairyFragment.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/TestFairyFragment.kt new file mode 100644 index 000000000..6652d8b76 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/fragment/TestFairyFragment.kt @@ -0,0 +1,158 @@ +package com.yizhuan.erban.treasurefairy.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.TreasureFairyFragmentTestFairyBinding +import com.yizhuan.erban.treasurefairy.FairyViewModel +import com.yizhuan.erban.treasurefairy.adapter.TestFairyAdapter +import com.yizhuan.erban.treasurefairy.dialog.TestFairyResultDialog +import com.yizhuan.erban.treasurefairy.view.MyFairyItemView +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo + +class TestFairyFragment : BaseViewBindingFragment() { + + + companion object { + fun newInstance(fairyType: Int): TestFairyFragment { + val args = Bundle() + args.putInt("fairyType", fairyType) + val fragment = TestFairyFragment() + fragment.arguments = args + return fragment + } + } + + private val fairyType by lazy { requireArguments().getInt("fairyType", MyFairyItemView.BASE) } + private val viewModel: FairyViewModel by activityViewModels() + private lateinit var rvDelegate: RVDelegate + private lateinit var testFairyAdapter: TestFairyAdapter + + private val showResultRunnable = Runnable { + if (canShowResult) { + canShowResult = false + binding.ivBegin.isEnabled = true + if (fairyType == MyFairyItemView.BASE) { + viewModel.testResultLiveData + } else { + viewModel.testLegendResultLiveData + }.value?.peekContent()?.let { + TestFairyResultDialog.newInstance(it).show(context) + } + + } else { + resultNotShowed = true + } + } + private var canShowResult = false + private var resultNotShowed = false + + @SuppressLint("CheckResult") + override fun init() { + val fairyViews = listOf(binding.ivFairy0, binding.ivFairy1, binding.ivFairy2) + testFairyAdapter = TestFairyAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(testFairyAdapter) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context,"暫無數據")) + .setRecyclerView(binding.recyclerView) + .setLayoutManager(GridLayoutManager(context, 5, LinearLayoutManager.VERTICAL, false)) + .build() + + viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) { + val fairyInfos = it?.let { + when (fairyType) { + MyFairyItemView.EPIC -> { + it.middleElves + } + else -> { + it.lowElves + } + } + } + rvDelegate.setNewData(fairyInfos) + } + + if (fairyType == MyFairyItemView.EPIC) { + binding.tvTips.text = "點擊投入試煉傳說精靈" + } + + testFairyAdapter.setOnItemClickListener { _, _, position -> + testFairyAdapter.getItem(position)?.let { + viewModel.addTestFairy(it) + } + } + + fairyViews.forEachIndexed { index, imageView -> + imageView.setOnClickListener { + viewModel.minusTestFairy(index) + } + } + binding.tvReset.setOnClickListener { + viewModel.cleanTestParam() + } + binding.tvOneKeyAdd.setOnClickListener { + viewModel.oneKeyAdd(testFairyAdapter.data) + } + + if (fairyType == MyFairyItemView.EPIC) { + binding.viewBgAnim.setBackgroundResource(R.drawable.treasure_fairy_bg_test_fairy_anim_legend) + binding.viewBgTop.setBackgroundResource(R.drawable.treasure_fairy_bg_test_fairy_legend) + } + + binding.ivBegin.setOnClickListener { + if (viewModel.testFairy(fairyType)) { + binding.animView.startPlay( + requireContext().assets, + if (fairyType == MyFairyItemView.BASE) { + "vap/test_fairy_anim_epic.mp4" + } else { + "vap/test_fairy_anim_legend.mp4" + } + ) + binding.ivBegin.isEnabled = false + canShowResult = false + binding.ivBegin.postDelayed(showResultRunnable, 1800) + } + } + binding.animView.setOnClickListener { + if (canShowResult) { + binding.ivBegin.removeCallbacks(showResultRunnable) + showResultRunnable.run() + } + } + (if (fairyType == MyFairyItemView.BASE) { + viewModel.testResultLiveData + } else { + viewModel.testLegendResultLiveData + }).observe( + viewLifecycleOwner + ) { + it?.getContentIfNotHandled()?.let { + canShowResult = true + if (resultNotShowed) { + showResultRunnable.run() + } + } ?: run { + binding.ivBegin.isEnabled = true + } + } + viewModel.compoundFairyInfosLiveData.observe(viewLifecycleOwner) { + fairyViews.forEachIndexed { index, imageView -> + it?.get(index)?.elfPicUrl?.let { elfPicUrl -> + imageView.load(elfPicUrl) + } ?: run { + imageView.setImageDrawable(null) + } + } + testFairyAdapter.notifyDataSetChanged() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/view/CustomDrawable.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/CustomDrawable.kt new file mode 100644 index 000000000..db1ee9dcb --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/CustomDrawable.kt @@ -0,0 +1,63 @@ +package com.yizhuan.erban.treasurefairy.view + +import android.graphics.* +import android.graphics.drawable.Drawable + +class CustomDrawable(private val innerDrawable: Drawable) : Drawable() { + private val srcPaint: Paint + + /** + * 使用时需要自定义path + */ + private var srcPath: Path = Path() + private val xFermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR) + + /** + * 设置内部透明的部分 + */ + fun setSrcPath(srcPath: Path) { + this.srcPath = srcPath + } + + override fun draw(canvas: Canvas) { + innerDrawable.bounds = bounds + if (srcPath.isEmpty) { + innerDrawable.draw(canvas) + } else { + // 将绘制操作保存到新的图层 + val saveCount = canvas.saveLayer( + 0f, 0f, bounds.width().toFloat(), bounds.height().toFloat(), srcPaint, + Canvas.ALL_SAVE_FLAG + ) + // 绘制目标图 + innerDrawable.draw(canvas) + // 设置混合模式 + srcPaint.xfermode = xFermode + // src 绘制源图 + canvas.drawPath(srcPath, srcPaint) + // 清除混合模式 + srcPaint.xfermode = null + // 还原画布 + canvas.restoreToCount(saveCount) + } + } + + override fun setAlpha(alpha: Int) { + innerDrawable.alpha = alpha + } + + override fun setColorFilter(colorFilter: ColorFilter?) { + innerDrawable.colorFilter = colorFilter + } + + override fun getOpacity(): Int { + return innerDrawable.opacity + } + + init { + // path默认实现 + srcPath.addRect(100f, 100f, 200f, 200f, Path.Direction.CW) + srcPaint = Paint(Paint.ANTI_ALIAS_FLAG) + srcPaint.color = -0x1 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/view/ExchangeItemView.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/ExchangeItemView.kt new file mode 100644 index 000000000..d1512f1b1 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/ExchangeItemView.kt @@ -0,0 +1,35 @@ +package com.yizhuan.erban.treasurefairy.view + +import android.annotation.SuppressLint +import android.content.Context +import android.util.AttributeSet +import androidx.annotation.Nullable +import androidx.constraintlayout.widget.ConstraintLayout +import com.yizhuan.erban.R +import com.yizhuan.erban.databinding.TreasureFairyItemExchangeBinding +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo + +class ExchangeItemView @JvmOverloads constructor( + context: Context, + @Nullable attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + private val binding: TreasureFairyItemExchangeBinding + + init { + inflate(context, R.layout.treasure_fairy_item_exchange, this) + binding = TreasureFairyItemExchangeBinding.bind(this) + } + + @SuppressLint("SetTextI18n") + fun setFairyInfo(fairyInfo: FairyInfo?) { + fairyInfo?.let { + binding.ivFairyIcon.load(it.elfPicUrl) + binding.tvFairyName.text = it.elfName + binding.tvFairyNum.text = "${it.elfNum}" + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/view/HomeItemView.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/HomeItemView.kt new file mode 100644 index 000000000..854fa5c87 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/HomeItemView.kt @@ -0,0 +1,30 @@ +package com.yizhuan.erban.treasurefairy.view + +import android.content.Context +import android.util.AttributeSet +import android.widget.FrameLayout +import androidx.annotation.Nullable +import com.yizhuan.erban.R +import com.yizhuan.erban.databinding.TreasureFairyItemHomeBinding +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo + +class HomeItemView @JvmOverloads constructor( + context: Context, + @Nullable attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : FrameLayout(context, attrs, defStyleAttr) { + + private val binding: TreasureFairyItemHomeBinding + + init { + inflate(context, R.layout.treasure_fairy_item_home, this) + binding = TreasureFairyItemHomeBinding.bind(this) + } + + fun setPrizeInfo(prizeInfo: PrizeInfo) { + binding.ivPrizeIcon.load(prizeInfo.rewardPicUrl) + binding.tvPrizeName.text = prizeInfo.rewardName + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/view/MyFairyItemView.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/MyFairyItemView.kt new file mode 100644 index 000000000..aff38c6d3 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/view/MyFairyItemView.kt @@ -0,0 +1,118 @@ +package com.yizhuan.erban.treasurefairy.view + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.util.AttributeSet +import android.view.View +import android.widget.FrameLayout +import androidx.annotation.Nullable +import androidx.core.graphics.toColorInt +import androidx.core.view.isVisible +import com.yizhuan.erban.R +import com.yizhuan.erban.databinding.TreasureFairyItemMyFairyBaseBinding +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo + +class MyFairyItemView @JvmOverloads constructor( + context: Context, + @Nullable attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : FrameLayout(context, attrs, defStyleAttr) { + + companion object { + const val BASE = 1 + const val EPIC = 2 + const val LEGEND = 3 + } + + private val binding: TreasureFairyItemMyFairyBaseBinding + private var fairyInfo: FairyInfo? = null + + init { + inflate(context, R.layout.treasure_fairy_item_my_fairy_base, this) + binding = TreasureFairyItemMyFairyBaseBinding.bind(this) + binding.clSurface.setOnClickListener { + binding.root.animate() + .rotationY(180f) + .setDuration(500) + .start() + binding.root.postDelayed({ + binding.clSurface.isVisible = false + binding.clBack.isVisible = true + }, 250) + } + binding.clBack.setOnClickListener { + binding.root.animate() + .rotationY(0f) + .setDuration(500) + .start() + binding.root.postDelayed({ + binding.clSurface.isVisible = true + binding.clBack.isVisible = false + }, 250) + } + + binding.ivFairySend.setOnClickListener { + + } + } + + @SuppressLint("SetTextI18n") + fun setFairyInfo(fairyInfo: FairyInfo?) { + this.fairyInfo = fairyInfo + fairyInfo?.let { + binding.tvFairyName.text = it.elfName + binding.tvFairyNameBack.text = it.elfName + binding.tvFairyNum.text = "x${it.elfNum}" + binding.tvFairyNumBack.text = "x${it.elfNum}" + binding.ivFairyIcon.load(it.elfPicUrl) + binding.ivFairyIconBack.load(it.elfPicUrl) + binding.ivFairyEmpty.isVisible = it.elfNum == 0 + binding.ivFairySend.isVisible = it.elfNum > 0 + binding.viewCover.isVisible = it.elfNum == 0 + } + } + + fun setOnItemClickListener(onItemClickListener: (view: View, fairyInfo: FairyInfo?) -> Unit) { + binding.ivFairyGet.setOnClickListener { + onItemClickListener(it, fairyInfo) + } + binding.ivFairySend.setOnClickListener { + onItemClickListener(it, fairyInfo) + } + } + + fun setFairyType(fairyType: Int) { + when (fairyType) { + BASE -> { + binding.viewBg.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_base) + binding.viewBgBack.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_base) + binding.viewCover.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_base_cover) + binding.tvFairyName.setTextColor("#A4FFFC".toColorInt()) + binding.tvFairyNameBack.setTextColor("#A4FFFC".toColorInt()) + binding.tvFairyNum.setTextColor("#FFE8AA".toColorInt()) + binding.tvFairyNumBack.setTextColor("#FFE8AA".toColorInt()) + } + EPIC -> { + binding.viewBg.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_epic) + binding.viewBgBack.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_epic) + binding.viewCover.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_epic_cover) + binding.tvFairyName.setTextColor("#FFFED6".toColorInt()) + binding.tvFairyNameBack.setTextColor("#FFFED6".toColorInt()) + binding.tvFairyNum.setTextColor("#59FDFF".toColorInt()) + binding.tvFairyNumBack.setTextColor("#59FDFF".toColorInt()) + } + LEGEND -> { + binding.viewBg.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_legend) + binding.viewBgBack.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_legend) + binding.viewCover.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_legend_cover) + binding.tvFairyName.setTextColor(Color.WHITE) + binding.tvFairyNameBack.setTextColor(Color.WHITE) + binding.tvFairyNum.setTextColor("#FFE8AA".toColorInt()) + binding.tvFairyNumBack.setTextColor("#FFE8AA".toColorInt()) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt index c25a6f227..9568a7601 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt @@ -45,7 +45,7 @@ class GrantedPermissionsActivity : BaseActivity() { rvDelegate = RVDelegate.Builder() .setLayoutManager(LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)) .setRecyclerView(recyclerView) - .setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.ui_setting_grantedpermissionsactivity_02))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.ui_setting_grantedpermissionsactivity_02))) .setAdapter(PermissionAdapter()) .build() } diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/ShieldManageActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/ShieldManageActivity.kt index 7c8869dbe..b89445793 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/setting/ShieldManageActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/ShieldManageActivity.kt @@ -46,7 +46,7 @@ class ShieldManageActivity : BaseViewBindingActivity { public void loadErr(boolean isRefresh) { if (isRefresh) { if (!NetworkUtil.isNetAvailable(recyclerView.getContext())) { - adapter.setEmptyView(EmptyViewHelper.createEmptyView(recyclerView.getContext(), ResUtil.getString(R.string.ui_utils_rvdelegate_01))); + adapter.setEmptyView(EmptyViewHelper.createEmptyTextView(recyclerView.getContext(), ResUtil.getString(R.string.ui_utils_rvdelegate_01))); } else if (emptyView != null) { adapter.setEmptyView(emptyView); } diff --git a/app/src/main/java/com/yizhuan/erban/ui/webview/FairyDialogWebViewActivity.java b/app/src/main/java/com/yizhuan/erban/ui/webview/FairyDialogWebViewActivity.java new file mode 100644 index 000000000..20b7c7651 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/webview/FairyDialogWebViewActivity.java @@ -0,0 +1,42 @@ +package com.yizhuan.erban.ui.webview; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.Gravity; +import android.view.View; +import android.view.WindowManager; +import android.widget.FrameLayout; + +import com.netease.nim.uikit.common.util.sys.ScreenUtil; +import com.yizhuan.erban.R; + +public class FairyDialogWebViewActivity extends CommonWebViewActivity { + + + public static void start(Context context, String url) { + Intent intent = new Intent(context, FairyDialogWebViewActivity.class); + intent.putExtra("url", url); + context.startActivity(intent); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, ScreenUtil.screenHeight - ScreenUtil.getStatusBarHeight(this)); + getWindow().setGravity(Gravity.BOTTOM); + View layoutRoot = findViewById(R.id.ll_root); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) layoutRoot.getLayoutParams(); + layoutParams.height = ScreenUtil.screenWidth * 1100 / 750; + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutRoot.setLayoutParams(layoutParams); + layoutTitleBar.setVisibility(View.GONE); + webView.setBackgroundColor(0); + webView.getBackground().setAlpha(0); + } + + @Override + protected int getLayoutId() { + return R.layout.activity_elf_dialog_web_view; + } +} diff --git a/app/src/main/java/com/yizhuan/erban/utils/MsgBuilder.kt b/app/src/main/java/com/yizhuan/erban/utils/MsgBuilder.kt new file mode 100644 index 000000000..6591f219e --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/utils/MsgBuilder.kt @@ -0,0 +1,95 @@ +package com.yizhuan.erban.utils + +import android.text.style.ForegroundColorSpan +import android.view.View +import androidx.core.graphics.toColorInt +import com.yizhuan.erban.ui.webview.CommonWebViewActivity +import com.yizhuan.xchat_android_core.im.custom.bean.FairyMsgAttachment +import com.yizhuan.xchat_android_core.manager.RoomEvent +import com.yizhuan.xchat_android_core.utils.sub + +class MsgBuilder { + + companion object { + + @JvmStatic + fun setUpKitchenClick(view: View, skipUrl: String, needLevel: Int): Boolean { + val expLevel = UserUtils.getExpLevel() + if (expLevel != 0 && needLevel != 0 && expLevel >= needLevel) { + view.setOnClickListener { + CommonWebViewActivity.start( + view.context, + skipUrl + ) + } + return true + } + return false + } + + @JvmStatic + fun buildFairyMsg( + roomEvent: Int, + attachment: FairyMsgAttachment + ): SpannableBuilder { + val builder = SpannableBuilder() + val fairyMsgInfo = attachment.fairyMsgInfo + when (roomEvent) { + RoomEvent.FAIRY_DRAW_GIFT_L4, + RoomEvent.FAIRY_DRAW_GIFT_L5 -> { + builder.append("好运爆棚!", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + fairyMsgInfo.nick.sub(6), + ForegroundColorSpan("#EC4613".toColorInt()) + ) + .append(" 在夺宝精灵中获得 ", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + fairyMsgInfo.rewardName, + ForegroundColorSpan("#EC4613".toColorInt()) + ) + } + + RoomEvent.FAIRY_CONVERT_L1 -> { + builder.append("厉害了!", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + fairyMsgInfo.nick.sub(6), + ForegroundColorSpan("#EC4613".toColorInt()) + ) + .append(" 在夺宝精灵中初级召唤 ", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + "${fairyMsgInfo.rewardShowValue}钻${fairyMsgInfo.rewardName}", + ForegroundColorSpan("#EC4613".toColorInt()) + ) + } + RoomEvent.FAIRY_CONVERT_L2 -> { + builder.append("厉害了!", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + fairyMsgInfo.nick.sub(6), + ForegroundColorSpan("#EC4613".toColorInt()) + ) + .append(" 在夺宝精灵中史诗召唤 ", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + "${fairyMsgInfo.rewardShowValue}钻${fairyMsgInfo.rewardName}", + ForegroundColorSpan("#EC4613".toColorInt()) + ) + } + + RoomEvent.FAIRY_CONVERT_L3 -> { + builder.append("厉害了!", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + fairyMsgInfo.nick.sub(6), + ForegroundColorSpan("#EC4613".toColorInt()) + ) + .append(" 在夺宝精灵中传说召唤 ", ForegroundColorSpan("#8C4700".toColorInt())) + .append( + "${fairyMsgInfo.rewardShowValue}钻${fairyMsgInfo.rewardName}", + ForegroundColorSpan("#EC4613".toColorInt()) + ) + } + } + return builder + + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt b/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt index b76e0b936..ecfa4a8a6 100644 --- a/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt @@ -98,7 +98,7 @@ class VipMainActivity : BaseViewBindingActivity(), .setLayoutManager(GridLayoutManager(this, 3)) .setRecyclerView(binding.recyclerView) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( context, getString(R.string.me_no_search_results) ) diff --git a/app/src/main/res/drawable-xhdpi/ic_fairy_entrance.png b/app/src/main/res/drawable-xhdpi/ic_fairy_entrance.png new file mode 100644 index 000000000..244287a57 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_fairy_entrance.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_big_prize.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_big_prize.webp new file mode 100644 index 000000000..a8fa52385 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_big_prize.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_elf.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_elf.webp new file mode 100644 index 000000000..ed6452d04 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_elf.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_compound.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_compound.webp new file mode 100644 index 000000000..65e715fc0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_compound.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_debris_item.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_debris_item.webp new file mode 100644 index 000000000..ce2d97a80 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_debris_item.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_fairy_gift.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_fairy_gift.webp new file mode 100644 index 000000000..8e678e754 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_fairy_gift.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_gift_space.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_gift_space.png new file mode 100644 index 000000000..ac410a684 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_gift_space.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_item.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_item.webp new file mode 100644 index 000000000..307cfc178 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_item.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title.webp new file mode 100644 index 000000000..8c6d644fa Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_debris_checked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_debris_checked.webp new file mode 100644 index 000000000..e8106efdd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_debris_checked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_debris_unchecked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_debris_unchecked.webp new file mode 100644 index 000000000..d36344846 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_debris_unchecked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_fairy_checked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_fairy_checked.webp new file mode 100644 index 000000000..d18db2afa Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_fairy_checked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_fairy_unchecked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_fairy_unchecked.webp new file mode 100644 index 000000000..e370bf438 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_exchange_title_fairy_unchecked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest.webp new file mode 100644 index 000000000..6df5d5934 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_base.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_base.webp new file mode 100644 index 000000000..b33fa990a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_base.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_bottom.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_bottom.webp new file mode 100644 index 000000000..9fc9bcd06 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_bottom.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_epic.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_epic.webp new file mode 100644 index 000000000..e2b88f1d7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_epic.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_grab_1.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_grab_1.webp new file mode 100644 index 000000000..d94957a03 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_grab_1.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_grab_10.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_grab_10.webp new file mode 100644 index 000000000..455b5dd6c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_grab_10.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_legend.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_legend.webp new file mode 100644 index 000000000..37c460ff5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_legend.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_pool.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_pool.webp new file mode 100644 index 000000000..8804b4bd4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_pool.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize.webp new file mode 100644 index 000000000..26a31bbd4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize_close.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize_close.webp new file mode 100644 index 000000000..3ac8190f5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize_close.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize_single.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize_single.webp new file mode 100644 index 000000000..6438b584a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_prize_single.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_record.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_record.webp new file mode 100644 index 000000000..f83d39db6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_record.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_test.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_test.webp new file mode 100644 index 000000000..d1d7404ce Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_test.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_prize_checked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_prize_checked.webp new file mode 100644 index 000000000..a18a1dc71 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_prize_checked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_prize_unchecked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_prize_unchecked.webp new file mode 100644 index 000000000..08531c440 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_prize_unchecked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_record_checked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_record_checked.webp new file mode 100644 index 000000000..f49fd021a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_record_checked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_record_unchecked.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_record_unchecked.webp new file mode 100644 index 000000000..cee49dc8b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest_title_record_unchecked.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home.webp new file mode 100644 index 000000000..c2ae0274f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_popup_window.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_popup_window.webp new file mode 100644 index 000000000..af7a7b897 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_popup_window.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_prize.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_prize.webp new file mode 100644 index 000000000..dc7c3e33d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_prize.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_prize_number.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_prize_number.png new file mode 100644 index 000000000..0c0d9a2e3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_home_prize_number.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_home_prize.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_home_prize.webp new file mode 100644 index 000000000..2b72c1571 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_home_prize.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_select.webp new file mode 100644 index 000000000..f77e305df Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_unselect.webp new file mode 100644 index 000000000..e32b382dd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_item_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_key_number.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_key_number.webp new file mode 100644 index 000000000..abf294862 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_key_number.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_lucky_value.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_lucky_value.webp new file mode 100644 index 000000000..8ecc68d95 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_lucky_value.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_friend_title.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_friend_title.webp new file mode 100644 index 000000000..17004795e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_friend_title.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_base.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_base.webp new file mode 100644 index 000000000..23f9d39ec Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_base.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_base_cover.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_base_cover.webp new file mode 100644 index 000000000..7481a94d7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_base_cover.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_epic.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_epic.webp new file mode 100644 index 000000000..32de5e43b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_epic.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_epic_cover.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_epic_cover.webp new file mode 100644 index 000000000..38b4b40d4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_epic_cover.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_legend.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_legend.webp new file mode 100644 index 000000000..d9d28bfe9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_legend.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_legend_cover.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_legend_cover.webp new file mode 100644 index 000000000..5c09be035 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_item_legend_cover.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_record.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_record.webp new file mode 100644 index 000000000..04708ffef Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_record.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_rg.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_rg.webp new file mode 100644 index 000000000..78aa3fa9e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_rg.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send.webp new file mode 100644 index 000000000..36da898e8 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send_buy.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send_buy.webp new file mode 100644 index 000000000..3709bbf19 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send_buy.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send_cancel.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send_cancel.webp new file mode 100644 index 000000000..2bab8be74 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_send_cancel.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_tip_text.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_tip_text.webp new file mode 100644 index 000000000..895c1dd1a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_my_fairy_tip_text.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_notify.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_notify.webp new file mode 100644 index 000000000..16900a341 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_notify.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_1.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_1.webp new file mode 100644 index 000000000..92b4f27ca Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_1.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_10.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_10.webp new file mode 100644 index 000000000..35f0a4ccc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_10.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_100.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_100.webp new file mode 100644 index 000000000..66f2e9fed Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_open_100.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy.webp new file mode 100644 index 000000000..0a767113b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim.webp new file mode 100644 index 000000000..464f0f847 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim_epic.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim_epic.png new file mode 100644 index 000000000..8ac6d86fc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim_epic.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim_legend.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim_legend.png new file mode 100644 index 000000000..562230b26 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_anim_legend.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_begin.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_begin.webp new file mode 100644 index 000000000..7cdff9f22 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_begin.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_bottom.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_bottom.webp new file mode 100644 index 000000000..d84249adc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_bottom.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_item_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_item_select.webp new file mode 100644 index 000000000..ddd131c22 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_item_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_item_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_item_unselect.webp new file mode 100644 index 000000000..445d3d834 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_item_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_legend.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_legend.webp new file mode 100644 index 000000000..da6799176 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_legend.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_record.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_record.webp new file mode 100644 index 000000000..d2e5b08a1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_bg_test_fairy_record.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_back.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_back.webp new file mode 100644 index 000000000..d1296aefc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_back.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_compound.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_compound.webp new file mode 100644 index 000000000..66327cbbc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_compound.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_compound_disable.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_compound_disable.webp new file mode 100644 index 000000000..536dbc851 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_compound_disable.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris.webp new file mode 100644 index 000000000..d00c09332 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris_select.webp new file mode 100644 index 000000000..9dece356d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris_unselect.webp new file mode 100644 index 000000000..331ee3d93 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_debris_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_base.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_base.png new file mode 100644 index 000000000..1a367420d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_base.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_epic.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_epic.png new file mode 100644 index 000000000..d6b58bccc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_epic.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_legend.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_legend.png new file mode 100644 index 000000000..1bacf1f10 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_legend.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_select.webp new file mode 100644 index 000000000..7cec9e95c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_unselect.webp new file mode 100644 index 000000000..2f6c02a68 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_fairy_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_next.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_next.webp new file mode 100644 index 000000000..f9d77390e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_exchange_next.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_fairy_treasure.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_fairy_treasure.webp new file mode 100644 index 000000000..81ce04a11 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_fairy_treasure.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_base.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_base.webp new file mode 100644 index 000000000..57ea83df5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_base.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_epic.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_epic.webp new file mode 100644 index 000000000..01e2021d9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_epic.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_legend.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_legend.webp new file mode 100644 index 000000000..4f7a43535 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_legend.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_next.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_next.webp new file mode 100644 index 000000000..d226a9833 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_next.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_record.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_record.webp new file mode 100644 index 000000000..b62ce94b4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_record.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_store.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_store.webp new file mode 100644 index 000000000..9673e462b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_store.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_title.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_title.webp new file mode 100644 index 000000000..368277ea4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_forest_title.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_home_title.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_home_title.webp new file mode 100644 index 000000000..916bb53bc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_home_title.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone.webp new file mode 100644 index 000000000..b7e931b5e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone_default.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone_default.webp new file mode 100644 index 000000000..72a12a08b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone_default.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone_empty.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone_empty.webp new file mode 100644 index 000000000..fb2bcb159 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_lucky_stone_empty.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_more.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_more.webp new file mode 100644 index 000000000..4d042567e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_more.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy.webp new file mode 100644 index 000000000..74b587fb9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_base_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_base_select.webp new file mode 100644 index 000000000..c206196ad Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_base_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_base_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_base_unselect.webp new file mode 100644 index 000000000..672ee9d30 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_base_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_empty.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_empty.webp new file mode 100644 index 000000000..84ebbe3fb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_empty.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_epic_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_epic_select.webp new file mode 100644 index 000000000..1e3a6fc58 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_epic_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_epic_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_epic_unselect.webp new file mode 100644 index 000000000..3ae6bcee2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_epic_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_get.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_get.webp new file mode 100644 index 000000000..7b69feafa Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_get.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_legend_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_legend_select.webp new file mode 100644 index 000000000..17f73f3a4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_legend_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_legend_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_legend_unselect.webp new file mode 100644 index 000000000..36e5a0869 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_legend_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_record.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_record.webp new file mode 100644 index 000000000..15c766434 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_record.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_send.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_send.webp new file mode 100644 index 000000000..9e56b9bde Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_send.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_title.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_title.webp new file mode 100644 index 000000000..5f7dc948a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_my_fairy_title.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_epic_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_epic_select.webp new file mode 100644 index 000000000..1a0486356 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_epic_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_epic_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_epic_unselect.webp new file mode 100644 index 000000000..637ad881f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_epic_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_legend_select.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_legend_select.webp new file mode 100644 index 000000000..83795f893 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_legend_select.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_legend_unselect.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_legend_unselect.webp new file mode 100644 index 000000000..0dc1e7187 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_legend_unselect.webp differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_refresh.png b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_refresh.png new file mode 100644 index 000000000..ddd1096ca Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_refresh.png differ diff --git a/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_title.webp b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_title.webp new file mode 100644 index 000000000..a79eebf6e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/treasure_fairy_ic_test_fairy_title.webp differ diff --git a/app/src/main/res/drawable/selector_bg_fairy_exchange_compound.xml b/app/src/main/res/drawable/selector_bg_fairy_exchange_compound.xml new file mode 100644 index 000000000..39c521b51 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_exchange_compound.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_exchange_debris.xml b/app/src/main/res/drawable/selector_bg_fairy_exchange_debris.xml new file mode 100644 index 000000000..fa063b82e --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_exchange_debris.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_exchange_fairy.xml b/app/src/main/res/drawable/selector_bg_fairy_exchange_fairy.xml new file mode 100644 index 000000000..999c03c5b --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_exchange_fairy.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_exchange_record_debris.xml b/app/src/main/res/drawable/selector_bg_fairy_exchange_record_debris.xml new file mode 100644 index 000000000..e61141072 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_exchange_record_debris.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_exchange_record_fairy.xml b/app/src/main/res/drawable/selector_bg_fairy_exchange_record_fairy.xml new file mode 100644 index 000000000..38e2fafd2 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_exchange_record_fairy.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_forest_prize.xml b/app/src/main/res/drawable/selector_bg_fairy_forest_prize.xml new file mode 100644 index 000000000..a7bf64a32 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_forest_prize.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_forest_record.xml b/app/src/main/res/drawable/selector_bg_fairy_forest_record.xml new file mode 100644 index 000000000..a5c89e2fb --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_forest_record.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_home_item.xml b/app/src/main/res/drawable/selector_bg_fairy_home_item.xml new file mode 100644 index 000000000..628760836 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_home_item.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_my_base.xml b/app/src/main/res/drawable/selector_bg_fairy_my_base.xml new file mode 100644 index 000000000..ded6c58c3 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_my_base.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_my_epic.xml b/app/src/main/res/drawable/selector_bg_fairy_my_epic.xml new file mode 100644 index 000000000..25560f52c --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_my_epic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_my_legend.xml b/app/src/main/res/drawable/selector_bg_fairy_my_legend.xml new file mode 100644 index 000000000..677ac11bb --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_my_legend.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_test_epic.xml b/app/src/main/res/drawable/selector_bg_fairy_test_epic.xml new file mode 100644 index 000000000..640031cb4 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_test_epic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_bg_fairy_test_legend.xml b/app/src/main/res/drawable/selector_bg_fairy_test_legend.xml new file mode 100644 index 000000000..fd0fa738e --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_fairy_test_legend.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/shape_006e7c_to_00b9af.xml b/app/src/main/res/drawable/shape_006e7c_to_00b9af.xml new file mode 100644 index 000000000..3fe25b59c --- /dev/null +++ b/app/src/main/res/drawable/shape_006e7c_to_00b9af.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_00a69d_4dp_round.xml b/app/src/main/res/drawable/shape_00a69d_4dp_round.xml new file mode 100644 index 000000000..59df64048 --- /dev/null +++ b/app/src/main/res/drawable/shape_00a69d_4dp_round.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_00a69d_8dp_round.xml b/app/src/main/res/drawable/shape_00a69d_8dp_round.xml new file mode 100644 index 000000000..1c11eebc6 --- /dev/null +++ b/app/src/main/res/drawable/shape_00a69d_8dp_round.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_066a6e_20dp_round.xml b/app/src/main/res/drawable/shape_066a6e_20dp_round.xml new file mode 100644 index 000000000..810388255 --- /dev/null +++ b/app/src/main/res/drawable/shape_066a6e_20dp_round.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_3aeac7_to_fffebb.xml b/app/src/main/res/drawable/shape_3aeac7_to_fffebb.xml new file mode 100644 index 000000000..375f34ec4 --- /dev/null +++ b/app/src/main/res/drawable/shape_3aeac7_to_fffebb.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_3aeac7_to_fffebb_4dp.xml b/app/src/main/res/drawable/shape_3aeac7_to_fffebb_4dp.xml new file mode 100644 index 000000000..4f90f0c00 --- /dev/null +++ b/app/src/main/res/drawable/shape_3aeac7_to_fffebb_4dp.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_elf_dialog_web_view.xml b/app/src/main/res/layout/activity_elf_dialog_web_view.xml new file mode 100644 index 000000000..9960cbfe7 --- /dev/null +++ b/app/src/main/res/layout/activity_elf_dialog_web_view.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_fairy_prize_hint.xml b/app/src/main/res/layout/item_fairy_prize_hint.xml new file mode 100644 index 000000000..21c8b83bd --- /dev/null +++ b/app/src/main/res/layout/item_fairy_prize_hint.xml @@ -0,0 +1,35 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_room_effect.xml b/app/src/main/res/layout/layout_room_effect.xml index d01715fb6..e7b06b490 100644 --- a/app/src/main/res/layout/layout_room_effect.xml +++ b/app/src/main/res/layout/layout_room_effect.xml @@ -59,6 +59,13 @@ app:layout_constraintDimensionRatio="75:11" app:layout_constraintTop_toTopOf="parent" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_dialog_exchange.xml b/app/src/main/res/layout/treasure_fairy_dialog_exchange.xml new file mode 100644 index 000000000..3d6321992 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_exchange.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_exchange_record.xml b/app/src/main/res/layout/treasure_fairy_dialog_exchange_record.xml new file mode 100644 index 000000000..93d9aa556 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_exchange_record.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_forest.xml b/app/src/main/res/layout/treasure_fairy_dialog_forest.xml new file mode 100644 index 000000000..dd772bf21 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_forest.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_forest_prize.xml b/app/src/main/res/layout/treasure_fairy_dialog_forest_prize.xml new file mode 100644 index 000000000..bd51dc430 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_forest_prize.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_forest_record.xml b/app/src/main/res/layout/treasure_fairy_dialog_forest_record.xml new file mode 100644 index 000000000..efae2195d --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_forest_record.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_home.xml b/app/src/main/res/layout/treasure_fairy_dialog_home.xml new file mode 100644 index 000000000..e3eb83ec6 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_home.xml @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_home_prize.xml b/app/src/main/res/layout/treasure_fairy_dialog_home_prize.xml new file mode 100644 index 000000000..9c13cbdd7 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_home_prize.xml @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_my_fairy.xml b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy.xml new file mode 100644 index 000000000..d6aa3f59f --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_record.xml b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_record.xml new file mode 100644 index 000000000..f3667f804 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_record.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_search_friend.xml b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_search_friend.xml new file mode 100644 index 000000000..d70214bf9 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_search_friend.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_send.xml b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_send.xml new file mode 100644 index 000000000..ae705bd1f --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_my_fairy_send.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_test_fairy.xml b/app/src/main/res/layout/treasure_fairy_dialog_test_fairy.xml new file mode 100644 index 000000000..7b4eec2c4 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_test_fairy.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_test_fairy_record.xml b/app/src/main/res/layout/treasure_fairy_dialog_test_fairy_record.xml new file mode 100644 index 000000000..c18b293ce --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_test_fairy_record.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_dialog_test_fairy_result.xml b/app/src/main/res/layout/treasure_fairy_dialog_test_fairy_result.xml new file mode 100644 index 000000000..8d0f43b48 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_dialog_test_fairy_result.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_exchange_debris.xml b/app/src/main/res/layout/treasure_fairy_fragment_exchange_debris.xml new file mode 100644 index 000000000..b5dd2b8ba --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_exchange_debris.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_exchange_fairy.xml b/app/src/main/res/layout/treasure_fairy_fragment_exchange_fairy.xml new file mode 100644 index 000000000..4d3f6aedd --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_exchange_fairy.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_exchange_record_debris.xml b/app/src/main/res/layout/treasure_fairy_fragment_exchange_record_debris.xml new file mode 100644 index 000000000..b69c7f535 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_exchange_record_debris.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_exchange_record_fairy.xml b/app/src/main/res/layout/treasure_fairy_fragment_exchange_record_fairy.xml new file mode 100644 index 000000000..77680e2b6 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_exchange_record_fairy.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_forest_prizes.xml b/app/src/main/res/layout/treasure_fairy_fragment_forest_prizes.xml new file mode 100644 index 000000000..3798f6f76 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_forest_prizes.xml @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_forest_prizes_child.xml b/app/src/main/res/layout/treasure_fairy_fragment_forest_prizes_child.xml new file mode 100644 index 000000000..8a75697aa --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_forest_prizes_child.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_forest_record.xml b/app/src/main/res/layout/treasure_fairy_fragment_forest_record.xml new file mode 100644 index 000000000..da1f34375 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_forest_record.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_my_fairy.xml b/app/src/main/res/layout/treasure_fairy_fragment_my_fairy.xml new file mode 100644 index 000000000..38a090892 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_my_fairy.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_fragment_test_fairy.xml b/app/src/main/res/layout/treasure_fairy_fragment_test_fairy.xml new file mode 100644 index 000000000..cf0a1305f --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_fragment_test_fairy.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_item_exchange.xml b/app/src/main/res/layout/treasure_fairy_item_exchange.xml new file mode 100644 index 000000000..711371681 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_exchange.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_item_exchange_debris.xml b/app/src/main/res/layout/treasure_fairy_item_exchange_debris.xml new file mode 100644 index 000000000..983404021 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_exchange_debris.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_exchange_debris_record.xml b/app/src/main/res/layout/treasure_fairy_item_exchange_debris_record.xml new file mode 100644 index 000000000..8feb607ff --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_exchange_debris_record.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_exchange_fairy_record.xml b/app/src/main/res/layout/treasure_fairy_item_exchange_fairy_record.xml new file mode 100644 index 000000000..bc3b5f571 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_exchange_fairy_record.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_forest_prize.xml b/app/src/main/res/layout/treasure_fairy_item_forest_prize.xml new file mode 100644 index 000000000..b4c3fdc49 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_forest_prize.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_forest_prize_single.xml b/app/src/main/res/layout/treasure_fairy_item_forest_prize_single.xml new file mode 100644 index 000000000..e386445b0 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_forest_prize_single.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_forest_prizes_child.xml b/app/src/main/res/layout/treasure_fairy_item_forest_prizes_child.xml new file mode 100644 index 000000000..7c066e95a --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_forest_prizes_child.xml @@ -0,0 +1,56 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_item_forest_prizes_record.xml b/app/src/main/res/layout/treasure_fairy_item_forest_prizes_record.xml new file mode 100644 index 000000000..bc3b5f571 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_forest_prizes_record.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_home.xml b/app/src/main/res/layout/treasure_fairy_item_home.xml new file mode 100644 index 000000000..c1656a025 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_home.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_item_home_prize.xml b/app/src/main/res/layout/treasure_fairy_item_home_prize.xml new file mode 100644 index 000000000..c56cbb690 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_home_prize.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_home_prize_single.xml b/app/src/main/res/layout/treasure_fairy_item_home_prize_single.xml new file mode 100644 index 000000000..03456fb7a --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_home_prize_single.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_my_fairy_base.xml b/app/src/main/res/layout/treasure_fairy_item_my_fairy_base.xml new file mode 100644 index 000000000..611405c23 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_my_fairy_base.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_my_fairy_epic.xml b/app/src/main/res/layout/treasure_fairy_item_my_fairy_epic.xml new file mode 100644 index 000000000..7beae7a31 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_my_fairy_epic.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_my_fairy_friend.xml b/app/src/main/res/layout/treasure_fairy_item_my_fairy_friend.xml new file mode 100644 index 000000000..33a00b8f2 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_my_fairy_friend.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_my_fairy_legend.xml b/app/src/main/res/layout/treasure_fairy_item_my_fairy_legend.xml new file mode 100644 index 000000000..0144fbcc2 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_my_fairy_legend.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_my_fairy_record.xml b/app/src/main/res/layout/treasure_fairy_item_my_fairy_record.xml new file mode 100644 index 000000000..89ac4b9d5 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_my_fairy_record.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_item_test_fairy.xml b/app/src/main/res/layout/treasure_fairy_item_test_fairy.xml new file mode 100644 index 000000000..28a1207da --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_test_fairy.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treasure_fairy_item_test_fairy_record.xml b/app/src/main/res/layout/treasure_fairy_item_test_fairy_record.xml new file mode 100644 index 000000000..97d1b83a4 --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_item_test_fairy_record.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fairy_popup_window_home_more.xml b/app/src/main/res/layout/treasure_fairy_popup_window_home_more.xml new file mode 100644 index 000000000..c311cf97e --- /dev/null +++ b/app/src/main/res/layout/treasure_fairy_popup_window_home_more.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + \ 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 3e8880722..53344ba7b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -657,5 +657,8 @@ #E1FAFF #BE5AF6 #F92020 + #1f5764 + #59fdff + #ffe8aa diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aefa884d7..04d593691 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5089,5 +5089,16 @@ 確定拒绝該用戶加入房間的申請嗎? 7天内不再接受該用戶的申請 確定拒绝該房間的加入邀請嗎? + 兌換 + 初級召喚 + 史詩召喚 + 傳說召喚 + 精靈球 + 初級森林 + 史詩森林 + 傳說森林 + 我是個默認簽名 + + 贈送 \ No newline at end of file diff --git a/app/src/module_community/java/com/yizhuan/erban/community/square/SquareDynamicFragment.java b/app/src/module_community/java/com/yizhuan/erban/community/square/SquareDynamicFragment.java index 91d2378e8..41c4fcece 100644 --- a/app/src/module_community/java/com/yizhuan/erban/community/square/SquareDynamicFragment.java +++ b/app/src/module_community/java/com/yizhuan/erban/community/square/SquareDynamicFragment.java @@ -253,7 +253,7 @@ public class SquareDynamicFragment extends BaseMvpFragment loadMembers(false), recyclerView); diff --git a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminAddActivity.kt b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminAddActivity.kt index 223d8f481..68649177a 100644 --- a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminAddActivity.kt +++ b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminAddActivity.kt @@ -37,7 +37,7 @@ class SuperAdminAddActivity : BaseViewBindingActivity() .setLayoutManager(LinearLayoutManager(context)) .setRecyclerView(binding.recyclerView) - .setEmptyView(EmptyViewHelper.createEmptyView(context, ResUtil.getString(R.string.hall_activity_superadminaddactivity_01))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context, ResUtil.getString(R.string.hall_activity_superadminaddactivity_01))) .setAdapter(adminAdapter) .build() diff --git a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminManageActivity.kt b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminManageActivity.kt index 67216042f..aea931684 100644 --- a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminManageActivity.kt +++ b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/SuperAdminManageActivity.kt @@ -49,7 +49,7 @@ class SuperAdminManageActivity : BaseViewBindingActivity() .setLayoutManager(LinearLayoutManager(context)) .setRecyclerView(binding.recyclerView) - .setEmptyView(EmptyViewHelper.createEmptyView(context, ResUtil.getString(R.string.hall_activity_superadminroomsetactivity_02))) + .setEmptyView(EmptyViewHelper.createEmptyTextView(context, ResUtil.getString(R.string.hall_activity_superadminroomsetactivity_02))) .setAdapter(adminAdapter) .build() binding.recyclerView.itemAnimator = null diff --git a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/adapter/ManageSuperAdminAdapter.kt b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/adapter/ManageSuperAdminAdapter.kt index 24e236a12..b59396135 100644 --- a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/adapter/ManageSuperAdminAdapter.kt +++ b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/adapter/ManageSuperAdminAdapter.kt @@ -32,7 +32,7 @@ class ManageSuperAdminAdapter : ) ) .setRecyclerView(rvRoom) - .setEmptyView(EmptyViewHelper.createEmptyView(mContext, "暫無管理的房間")) + .setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, "暫無管理的房間")) .setAdapter(ManageRoomAdapter()) .build() } diff --git a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationFragment.kt b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationFragment.kt index b9d3a2e56..a3a8bd769 100644 --- a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationFragment.kt +++ b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationFragment.kt @@ -77,7 +77,7 @@ class AssociationFragment : BaseViewBindingFragment( .setLayoutManager(LinearLayoutManager(context)) .setRecyclerView(binding.recyclerView) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( context, ResUtil.getString(R.string.association_list_empty) ) diff --git a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationRoomFragment.kt b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationRoomFragment.kt index f7f59189a..db56d96c5 100644 --- a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationRoomFragment.kt +++ b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/fragment/AssociationRoomFragment.kt @@ -151,7 +151,7 @@ class AssociationRoomFragment : BaseViewBindingFragment() .setLayoutManager(LinearLayoutManager(context)) .setRecyclerView(binding.recyclerView) .setEmptyView( - EmptyViewHelper.createEmptyView( + EmptyViewHelper.createEmptyTextView( context, ResUtil.getString(R.string.association_list_empty) ) diff --git a/app/src/module_treasure_box/java/com/yizhuan/erban/treasure_box/widget/GoldBoxHelper.java b/app/src/module_treasure_box/java/com/yizhuan/erban/treasure_box/widget/GoldBoxHelper.java index af63fc901..d13ca18fb 100644 --- a/app/src/module_treasure_box/java/com/yizhuan/erban/treasure_box/widget/GoldBoxHelper.java +++ b/app/src/module_treasure_box/java/com/yizhuan/erban/treasure_box/widget/GoldBoxHelper.java @@ -11,6 +11,7 @@ import com.yizhuan.erban.treasure_box.activity.TreasureBoxActivity; import com.yizhuan.erban.treasure_box.activity.TreasureBoxHonourActivity; import com.yizhuan.erban.treasure_box.fragment.ChooseTreasureBoxDialogFragment; import com.yizhuan.xchat_android_core.initial.InitialModel; +import com.yizhuan.xchat_android_core.initial.bean.FairyOpenInfo; import com.yizhuan.xchat_android_core.initial.bean.InitInfo; import com.yizhuan.xchat_android_core.level.UserLevelVo; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; @@ -108,4 +109,12 @@ public class GoldBoxHelper { return false; } + public static boolean isShowFairy() { + UserInfo userInfo = UserModel.get().getCacheLoginUserInfo(); + FairyOpenInfo fairyOpenInfo = InitialModel.get().getFairyOpenInfo(); + if (fairyOpenInfo == null || userInfo == null) return false; + + return fairyOpenInfo.isOpen() && userInfo.getUserLevelVo().getExperLevelSeq() >= fairyOpenInfo.getLevelLimit(); + } + } diff --git a/app/src/module_treasure_box/res/drawable/bg_treasure_box_more.xml b/app/src/module_treasure_box/res/drawable/bg_treasure_box_more.xml new file mode 100644 index 000000000..bc3e0c6d5 --- /dev/null +++ b/app/src/module_treasure_box/res/drawable/bg_treasure_box_more.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java index fd33b1299..c6d355f2d 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java @@ -526,4 +526,32 @@ public class UriProvider { return JAVA_WEB_URL.concat("peko/modules/myincome/index.html#/GoldLog"); } + /** + * 获取夺宝精灵钥匙 + */ + public static String getFairyKey() { + return JAVA_WEB_URL.concat("yinyou/modules/act-treasureSnatching/index.html"); + } + + /** + * 夺宝精灵规则 + */ + public static String getFairyRule() { + return JAVA_WEB_URL.concat("yinyou/modules/act-treasureSnatching/rule.html"); + } + + /** + * 夺宝达人 + */ + public static String getFairySuperior() { + return JAVA_WEB_URL.concat("yinyou/modules/act-treasureSnatching/list.html"); + } + + /** + * 夺宝记录 + */ + public static String getFairyRecord() { + return JAVA_WEB_URL.concat("yinyou/modules/act-treasureSnatching/record.html"); + } + } diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/bean/BannerInfo.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/bean/BannerInfo.java index ed3d1fce5..ee45c7f8f 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/bean/BannerInfo.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/bean/BannerInfo.java @@ -59,6 +59,7 @@ public class BannerInfo implements Parcelable, Serializable { private boolean isFirstCharge; private boolean isBox; private boolean isRadish; + private boolean isFairy; public BannerInfo(){ diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java index fbc225f2c..99106b1d4 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java @@ -1347,6 +1347,28 @@ public final class IMNetEaseManager { EventBus.getDefault().post(new UpdateKnapFreeGiftDataEvent(bean)); } break; + case CUSTOM_MSG_FAIRY: + if (second != CUSTOM_MSG_SUB_FAIRY_SEND && second != CUSTOM_MSG_SUB_FAIRY_ASK_FOR) { + addMessages(msg); + } + switch (second) { + case CUSTOM_MSG_SUB_DRAW_GIFT_L4: + noticeRoomEvent(msg, RoomEvent.FAIRY_DRAW_GIFT_L4); + break; + case CUSTOM_MSG_SUB_DRAW_GIFT_L5: + noticeRoomEvent(msg, RoomEvent.FAIRY_DRAW_GIFT_L5); + break; + case CUSTOM_MSG_SUB_CONVERT_L1: + noticeRoomEvent(msg, RoomEvent.FAIRY_CONVERT_L1); + break; + case CUSTOM_MSG_SUB_CONVERT_L2: + noticeRoomEvent(msg, RoomEvent.FAIRY_CONVERT_L2); + break; + case CUSTOM_MSG_SUB_CONVERT_L3: + noticeRoomEvent(msg, RoomEvent.FAIRY_CONVERT_L3); + break; + } + break; default: break; } diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/Compound.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/Compound.kt new file mode 100644 index 000000000..2c7c43aec --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/Compound.kt @@ -0,0 +1,6 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class Compound( + val elfId: Long, + val elfNum: Int +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/DrawInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/DrawInfo.kt new file mode 100644 index 000000000..5a5460ba9 --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/DrawInfo.kt @@ -0,0 +1,7 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class DrawInfo( + val drawTicketNum: Int = 0, + val luckyNum: Int = 0, + val needLuckyNum: Int = 0 +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/ExchangeGiftInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/ExchangeGiftInfo.kt new file mode 100644 index 000000000..97e789610 --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/ExchangeGiftInfo.kt @@ -0,0 +1,34 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class ExchangeGiftInfo( + val expendNum: Int = 0, + val itemId: Long = 0, + val level: Int = 0, + val rewardId: Int = 0, + val rewardName: String = "", + val rewardNum: Int = 0, + val rewardPicUrl: String = "", + val rewardShowValue: String = "", + val rewardUnit: String = "", + val rewardType: String = "", + val type: Int = 0, + val createTime: Long = 0, + val convertLevel: Int = 0 +) { + + fun getPrizeName(): String { + return if (rewardType == "gift") { + "${rewardName}(${rewardShowValue}钻)" + } else { + "${rewardName}(${rewardNum}${rewardUnit})" + } + } + + fun getPrizeUnit(): String { + return if (rewardType == "gift") { + "${rewardShowValue}钻" + } else { + "${rewardNum}${rewardUnit}" + } + } +} \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyInfo.kt new file mode 100644 index 000000000..0aae4254b --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyInfo.kt @@ -0,0 +1,12 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +import java.io.Serializable + +data class FairyInfo( + val elfId: Long = 0, + val elfNum: Int = 0, + val elfLevel: Int = 0, + val elfName: String = "", + val elfPicUrl: String = "", + var selectedNum:Int +) : Serializable \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyMsgInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyMsgInfo.kt new file mode 100644 index 000000000..86424f216 --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyMsgInfo.kt @@ -0,0 +1,48 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class FairyMsgInfo( + /** + * uid + */ + val uid: Long? = null, + + /** + * 昵称 + */ + val nick: String? = null, + + /** + * 所在房间uid + */ + val roomUid: Long? = null, + + /** + * 奖励类型 + */ + val rewardType: String? = null, + + /** + * 奖励名称 + */ + val rewardName: String? = null, + + /** + * 奖励等级 + */ + val rewardLevel: Int? = null, + + /** + * 奖励数量 + */ + val rewardNum: Int = 0, + + /** + * 限制等级 + */ + val userLevelLimit: Int? = null, + + /** + * 展示价值 + */ + val rewardShowValue: Int? = null +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyTestParam.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyTestParam.kt new file mode 100644 index 000000000..b08420198 --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/FairyTestParam.kt @@ -0,0 +1,6 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class FairyTestParam( + val expendList: MutableList = arrayListOf(), + var level: Int = 0, +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/ForestInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/ForestInfo.kt new file mode 100644 index 000000000..7ab08e2c2 --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/ForestInfo.kt @@ -0,0 +1,11 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class ForestInfo( + val avatar: String = "", + val erbanNo: Int = 0, + val highBallNum: String = "0", + val lowBallNum: String = "0", + val middleBallNum: String = "0", + val nick: String = "", + val uid: Int = 0 +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/MyFairyInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/MyFairyInfo.kt new file mode 100644 index 000000000..870854599 --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/MyFairyInfo.kt @@ -0,0 +1,10 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class MyFairyInfo( + val highElves: ArrayList? = null, + val lowElves: ArrayList? = null, + val middleElves: ArrayList? = null, + val avatar: String = "", + val nick: String = "", + val chipNum: Int +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/PrizeInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/PrizeInfo.kt new file mode 100644 index 000000000..d3989993e --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/PrizeInfo.kt @@ -0,0 +1,16 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class PrizeInfo( + val rewardId: Int = 0, + val rewardName: String = "", + val rewardNum: Int = 0, + val rewardOrder: Int = 0, + val rewardLevel: Int = 0, + val rewardPicUrl: String = "", + val rewardType: String = "", + val rewardUnit: String = "", + val drawTime: Long = 0, + val poolLevel: Int = 0, + val propType: Int? = null, + val itemIndex:Int = 0, +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/SendFairyInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/SendFairyInfo.kt new file mode 100644 index 000000000..e0c282dbc --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/SendFairyInfo.kt @@ -0,0 +1,13 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class SendFairyInfo( + val createTime: Long = 0, + val elfId: Long = 0, + val elfName: String = "", + val elfPicUrl: String = "", + val recordId: Int = 0, + val targetAvatar: String = "", + val targetNick: String = "", + val targetUid: Long = 0, + val type: Int = 0 +) \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/TestFairyRecordInfo.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/TestFairyRecordInfo.kt new file mode 100644 index 000000000..25d2f72af --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/TestFairyRecordInfo.kt @@ -0,0 +1,10 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +data class TestFairyRecordInfo( + val compoundLevel: Int = 0, + val createTime: Long = 0, + val elfLevel: Int = 0, + val elfName: String = "", + val expendList: List = listOf(), + val recordId: Long = 0 +) diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/TreasureFairyModel.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/TreasureFairyModel.kt new file mode 100644 index 000000000..48ae99265 --- /dev/null +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/treasurefairy/TreasureFairyModel.kt @@ -0,0 +1,264 @@ +package com.yizhuan.xchat_android_core.treasurefairy + +import com.yizhuan.xchat_android_core.bean.response.ServiceResult +import com.yizhuan.xchat_android_core.gift.bean.SimpleUserInfo +import com.yizhuan.xchat_android_core.manager.AvRoomDataManager +import com.yizhuan.xchat_android_core.utils.net.launchRequest +import com.yizhuan.xchat_android_library.net.rxnet.RxNet +import retrofit2.http.* + +object TreasureFairyModel { + + private val api = RxNet.create(Api::class.java) + + suspend fun drawTreasureFairy(drawNum: Int): List? = launchRequest { + api.drawTreasureFairy(drawNum, AvRoomDataManager.get().roomUid) + } + + suspend fun getDrawInfo(): DrawInfo? = launchRequest { + api.getDrawInfo() + } + + suspend fun getPrizeInfoList(): List? = launchRequest { + api.getPrizeInfoList() + } + + suspend fun drawForestFairy(drawNum: Int, poolLevel: Int): List? = launchRequest { + api.drawForestFairy(drawNum, poolLevel) + } + + suspend fun getForestRecord( + page: Int, + pageSize: Int + ): List? = launchRequest { + api.getForestRecord(page, pageSize) + } + + suspend fun getForestPrizePool(poolLevel: Int): List? = launchRequest { + api.getForestPrizePool(poolLevel) + } + + suspend fun getForestInfo(): ForestInfo? = launchRequest { + api.getForestInfo() + } + + suspend fun getMyFairyInfo(): MyFairyInfo? = launchRequest { + api.getMyFairyInfo() + } + + suspend fun getFriendsList(nick: String?): List? = launchRequest { + api.getFriendsList(nick) + } + + suspend fun askForFairy(elfId: Long, targetUid: Long): String? = launchRequest { + api.askForFairy(elfId, targetUid) + } + + suspend fun sendFairy(elfId: Long, targetUid: Long): String? = launchRequest { + api.sendFairy(elfId, targetUid) + } + + suspend fun getSendFairyList( + page: Int, + pageSize: Int + ): List? = launchRequest { + api.getSendFairyList(page, pageSize) + } + + suspend fun testFairy(fairyTestParam: FairyTestParam): FairyInfo? = launchRequest { + api.testFairy(fairyTestParam) + } + + suspend fun getTestFairyRecordList( + page: Int, + pageSize: Int + ): List? = launchRequest { + api.getTestFairyRecordList(page, pageSize) + } + + suspend fun getExchangeGiftInfoList(): List? = launchRequest { + api.getExchangeGiftInfoList() + } + + suspend fun exchangeGift(itemId: Long): ExchangeGiftInfo? = launchRequest { + api.exchangeGift(itemId, AvRoomDataManager.get().roomUid) + } + + suspend fun getDebrisExchangeList(): List? = launchRequest { + api.getDebrisExchangeList() + } + + suspend fun getExchangeRecord( + convertType: Int, + page: Int, + pageSize: Int + ): List? = launchRequest { + api.getExchangeRecord(convertType, page, pageSize) + } + + + private interface Api { + + /** + * 夺宝 + * + * @param drawNum + * @return + */ + @FormUrlEncoded + @POST("act/seize-treasure/draw") + suspend fun drawTreasureFairy( + @Field("drawNum") drawNum: Int, + @Field("roomUid") roomUid: Long + ): ServiceResult> + + @GET("act/seize-treasure/user/draw/info") + suspend fun getDrawInfo(): ServiceResult + + /** + * 奖池列表 + * + */ + @GET("act/seize-treasure/draw/pool/list") + suspend fun getPrizeInfoList(): ServiceResult> + + /** + * 猛犸森林抽奖 + * + */ + @FormUrlEncoded + @POST("act/seize-treasure/forest/draw") + suspend fun drawForestFairy( + @Field("drawNum") drawNum: Int, + @Field("poolLevel") poolLevel: Int + ): ServiceResult> + + /** + * 猛犸森林抽奖记录 + * + */ + @GET("act/seize-treasure/forest/draw/record") + suspend fun getForestRecord( + @Query("page") page: Int, + @Query("pageSize") pageSize: Int + ): ServiceResult> + + /** + * + * 猛犸森林奖池配置列表 + * + */ + @GET("act/seize-treasure/draw/forest/item") + suspend fun getForestPrizePool(@Query("poolLevel") poolLevel: Int): ServiceResult> + + /** + * + * 猛犸森林奖池配置列表 + * + */ + @GET("act/seize-treasure/user/forest/info") + suspend fun getForestInfo(): ServiceResult + + /** + * + * 获取我的精灵信息 + * + */ + @GET("act/seize-treasure/elf/user/info") + suspend fun getMyFairyInfo(): ServiceResult + + /** + * + * 好友列表 + * + */ + @GET("fans/friend/list") + suspend fun getFriendsList(@Query("nick") nick: String?): ServiceResult> + + /** + * 精灵-索要 + * + */ + @FormUrlEncoded + @POST("act/seize-treasure/elf/askFor") + suspend fun askForFairy( + @Field("elfId") elfId: Long, + @Field("targetUid") targetUid: Long + ): ServiceResult + + /** + * 精灵-赠送 + * + */ + @FormUrlEncoded + @POST("act/seize-treasure/elf/send") + suspend fun sendFairy( + @Field("elfId") elfId: Long, + @Field("targetUid") targetUid: Long + ): ServiceResult + + /** + * 精灵-赠予/获赠记录 + * + */ + @GET("act/seize-treasure/elf/record") + suspend fun getSendFairyList( + @Query("page") page: Int, + @Query("pageSize") pageSize: Int + ): ServiceResult> + + /** + * 合成礼物 + */ + @POST("act/seize-treasure/elf/compound") + suspend fun testFairy(@Body fairyTestParam: FairyTestParam): ServiceResult + + /** + * 合成礼物记录 + * + */ + @GET("act/seize-treasure/elf/compound/record") + suspend fun getTestFairyRecordList( + @Query("page") page: Int, + @Query("pageSize") pageSize: Int + ): ServiceResult> + + /** + * 精灵兑换-礼物列表 + * + */ + @GET("act/seize-treasure/convert/elf/list") + suspend fun getExchangeGiftInfoList(): ServiceResult> + + /** + * 精灵兑换-兑换 + * + */ + @FormUrlEncoded + @POST("act/seize-treasure/convert") + suspend fun exchangeGift( + @Field("itemId") itemId: Long, + @Field("roomUid") roomUid: Long + ): ServiceResult + + + /** + * 兑换-碎片兑换列表 + * + */ + @GET("act/seize-treasure/convert/chip/list") + suspend fun getDebrisExchangeList(): ServiceResult> + + /** + * 猛犸森林抽奖记录 + * + */ + @GET("act/seize-treasure/convert/record") + suspend fun getExchangeRecord( + @Query("convertType") convertType: Int, + @Query("page") page: Int, + @Query("pageSize") pageSize: Int + ): ServiceResult> + } + +} \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/DemoCache.java b/core/src/main/java/com/yizhuan/xchat_android_core/DemoCache.java index b05a42a64..81748062a 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/DemoCache.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/DemoCache.java @@ -58,6 +58,7 @@ public class DemoCache { private static final String KEY_RADISH_TIPS = "key_radish_tips"; private static final String KEY_KICK_OUT_ROOM = "kick_out_room"; private static final String KEY_BOUND_AUTH_CODE = "key_bound_auth_code"; + private static final String KEY_MY_FAIRY_INDEX = "key_my_fairy_index"; private static StatusBarNotificationConfig notificationConfig; @@ -335,4 +336,12 @@ public class DemoCache { return SettingsPref.instance().getBoolean(KEY_BOUND_AUTH_CODE, false); } + public static void saveMyFairyIndex(int index) { + SettingsPref.instance().putInt(KEY_MY_FAIRY_INDEX, index); + } + + public static int readMyFairyIndex() { + return SettingsPref.instance().getInt(KEY_MY_FAIRY_INDEX, 0); + } + } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/SimpleUserInfo.kt b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/SimpleUserInfo.kt index fd40f4d8e..61b7ed315 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/SimpleUserInfo.kt +++ b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/SimpleUserInfo.kt @@ -3,8 +3,9 @@ package com.yizhuan.xchat_android_core.gift.bean import java.io.Serializable data class SimpleUserInfo( - val nick: String? = null, + val nick: String = "", val uid: Long = 0L, val erbanNo: Long = 0L, - val avatar: String? = null + val avatar: String = "", + val userDesc: String = "" ) : Serializable diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java index d33381531..d48b902db 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java @@ -18,6 +18,7 @@ import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUS import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_DRAW_GIFT_EFFECT; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_LEVEL_UP; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_LEVEL_UP_NOTICE; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_MEMBER_COUNT; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_ROOM_NOTIFY; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_TOPIC; @@ -50,6 +51,8 @@ import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUS import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SIGN_IN; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_CLANAPPLY; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_CLANNORMAL; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_FAIRY_ASK_FOR; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_FAIRY_SEND; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_HALL_APPLY_EXIT; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_HALL_APPLY_JOIN; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_HALL_MANAGER_INVITE; @@ -632,6 +635,14 @@ public class CustomAttachParser implements MsgAttachmentParser { attachment = new RoomFreeGiftAttachment(first, second); } break; + case CUSTOM_MSG_FAIRY: + if (second == CUSTOM_MSG_SUB_FAIRY_SEND || + second == CUSTOM_MSG_SUB_FAIRY_ASK_FOR) { + attachment = new FairySendAttachment(first, second); + } else { + attachment = new FairyMsgAttachment(first, second); + } + break; default: LogUtils.e(ResUtil.getString(R.string.custom_bean_customattachparser_01) + first + " second=" + second); break; diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java index dbcd6a8e0..a4fea80e0 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java @@ -428,6 +428,24 @@ public class CustomAttachment implements MsgAttachment { public static final int ROOM_FREE_GIFT_REST = 960; public static final int ROOM_FREE_GIFT_CHANGE = 961; + public static final int CUSTOM_MSG_FAIRY = 97; // 夺宝精灵 + public static final int CUSTOM_MSG_SUB_FAIRY_SEND = 9701; // 赠送小精灵 + public static final int CUSTOM_MSG_SUB_FAIRY_ASK_FOR = 9702; // 索要小精灵 + + public static final int CUSTOM_MSG_SUB_DRAW_GIFT_L1 = 9711; // 抽奖L1礼物 + public static final int CUSTOM_MSG_SUB_DRAW_GIFT_L2 = 9712; // 抽奖L2礼物 + public static final int CUSTOM_MSG_SUB_DRAW_GIFT_L3 = 9713; // 抽奖L3礼物 + public static final int CUSTOM_MSG_SUB_DRAW_GIFT_L4 = 9714; // 抽奖L4礼物 + public static final int CUSTOM_MSG_SUB_DRAW_GIFT_L5 = 9715; // 抽奖L5礼物 + + public static final int CUSTOM_MSG_SUB_DRAW_BALL_L1 = 9721; // 抽奖L1精灵球 + public static final int CUSTOM_MSG_SUB_DRAW_BALL_L2 = 9722; // 抽奖L2精灵球 + public static final int CUSTOM_MSG_SUB_DRAW_BALL_L3 = 9723; // 抽奖L3精灵球 + + public static final int CUSTOM_MSG_SUB_CONVERT_L1 = 9731; // 召唤L1 + public static final int CUSTOM_MSG_SUB_CONVERT_L2 = 9732; // 召唤L2 + public static final int CUSTOM_MSG_SUB_CONVERT_L3 = 9733; // 召唤L3 + /** * 自定义消息附件的类型,根据该字段区分不同的自定义消息 */ diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/FairyMsgAttachment.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/FairyMsgAttachment.java new file mode 100644 index 000000000..f75953201 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/FairyMsgAttachment.java @@ -0,0 +1,36 @@ +package com.yizhuan.xchat_android_core.im.custom.bean; + +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import com.yizhuan.xchat_android_core.treasurefairy.FairyMsgInfo; + +/** + * Created by chenran on 2017/10/4. + */ + +public class FairyMsgAttachment extends CustomAttachment { + private FairyMsgInfo fairyMsgInfo; + + public FairyMsgAttachment(int first, int second) { + super(first, second); + } + + @Override + protected void parseData(JSONObject jsonObject) { + fairyMsgInfo = new Gson().fromJson(jsonObject.toJSONString(), FairyMsgInfo.class); + } + + public FairyMsgInfo getFairyMsgInfo() { + return fairyMsgInfo; + } + + public void setFairyMsgInfo(FairyMsgInfo fairyMsgInfo) { + this.fairyMsgInfo = fairyMsgInfo; + } + + @Override + protected JSONObject packData() { + return null; + } + +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/FairySendAttachment.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/FairySendAttachment.java new file mode 100644 index 000000000..380cc1eb5 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/FairySendAttachment.java @@ -0,0 +1,104 @@ +package com.yizhuan.xchat_android_core.im.custom.bean; + +import com.alibaba.fastjson.JSONObject; + +/** + * Created by chenran on 2017/10/4. + */ + +public class FairySendAttachment extends CustomAttachment { + private long uid; + private String nick; + private long targetUid; + private String targetNick; + private long elfId; + private String elfPicUrl; + private String elfName; + private String msgContent; + + public FairySendAttachment(int first, int second) { + super(first, second); + } + + @Override + protected void parseData(JSONObject jsonObject) { + uid = jsonObject.getLongValue("uid"); + targetUid = jsonObject.getLongValue("targetUid"); + elfId = jsonObject.getLongValue("elfId"); + elfPicUrl = jsonObject.getString("elfPicUrl"); + msgContent = jsonObject.getString("msgContent"); + targetNick = jsonObject.getString("targetNick"); + nick = jsonObject.getString("nick"); + elfName = jsonObject.getString("elfName"); + } + + public long getUid() { + return uid; + } + + public void setUid(long uid) { + this.uid = uid; + } + + public long getTargetUid() { + return targetUid; + } + + public void setTargetUid(long targetUid) { + this.targetUid = targetUid; + } + + public long getElfId() { + return elfId; + } + + public void setElfId(long elfId) { + this.elfId = elfId; + } + + public String getElfPicUrl() { + return elfPicUrl; + } + + public void setElfPicUrl(String elfPicUrl) { + this.elfPicUrl = elfPicUrl; + } + + public String getMsgContent() { + return msgContent; + } + + public void setMsgContent(String msgContent) { + this.msgContent = msgContent; + } + + public String getTargetNick() { + return targetNick; + } + + public void setTargetNick(String targetNick) { + this.targetNick = targetNick; + } + + public String getElfName() { + return elfName; + } + + public void setElfName(String elfName) { + this.elfName = elfName; + } + + public String getNick() { + return nick; + } + + public void setNick(String nick) { + this.nick = nick; + } + + @Override + protected JSONObject packData() { + return null; + } + +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java index a8da261ee..f974a857d 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java @@ -10,6 +10,7 @@ import com.yizhuan.xchat_android_core.base.IModel; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.home.bean.MainTabInfo; import com.yizhuan.xchat_android_core.initial.bean.BoxInfo; +import com.yizhuan.xchat_android_core.initial.bean.FairyOpenInfo; import com.yizhuan.xchat_android_core.initial.bean.InitInfo; import java.util.List; @@ -71,4 +72,10 @@ public interface IInitialModel extends IModel { int getDynamicRefresh(); int getDefaultHomeTab(); + + Single requestFairyOpenInfo(); + + @Nullable + FairyOpenInfo getFairyOpenInfo(); + } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java index ad0635660..d98958d3a 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java @@ -17,17 +17,20 @@ import com.bumptech.glide.request.target.Target; import com.netease.nim.uikit.support.glide.GlideApp; import com.yizhuan.xchat_android_core.R; import com.yizhuan.xchat_android_core.DemoCache; +import com.yizhuan.xchat_android_core.auth.event.LogoutEvent; import com.yizhuan.xchat_android_core.base.BaseModel; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.certification.CertificationModel; import com.yizhuan.xchat_android_core.home.bean.MainTabInfo; import com.yizhuan.xchat_android_core.home.bean.MainTabType; import com.yizhuan.xchat_android_core.initial.bean.BoxInfo; +import com.yizhuan.xchat_android_core.initial.bean.FairyOpenInfo; import com.yizhuan.xchat_android_core.initial.bean.InitInfo; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.noble.NobleDataManager; import com.yizhuan.xchat_android_core.public_chat_hall.manager.PublicChatHallDataManager; import com.yizhuan.xchat_android_core.room.face.DynamicFaceModel; +import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent; import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils; import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils; import com.yizhuan.xchat_android_core.utils.net.RxHelper; @@ -39,6 +42,9 @@ import com.yizhuan.xchat_android_library.utils.NetworkUtils; import com.yizhuan.xchat_android_library.utils.ResUtil; import com.yizhuan.xchat_android_library.utils.config.BasicConfig; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + import java.io.File; import java.util.ArrayList; import java.util.Arrays; @@ -116,6 +122,11 @@ public class InitialModel extends BaseModel implements IInitialModel { * 发现萌新列表展示等级配置 */ private int findNewbieCharmLevel; + /** + * 宝箱开关,等级限制 + */ + @Nullable + private FairyOpenInfo fairyOpenInfo; @Nullable private InitInfo cacheInitInfo; @@ -156,6 +167,16 @@ public class InitialModel extends BaseModel implements IInitialModel { return model; } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLoadLoginUserInfoEvent(LoadLoginUserInfoEvent event) { + getFairyOpenInfo(); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLogoutEvent(LogoutEvent event) { + fairyOpenInfo = null; + } + @Override @NonNull public LiveData> getMainTabInfosLiveData() { @@ -519,6 +540,22 @@ public class InitialModel extends BaseModel implements IInitialModel { return findNewbieCharmLevel; } + @Override + public Single requestFairyOpenInfo() { + return api.getFairyOpenInfo() + .compose(RxHelper.handleCommon()); + } + + @Nullable + @Override + public FairyOpenInfo getFairyOpenInfo() { + //每次请求都刷新 + requestFairyOpenInfo() + .doOnSuccess(fairyOpenInfo -> this.fairyOpenInfo = fairyOpenInfo) + .subscribe(); + return fairyOpenInfo; + } + private interface Api { /** * 客户端初始化 @@ -545,5 +582,14 @@ public class InitialModel extends BaseModel implements IInitialModel { */ @GET("/app/bottomBar/getCurrentAppBottomBar") Single>> getMainTabList(); + + /** + * 夺宝精灵开放状态 + * + * @return - + */ + @GET("act/seize-treasure/status") + Single> getFairyOpenInfo(); + } } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/bean/FairyOpenInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/bean/FairyOpenInfo.java new file mode 100644 index 000000000..033058bf7 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/bean/FairyOpenInfo.java @@ -0,0 +1,22 @@ +package com.yizhuan.xchat_android_core.initial.bean; + +public class FairyOpenInfo { + private int levelLimit; + private boolean open; + + public int getLevelLimit() { + return levelLimit; + } + + public void setLevelLimit(int levelLimit) { + this.levelLimit = levelLimit; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java b/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java index e2c248aef..7e7c1ff2a 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java @@ -252,6 +252,12 @@ public class RoomEvent { //深海奇缘礼物全服飘屏通知 public static final int LUCKY_SEA_GIFT_SERVER_NOTIFY = 100; + public static final int FAIRY_DRAW_GIFT_L4 = 102; + public static final int FAIRY_DRAW_GIFT_L5 = 103; + public static final int FAIRY_CONVERT_L1 = 104; + public static final int FAIRY_CONVERT_L2 = 105; + public static final int FAIRY_CONVERT_L3 = 106; + private int event = NONE; private int micPosition = Integer.MIN_VALUE; private int posState = -1; diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/statistic/protocol/StatisticsProtocol.java b/core/src/main/java/com/yizhuan/xchat_android_core/statistic/protocol/StatisticsProtocol.java index d180c5c14..90479ff5c 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/statistic/protocol/StatisticsProtocol.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/statistic/protocol/StatisticsProtocol.java @@ -618,6 +618,8 @@ public interface StatisticsProtocol { String EVENT_USERCENTER_QUICK_ENTRYSUCCESS_CLICK = "usercenter_quick_entrysuccess_click";//个人中心快捷进房点击成功匹配 String EVENT_USERCENTER_BANNER_CLICK = "usercenter_banner_click";//个人中心banner模块点击 - + String EVENT_TREASURE_ELF_ENTRANCE_CLICK = "treasure_elf_entrance_click";//夺宝精灵主入口点击 + String EVENT_TREASURE_ELF_SCREEN_ENTRANCE_CLICK = "treasure_elf_screen_entrance_click";//夺宝精灵公屏入口点击 + String EVENT_TREASURE_ELF_LOTTERY_CLICK = "treasure_elf_lottery_click";//夺宝精灵抽奖点击 } diff --git a/library/build.gradle b/library/build.gradle index 435e15655..eb8cf599a 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -137,6 +137,8 @@ dependencies { //流式布局 api 'com.google.android.flexbox:flexbox:3.0.0' + api 'io.github.razerdp:BasePopup:3.2.1' + } repositories { mavenCentral()