[Modify]夺宝精灵接入
@@ -969,6 +969,14 @@
|
||||
android:exported="false"
|
||||
android:screenOrientation="portrait" />
|
||||
|
||||
<activity
|
||||
android:name=".treasurefairy.HomeFairyActivity"
|
||||
android:theme="@style/dialog_web_view_activity" />
|
||||
|
||||
<activity
|
||||
android:name=".ui.webview.FairyDialogWebViewActivity"
|
||||
android:theme="@style/dialog_web_view_activity" />
|
||||
|
||||
<meta-data
|
||||
android:name="notch.config"
|
||||
android:value="portrait|landscape" />
|
||||
|
@@ -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<IAvRoomView, AvRoomPresenter
|
||||
mVsNobleOpen = findViewById(R.id.vs_noble_open_notice);
|
||||
vsTaskTips = findViewById(R.id.vs_task_tips);
|
||||
viewpager = findViewById(R.id.fragment_container);
|
||||
InitialModel.get().getFairyOpenInfo();
|
||||
|
||||
IMNetEaseManager.get().getChatRoomEventObservable()
|
||||
.compose(bindToLifecycle())
|
||||
|
@@ -49,7 +49,7 @@ class RoomPKSearchActivity : BaseViewBindingActivity<ActivityRoomPkSearchBinding
|
||||
|
||||
rvDelegate = RVDelegate.Builder<SimpleRoomInfo>()
|
||||
.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)
|
||||
|
@@ -55,12 +55,12 @@ public class HomePartyPresenter extends BaseRoomPresenter<IHomePartyView> {
|
||||
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<IHomePartyView> {
|
||||
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<IHomePartyView> {
|
||||
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<IHomePartyView> {
|
||||
return ChatRoomMessageBuilder.createChatRoomCustomMessage(
|
||||
// 聊天室id
|
||||
roomInfo.getRoomId() + "",
|
||||
// 自定义消息
|
||||
// 自定義消息
|
||||
faceAttachment
|
||||
);
|
||||
}
|
||||
@@ -178,13 +178,13 @@ public class HomePartyPresenter extends BaseRoomPresenter<IHomePartyView> {
|
||||
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<FaceReceiveInfo> 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<IHomePartyView> {
|
||||
|
||||
|
||||
/**
|
||||
* 本地更新房主位信息或者关闭离线模式
|
||||
* 本地更新房主位信息或者關閉離線模式
|
||||
*/
|
||||
@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<IHomePartyView> {
|
||||
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<String>() {
|
||||
@Override
|
||||
@@ -273,7 +273,7 @@ public class HomePartyPresenter extends BaseRoomPresenter<IHomePartyView> {
|
||||
|
||||
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<IHomePartyView> {
|
||||
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);
|
||||
|
@@ -45,6 +45,11 @@ public class SingleRoomPresenter extends BaseRoomPresenter<ISingleRoomView> {
|
||||
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);
|
||||
|
@@ -46,7 +46,7 @@ class SingleRoomPKSearchActivity : BaseViewBindingActivity<ActivitySingleRoomPkS
|
||||
roomPKSearchAdapter = SingleRoomPKSearchAdapter()
|
||||
rvDelegate = RVDelegate.Builder<SimpleRoomInfo>()
|
||||
.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)
|
||||
|
@@ -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) {
|
||||
|
@@ -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<ChatRoomMessage> by lazy { ArrayList() }
|
||||
|
||||
private var fairyAnimation: Animation? = null
|
||||
private var fairyDisposable: Disposable? = null
|
||||
private val fairyMessages: MutableList<Pair<Int, ChatRoomMessage>> 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<Int, ChatRoomMessage>) {
|
||||
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<Int, ChatRoomMessage>) {
|
||||
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
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 幸運池飄屏
|
||||
*
|
||||
|
27
app/src/main/java/com/yizhuan/erban/base/Event.kt
Normal file
@@ -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<out T>(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
|
||||
}
|
@@ -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));
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -54,7 +54,7 @@ class DecorationCommonFragment : BaseViewBindingFragment<FragmentDecorationCommo
|
||||
.setAdapter(decorationAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setRefreshLayout(binding.swipeRefresh)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(mContext, ResUtil.getString(R.string.decoration_view_decorationcommonfragment_01)))
|
||||
.setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.decoration_view_decorationcommonfragment_01)))
|
||||
.setLayoutManager(
|
||||
if (dressType == DecorationStoreActivity.TAB_USER_CARD) {
|
||||
LinearLayoutManager(mContext)
|
||||
|
@@ -64,7 +64,7 @@ class GoldDetailActivity : BaseViewBindingActivity<ActivityGoldDetailBinding>(),
|
||||
.setLayoutManager(LinearLayoutManager(context))
|
||||
.setRecyclerView(binding.mRecyclerView)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyView(
|
||||
EmptyViewHelper.createEmptyTextView(
|
||||
context,
|
||||
getString(R.string.empty_data)
|
||||
)
|
||||
|
@@ -53,7 +53,7 @@ class FansTeamJoinedActivity : BaseViewBindingActivity<ActivityFansTeamJoinedBin
|
||||
.setLayoutManager(LinearLayoutManager(this))
|
||||
.setRecyclerView(binding.rvTask)
|
||||
.setAdapter(FansTeamTaskAdapter())
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.erban_fansteam_fansteamjoinedactivity_01)))
|
||||
.setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.erban_fansteam_fansteamjoinedactivity_01)))
|
||||
.build()
|
||||
|
||||
binding.llRank.setOnClickListener {
|
||||
|
@@ -41,7 +41,7 @@ class FansTeamListActivity : BaseViewBindingActivity<ActivityFansTeamListBinding
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setAdapter(FansTeamListAdapter())
|
||||
.setPageSize(pageSize)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.erban_fansteam_fansteamlistactivity_02)))
|
||||
.setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.erban_fansteam_fansteamlistactivity_02)))
|
||||
.build()
|
||||
|
||||
binding.swipeRefresh.setOnRefreshListener {
|
||||
|
@@ -50,7 +50,7 @@ class RoomHistoryListActivity : BaseViewBindingActivity<ActivityRoomHistoryListB
|
||||
.setLayoutManager(LinearLayoutManager(this))
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setAdapter(RoomHistoryListAdapter())
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.home_activity_roomhistorylistactivity_06)))
|
||||
.setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.home_activity_roomhistorylistactivity_06)))
|
||||
.build()
|
||||
|
||||
binding.swipeRefresh.setOnRefreshListener {
|
||||
|
@@ -44,7 +44,7 @@ class VisitorListActivity : BaseViewBindingActivity<ActivityVisitorListBinding>(
|
||||
.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)
|
||||
|
@@ -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);
|
||||
|
@@ -52,7 +52,7 @@ class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>()
|
||||
.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()
|
||||
|
@@ -48,7 +48,7 @@ class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
|
||||
.setAdapter(roomHotAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyView(
|
||||
EmptyViewHelper.createEmptyTextView(
|
||||
context,
|
||||
ResUtil.getString(R.string.home_fragment_roomgamefragment_01)
|
||||
)
|
||||
|
@@ -74,7 +74,7 @@ class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
|
||||
.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()
|
||||
|
||||
|
@@ -72,7 +72,7 @@ class GiveGoldActivity : BaseViewBindingActivity<ActivityGiveGoldBinding>() {
|
||||
.setLayoutManager(LinearLayoutManager(this))
|
||||
.setPageSize(20)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyView(
|
||||
EmptyViewHelper.createEmptyTextView(
|
||||
this,
|
||||
ResUtil.getString(R.string.me_give_gold_empty)
|
||||
)
|
||||
|
@@ -40,7 +40,7 @@ class GiveGoldSearchActivity : BaseActivity(), TextWatcher {
|
||||
val adapter = GiveSearchAdapter()
|
||||
rvDelegate = RVDelegate.Builder<SearchRoomInfo>()
|
||||
.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)
|
||||
|
@@ -45,7 +45,7 @@ class GiveDiamondFragment : BaseViewBindingFragment<FragmentGiveDiamondBinding>(
|
||||
.setLayoutManager(LinearLayoutManager(context))
|
||||
.setPageSize(20)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyView(
|
||||
EmptyViewHelper.createEmptyTextView(
|
||||
context,
|
||||
ResUtil.getString(R.string.me_give_gold_empty)
|
||||
)
|
||||
|
@@ -46,7 +46,7 @@ class GiveGiftFragment : BaseViewBindingFragment<FragmentGiveGiftBinding>() {
|
||||
.setLayoutManager(LinearLayoutManager(context))
|
||||
.setPageSize(20)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyView(
|
||||
EmptyViewHelper.createEmptyTextView(
|
||||
context,
|
||||
ResUtil.getString(R.string.me_give_gold_empty)
|
||||
)
|
||||
|
@@ -86,7 +86,7 @@ class CpInviteRecordActivity : BaseBindingActivity<ActivityCpInviteRecordBinding
|
||||
}
|
||||
val layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
|
||||
mBinding.recyclerView.layoutManager = layoutManager
|
||||
adapter.emptyView = EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.cp_activity_cpinviterecordactivity_02))
|
||||
adapter.emptyView = EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.cp_activity_cpinviterecordactivity_02))
|
||||
adapter.bindToRecyclerView(mBinding.recyclerView)
|
||||
mBinding.swipeRefresh.setOnRefreshListener {
|
||||
queryRecord(type)
|
||||
|
@@ -80,7 +80,7 @@ class SkillHomeActivity : BaseBindingActivity<ActivitySkillHomeBinding>() {
|
||||
adapter.setNewData(it)
|
||||
if (it.isEmpty()) {
|
||||
adapter.setHeaderAndEmpty(false)
|
||||
adapter.emptyView = createEmptyView()
|
||||
adapter.emptyView = createEmptyTextView()
|
||||
}
|
||||
dialogManager.dismissDialog()
|
||||
},
|
||||
@@ -89,15 +89,15 @@ class SkillHomeActivity : BaseBindingActivity<ActivitySkillHomeBinding>() {
|
||||
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 =
|
||||
|
@@ -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<DrawInfo?>()
|
||||
val drawInfoLiveData: MutableLiveData<DrawInfo?> = _drawInfoLiveData
|
||||
|
||||
private val _prizeInfoListLiveData = MutableLiveData<List<PrizeInfo>?>()
|
||||
val prizeInfoListLiveData: MutableLiveData<List<PrizeInfo>?> = _prizeInfoListLiveData
|
||||
|
||||
private val _resultLiveData = MutableLiveData<Event<List<PrizeInfo>>?>()
|
||||
val resultLiveData: MutableLiveData<Event<List<PrizeInfo>>?> = _resultLiveData
|
||||
|
||||
private val _showGetKeyLiveData = MutableLiveData<Event<Boolean>>()
|
||||
val showGetKeyLiveData: LiveData<Event<Boolean>> = _showGetKeyLiveData
|
||||
|
||||
private val _drawForestLiveData = MutableLiveData<Event<List<PrizeInfo>>?>()
|
||||
val drawForestLiveData: MutableLiveData<Event<List<PrizeInfo>>?> = _drawForestLiveData
|
||||
|
||||
private val _forestInfoLiveData = MutableLiveData<ForestInfo?>()
|
||||
val forestInfoLiveData: MutableLiveData<ForestInfo?> = _forestInfoLiveData
|
||||
|
||||
private val _forestPoolLiveData = MutableLiveData<Pair<Int, List<PrizeInfo>?>?>()
|
||||
val forestPoolLiveData: MutableLiveData<Pair<Int, List<PrizeInfo>?>?> = _forestPoolLiveData
|
||||
|
||||
private val _forestRecordLiveData = MutableLiveData<ListResult<PrizeInfo>>()
|
||||
val forestRecordLiveData: LiveData<ListResult<PrizeInfo>> = _forestRecordLiveData
|
||||
|
||||
private val _myFairyInfoLiveData = MutableLiveData<MyFairyInfo?>()
|
||||
val myFairyInfoLiveData: MutableLiveData<MyFairyInfo?> = _myFairyInfoLiveData
|
||||
|
||||
private val _friendsListLiveData = MutableLiveData<List<SimpleUserInfo>?>()
|
||||
val friendsListLiveData: MutableLiveData<List<SimpleUserInfo>?> = _friendsListLiveData
|
||||
|
||||
private val _sendFairyLiveData = MutableLiveData<Event<Boolean>>()
|
||||
val sendFairyLiveData: LiveData<Event<Boolean>> = _sendFairyLiveData
|
||||
|
||||
private val _sendFairyRecordLiveData = MutableLiveData<ListResult<SendFairyInfo>>()
|
||||
val sendFairyRecordLiveData: LiveData<ListResult<SendFairyInfo>> = _sendFairyRecordLiveData
|
||||
|
||||
private val _compoundFairyInfosLiveData = MutableLiveData<SparseArray<FairyInfo>?>()
|
||||
val compoundFairyInfosLiveData: MutableLiveData<SparseArray<FairyInfo>?> = _compoundFairyInfosLiveData
|
||||
|
||||
private val _testResultLiveData = MutableLiveData<Event<FairyInfo>?>()
|
||||
val testResultLiveData: MutableLiveData<Event<FairyInfo>?> = _testResultLiveData
|
||||
|
||||
private val _testLegendResultLiveData = MutableLiveData<Event<FairyInfo>?>()
|
||||
val testLegendResultLiveData: MutableLiveData<Event<FairyInfo>?> = _testLegendResultLiveData
|
||||
|
||||
private val _testRecordLiveData = MutableLiveData<ListResult<TestFairyRecordInfo>>()
|
||||
val testRecordLiveData: LiveData<ListResult<TestFairyRecordInfo>> = _testRecordLiveData
|
||||
|
||||
private val _exchangeGiftListLiveData = MutableLiveData<List<ExchangeGiftInfo>?>()
|
||||
val exchangeGiftListLiveData: MutableLiveData<List<ExchangeGiftInfo>?> = _exchangeGiftListLiveData
|
||||
|
||||
private val _exchangeGiftLiveData = MutableLiveData<Event<ExchangeGiftInfo>>()
|
||||
val exchangeGiftLiveData: LiveData<Event<ExchangeGiftInfo>> = _exchangeGiftLiveData
|
||||
|
||||
private val _debrisExchangeListLiveData = MutableLiveData<List<ExchangeGiftInfo>?>()
|
||||
val debrisExchangeListLiveData: MutableLiveData<List<ExchangeGiftInfo>?> = _debrisExchangeListLiveData
|
||||
|
||||
private val _debrisExchangeLiveData = MutableLiveData<Event<ExchangeGiftInfo>>()
|
||||
val debrisExchangeLiveData: LiveData<Event<ExchangeGiftInfo>> = _debrisExchangeLiveData
|
||||
|
||||
private val _exchangeFairyRecordLiveData = MutableLiveData<ListResult<ExchangeGiftInfo>>()
|
||||
val exchangeFairyRecordLiveData: LiveData<ListResult<ExchangeGiftInfo>> =
|
||||
_exchangeFairyRecordLiveData
|
||||
|
||||
private val _exchangeDebrisRecordLiveData = MutableLiveData<ListResult<ExchangeGiftInfo>>()
|
||||
val exchangeDebrisRecordLiveData: LiveData<ListResult<ExchangeGiftInfo>> =
|
||||
_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<FairyInfo>) {
|
||||
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<FairyInfo>): 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)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogHomeBinding>() {
|
||||
private var selectIndex = 0
|
||||
private var targetIndex: Int = -1
|
||||
private val removeRunnable = Runnable { binding.llPrizeHint.removeAllViews() }
|
||||
private val hintPrizeCacheList = ArrayList<PrizeInfo>()
|
||||
|
||||
|
||||
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<View>(R.id.tv_prize_name) as TextView).text =
|
||||
prizeInfo.rewardName
|
||||
(linearLayout.findViewById<View>(R.id.tv_prize_num) as TextView).text =
|
||||
"x" + prizeInfo.rewardNum
|
||||
}
|
||||
|
||||
}
|
@@ -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<ExchangeGiftInfo, BaseViewHolder>(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)
|
||||
}
|
||||
|
||||
}
|
@@ -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<ExchangeGiftInfo, BaseViewHolder>(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())
|
||||
}
|
||||
|
||||
}
|
@@ -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<ExchangeGiftInfo, BaseViewHolder>(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)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -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<ExchangeGiftInfo, BaseViewHolder>(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)
|
||||
}
|
||||
|
||||
}
|
@@ -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<? extends CharSequence> mTitleList;
|
||||
|
||||
private int textSize = 15;
|
||||
private float minScale = 1f;
|
||||
private OnItemSelectListener mOnItemSelectListener;
|
||||
|
||||
public ForestIndicatorAdapter(Context context, List<? extends CharSequence> 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);
|
||||
}
|
||||
}
|
@@ -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<PrizeInfo, BaseViewHolder>(
|
||||
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<ImageView>(R.id.iv_prize_icon).load(item.rewardPicUrl)
|
||||
helper.setText(R.id.tv_prize_name, "${item.rewardName}x${item.rewardNum}")
|
||||
}
|
||||
|
||||
}
|
@@ -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<PrizeInfo, BaseViewHolder>(R.layout.treasure_fairy_item_forest_prizes_child) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: PrizeInfo) {
|
||||
helper.getView<ImageView>(R.id.iv_prize_icon).load(item.rewardPicUrl)
|
||||
helper.setText(R.id.tv_prize_name, item.rewardName)
|
||||
}
|
||||
|
||||
}
|
@@ -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<PrizeInfo, BaseViewHolder>(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)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -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<PrizeInfo, BaseViewHolder>(
|
||||
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<ImageView>(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)
|
||||
}
|
||||
|
||||
}
|
@@ -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<SimpleUserInfo, BaseViewHolder>(R.layout.treasure_fairy_item_my_fairy_friend) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: SimpleUserInfo) {
|
||||
helper.getView<ImageView>(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) })
|
||||
}
|
||||
|
||||
}
|
@@ -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<SendFairyInfo, BaseViewHolder>(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<ImageView>(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}”精靈卡"
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -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<FairyInfo, BaseViewHolder>(R.layout.treasure_fairy_item_test_fairy) {
|
||||
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: FairyInfo) {
|
||||
helper.getView<ImageView>(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
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TestFairyRecordInfo, BaseViewHolder>(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}" })
|
||||
}
|
||||
|
||||
}
|
@@ -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<FairyInfo, BaseViewHolder>(R.layout.treasure_fairy_item_forest_prize_single) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: FairyInfo) {
|
||||
helper.getView<ImageView>(R.id.iv_prize_icon).load(item.elfPicUrl)
|
||||
helper.setText(R.id.tv_prize_name, item.elfName)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogExchangeBinding>() {
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogTestFairyResultBinding>() {
|
||||
|
||||
private lateinit var rvDelegate: RVDelegate<ExchangeGiftInfo>
|
||||
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<ExchangeGiftInfo>()
|
||||
.setAdapter(prizeAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setLayoutManager(
|
||||
LinearLayoutManager(context)
|
||||
)
|
||||
.build()
|
||||
|
||||
rvDelegate.setNewData(arrayListOf(prizeInfoList.peekContent()))
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogExchangeRecordBinding>() {
|
||||
|
||||
|
||||
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()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogForestBinding>() {
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogForestPrizeBinding>() {
|
||||
|
||||
private lateinit var rvDelegate: RVDelegate<PrizeInfo>
|
||||
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<PrizeInfo>()
|
||||
.setAdapter(prizeAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setLayoutManager(
|
||||
if (isShowDateSingle) {
|
||||
LinearLayoutManager(context)
|
||||
} else {
|
||||
GridLayoutManager(context, 3, LinearLayoutManager.VERTICAL, false)
|
||||
}
|
||||
)
|
||||
.build()
|
||||
|
||||
rvDelegate.setNewData(showPrizeInfoList)
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogForestRecordBinding>() {
|
||||
|
||||
|
||||
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(),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -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<View>(R.id.tv_rule).setOnClickListener {
|
||||
FairyDialogWebViewActivity.start(context, UriProvider.getFairyRule())
|
||||
dismiss()
|
||||
}
|
||||
findViewById<View>(R.id.tv_record).setOnClickListener {
|
||||
FairyDialogWebViewActivity.start(context, UriProvider.getFairyRecord())
|
||||
dismiss()
|
||||
}
|
||||
findViewById<View>(R.id.tv_rank).setOnClickListener {
|
||||
FairyDialogWebViewActivity.start(context, UriProvider.getFairySuperior())
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
fun show(anchor: View?, popupGravity: Int) {
|
||||
setPopupGravity(popupGravity)
|
||||
showPopupWindow(anchor)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogHomePrizeBinding>() {
|
||||
|
||||
override var width = WindowManager.LayoutParams.MATCH_PARENT
|
||||
override var gravity = Gravity.BOTTOM
|
||||
|
||||
private lateinit var rvDelegate: RVDelegate<PrizeInfo>
|
||||
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<PrizeInfo>()
|
||||
.setAdapter(prizeAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setLayoutManager(
|
||||
if (isSingle) {
|
||||
LinearLayoutManager(context)
|
||||
} else {
|
||||
GridLayoutManager(context, 4, LinearLayoutManager.VERTICAL, false)
|
||||
}
|
||||
)
|
||||
.build()
|
||||
rvDelegate.setNewData(prizeInfoList)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogMyFairyBinding>() {
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogMyFairyRecordBinding>() {
|
||||
|
||||
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<SendFairyInfo>
|
||||
private lateinit var recordAdapter: MyFairyRecordAdapter
|
||||
private val viewModel: FairyViewModel by activityViewModels()
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun init() {
|
||||
|
||||
recordAdapter = MyFairyRecordAdapter()
|
||||
rvDelegate = RVDelegate.Builder<SendFairyInfo>()
|
||||
.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)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogMyFairySearchFriendBinding>() {
|
||||
|
||||
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<SimpleUserInfo>
|
||||
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<SimpleUserInfo>()
|
||||
.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())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogMyFairySendBinding>() {
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogTestFairyBinding>() {
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyDialogTestFairyRecordBinding>() {
|
||||
|
||||
|
||||
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<TestFairyRecordInfo>
|
||||
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<TestFairyRecordInfo>()
|
||||
.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)
|
||||
}
|
||||
}
|
@@ -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<TreasureFairyDialogTestFairyResultBinding>() {
|
||||
|
||||
private lateinit var rvDelegate: RVDelegate<FairyInfo>
|
||||
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<FairyInfo>()
|
||||
.setAdapter(prizeAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setLayoutManager(
|
||||
LinearLayoutManager(context)
|
||||
)
|
||||
.build()
|
||||
|
||||
rvDelegate.setNewData(arrayListOf(fairyInfo))
|
||||
viewModel.cleanTestParam()
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyFragmentExchangeDebrisBinding>() {
|
||||
|
||||
|
||||
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<ExchangeGiftInfo>
|
||||
private lateinit var debrisAdapter: ExchangeDebrisAdapter
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun init() {
|
||||
debrisAdapter = ExchangeDebrisAdapter()
|
||||
rvDelegate = RVDelegate.Builder<ExchangeGiftInfo>()
|
||||
.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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -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<TreasureFairyFragmentExchangeRecordDebrisBinding>() {
|
||||
|
||||
|
||||
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<ExchangeGiftInfo>
|
||||
private lateinit var prizeAdapter: ExchangeDebrisRecordAdapter
|
||||
private val viewModel: FairyViewModel by activityViewModels()
|
||||
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun init() {
|
||||
prizeAdapter = ExchangeDebrisRecordAdapter()
|
||||
rvDelegate = RVDelegate.Builder<ExchangeGiftInfo>()
|
||||
.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)
|
||||
}
|
||||
}
|
@@ -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<TreasureFairyFragmentExchangeFairyBinding>() {
|
||||
|
||||
|
||||
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<ExchangeGiftInfo>) {
|
||||
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
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyFragmentExchangeRecordFairyBinding>() {
|
||||
|
||||
|
||||
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<ExchangeGiftInfo>
|
||||
private lateinit var prizeAdapter: ExchangeFairyRecordAdapter
|
||||
private val viewModel: FairyViewModel by activityViewModels()
|
||||
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun init() {
|
||||
prizeAdapter = ExchangeFairyRecordAdapter()
|
||||
rvDelegate = RVDelegate.Builder<ExchangeGiftInfo>()
|
||||
.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)
|
||||
}
|
||||
}
|
@@ -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<TreasureFairyFragmentForestPrizesChildBinding>() {
|
||||
|
||||
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<PrizeInfo>
|
||||
private lateinit var prizeAdapter: ForestPrizesChildAdapter
|
||||
private val viewModel: FairyViewModel by activityViewModels()
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun init() {
|
||||
prizeAdapter = ForestPrizesChildAdapter()
|
||||
rvDelegate = RVDelegate.Builder<PrizeInfo>()
|
||||
.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)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyFragmentForestPrizesBinding>() {
|
||||
|
||||
|
||||
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<Fragment> = ArrayList()
|
||||
fragmentList.add(ForestPrizesChildFragment.newInstance(1))
|
||||
fragmentList.add(ForestPrizesChildFragment.newInstance(2))
|
||||
fragmentList.add(ForestPrizesChildFragment.newInstance(3))
|
||||
val pagerAdapter = UserInfoPagerAdapter(childFragmentManager, fragmentList)
|
||||
val tagList: MutableList<String> = 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)
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyFragmentForestRecordBinding>() {
|
||||
|
||||
|
||||
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<PrizeInfo>
|
||||
private lateinit var prizeAdapter: ForestPrizesRecordAdapter
|
||||
private val viewModel: FairyViewModel by activityViewModels()
|
||||
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun init() {
|
||||
prizeAdapter = ForestPrizesRecordAdapter()
|
||||
rvDelegate = RVDelegate.Builder<PrizeInfo>()
|
||||
.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)
|
||||
}
|
||||
}
|
@@ -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<TreasureFairyFragmentMyFairyBinding>() {
|
||||
|
||||
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -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<TreasureFairyFragmentTestFairyBinding>() {
|
||||
|
||||
|
||||
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<FairyInfo>
|
||||
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<FairyInfo>()
|
||||
.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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -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
|
||||
}
|
||||
}
|
@@ -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}"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -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
|
||||
}
|
||||
|
||||
}
|
@@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -45,7 +45,7 @@ class GrantedPermissionsActivity : BaseActivity() {
|
||||
rvDelegate = RVDelegate.Builder<PermissionEntity>()
|
||||
.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()
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@ class ShieldManageActivity : BaseViewBindingActivity<ActivityShieldManageBinding
|
||||
.setLayoutManager(LinearLayoutManager(this))
|
||||
.setPageSize(pageSize)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyView(
|
||||
EmptyViewHelper.createEmptyTextView(
|
||||
this,
|
||||
getString(R.string.your_shield_list_is_empty)
|
||||
)
|
||||
|
@@ -109,7 +109,7 @@ public class RVDelegate<T> {
|
||||
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);
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
95
app/src/main/java/com/yizhuan/erban/utils/MsgBuilder.kt
Normal file
@@ -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
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -98,7 +98,7 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
|
||||
.setLayoutManager(GridLayoutManager(this, 3))
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyView(
|
||||
EmptyViewHelper.createEmptyTextView(
|
||||
context,
|
||||
getString(R.string.me_no_search_results)
|
||||
)
|
||||
|
BIN
app/src/main/res/drawable-xhdpi/ic_fairy_entrance.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
app/src/main/res/drawable-xhdpi/treasure_fairy_bg_big_prize.webp
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/drawable-xhdpi/treasure_fairy_bg_elf.webp
Normal file
After Width: | Height: | Size: 139 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 809 B |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 5.7 KiB |
BIN
app/src/main/res/drawable-xhdpi/treasure_fairy_bg_forest.webp
Normal file
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 2.6 KiB |