From 213cfb97cbfce6b75e0b84e557bb1ccc2ee1e882 Mon Sep 17 00:00:00 2001 From: huangjian Date: Thu, 9 Mar 2023 18:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A4=BC=E7=89=A9=E9=9D=A2=E6=9D=BFUI=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/gift/dialog/GiftInfoVm.java | 21 +- .../nnbc123/app/ui/im/actions/GiftAction.java | 53 +- .../app/ui/widget/GiftAvatarAdapter.java | 128 ++- .../com/nnbc123/app/ui/widget/GiftDialog.java | 67 +- .../app/ui/widget/PrivateChatGiftDialog.java | 884 ++++++++++++++++++ .../res/color/color_selector_gift_all.xml | 8 + .../ic_arrow_recharge_white.png | Bin 0 -> 280 bytes .../res/drawable-xhdpi/ic_gift_diamond.png | Bin 1334 -> 1142 bytes .../drawable-xhdpi/icon_room_send_arrow.png | Bin 181 -> 449 bytes .../icon_room_send_arrow_white.png | Bin 0 -> 360 bytes .../res/drawable/bg_dialog_private_chat.xml | 21 + .../res/drawable/bg_dialog_room_operation.xml | 6 +- .../main/res/drawable/bg_gift_dialog_all.xml | 18 + .../drawable/bg_magic_dialog_button_send.xml | 10 +- app/src/main/res/drawable/common_btn_bg.xml | 13 +- .../shape_bg_gift_dialog_select_all.xml | 10 + .../res/drawable/shape_black_solid_round.xml | 7 +- .../res/drawable/shape_ffe710_20dp_round.xml | 8 + .../res/drawable/shape_gift_item_select.xml | 16 +- .../drawable/shape_gift_item_select_room.xml | 13 + .../main/res/drawable/shape_room_bg_send.xml | 2 +- .../main/res/layout/dialog_bottom_gift.xml | 187 ++-- .../res/layout/dialog_private_chat_gift.xml | 364 ++++++++ .../res/layout/layout_gift_indicator_item.xml | 2 +- .../main/res/layout/list_item_dialog_gift.xml | 30 +- .../main/res/layout/list_item_gift_avatar.xml | 17 +- app/src/main/res/values/colors.xml | 2 +- .../res/drawable-xhdpi/ic_arrow_recharge.png | Bin 307 -> 270 bytes 28 files changed, 1575 insertions(+), 312 deletions(-) create mode 100644 app/src/main/java/com/nnbc123/app/ui/widget/PrivateChatGiftDialog.java create mode 100644 app/src/main/res/color/color_selector_gift_all.xml create mode 100644 app/src/main/res/drawable-xhdpi/ic_arrow_recharge_white.png create mode 100644 app/src/main/res/drawable-xhdpi/icon_room_send_arrow_white.png create mode 100644 app/src/main/res/drawable/bg_dialog_private_chat.xml create mode 100644 app/src/main/res/drawable/bg_gift_dialog_all.xml create mode 100644 app/src/main/res/drawable/shape_bg_gift_dialog_select_all.xml create mode 100644 app/src/main/res/drawable/shape_ffe710_20dp_round.xml create mode 100644 app/src/main/res/drawable/shape_gift_item_select_room.xml create mode 100644 app/src/main/res/layout/dialog_private_chat_gift.xml diff --git a/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java b/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java index bf9880a39..7e525413c 100644 --- a/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java +++ b/app/src/main/java/com/nnbc123/app/ui/gift/dialog/GiftInfoVm.java @@ -28,48 +28,49 @@ public class GiftInfoVm extends BaseItem { public final ObservableField countText = new ObservableField<>(); - public Drawable nobleDrawable = null; + public Drawable nobleDrawable; - public Drawable radishDrawable = null; + public Drawable radishDrawable; - public Drawable radishDrawableSelected = null; + public Drawable radishDrawableSelected; /** * 是否显示新 */ - public boolean isShowNew = false; + public boolean isShowNew; /** * 显示限定 */ - public boolean isShowLimit = false; + public boolean isShowLimit; /** * 显示特定 */ - public boolean isShowEffect = false; + public boolean isShowEffect; /** * 是否显示专属礼物 */ - public boolean isExclusive = false; + public boolean isExclusive; - public boolean isLocked = false; + public boolean isLocked; public String vipIcon; + public boolean isPrivateChat; + public GiftInfoVm(Context context, GiftInfo data, boolean select, boolean isKnap) { super(context, data); this.isSelect.set(select); if (data.getConsumeType() == GiftInfo.CONSUME_TYPE_GOLD) { radishDrawable = null; radishDrawableSelected = null; - goldText.set(String.valueOf(data.getGoldPrice())); } else { radishDrawable = context.getResources().getDrawable(R.drawable.icon_radish_transparent); radishDrawableSelected = context.getResources().getDrawable(R.drawable.icon_radish_transparent_selected); - goldText.set(String.valueOf(data.getGoldPrice())); } + goldText.set(data.getGoldPrice() + "钻石"); this.isKnap.set(isKnap); updateCount(); int nobleId = data.getLevel(); diff --git a/app/src/main/java/com/nnbc123/app/ui/im/actions/GiftAction.java b/app/src/main/java/com/nnbc123/app/ui/im/actions/GiftAction.java index c391ce50c..a84950ee6 100644 --- a/app/src/main/java/com/nnbc123/app/ui/im/actions/GiftAction.java +++ b/app/src/main/java/com/nnbc123/app/ui/im/actions/GiftAction.java @@ -1,32 +1,19 @@ package com.nnbc123.app.ui.im.actions; -import android.annotation.SuppressLint; - import com.netease.nim.uikit.business.session.actions.BaseAction; -import com.netease.nim.uikit.business.session.helper.MessageListPanelHelper; import com.nnbc123.app.R; -import com.nnbc123.app.common.widget.dialog.DialogManager; import com.nnbc123.app.ui.widget.GiftDialog; -import com.nnbc123.core.gift.GiftModel; -import com.nnbc123.core.gift.bean.GiftInfo; -import com.nnbc123.core.gift.toolbox.GiftToolbox; -import com.nnbc123.core.room.queue.bean.MicMemberInfo; -import com.nnbc123.core.statistic.StatisticManager; -import com.nnbc123.core.statistic.protocol.StatisticsProtocol; -import com.nnbc123.core.utils.net.VipLevelNotEnoughException; - -import java.util.ArrayList; -import java.util.List; +import com.nnbc123.app.ui.widget.PrivateChatGiftDialog; /** * Created by xiaoyu * on 2017/10/2. */ -public class GiftAction extends BaseAction implements GiftDialog.OnGiftDialogBtnClickListener { +public class GiftAction extends BaseAction { - transient private GiftDialog giftDialog; + transient private PrivateChatGiftDialog giftDialog; public GiftAction() { super(R.drawable.icon_gift_action, R.string.gift_action); @@ -36,43 +23,11 @@ public class GiftAction extends BaseAction implements GiftDialog.OnGiftDialogBtn public void onClick() { if (giftDialog == null) { GiftDialog.GIFT_DIALOG_FROM = "私聊"; - - giftDialog = new GiftDialog(getActivity(), Long.valueOf(getAccount()), false, false, true); - giftDialog.setGiftDialogBtnClickListener(this); + giftDialog = new PrivateChatGiftDialog(getActivity(), Long.valueOf(getAccount())); giftDialog.setOnDismissListener(dialog -> giftDialog = null); } if (!giftDialog.isShowing()) { giftDialog.show(); } } - - @SuppressLint("CheckResult") - @Override - public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isknap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { - if (giftInfo == null) return; - GiftModel.get().sendPersonalGift(giftInfo.getGiftId(), micMemberInfos.get(0).getAccount(), number, msg, isknap) - .doOnError(throwable -> { - if (callback != null) { - callback.onFail(); - } - if (throwable instanceof VipLevelNotEnoughException) { - new DialogManager(getActivity()).showOkDialog("尚未达到赠送" + - giftInfo.getGiftName() + - "所需贵族等级,所需贵族等级:" + - giftInfo.getGiftVipInfo().getVipName()); - } - }) - .flatMap(serviceResult -> GiftToolbox.sendGiftPrivateChatMessage(serviceResult.getData())) - .subscribe(imMessage -> { - // 手动更新送礼物的消息 - MessageListPanelHelper.getInstance().notifyAddMessage(imMessage); - if (callback != null) { - StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_PRIVATECHAT_SENDGIFT, - "私聊_送礼物"); - callback.onSuccess(); - } - }); - - } - } \ No newline at end of file diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/GiftAvatarAdapter.java b/app/src/main/java/com/nnbc123/app/ui/widget/GiftAvatarAdapter.java index 27f642c03..059c6d93d 100644 --- a/app/src/main/java/com/nnbc123/app/ui/widget/GiftAvatarAdapter.java +++ b/app/src/main/java/com/nnbc123/app/ui/widget/GiftAvatarAdapter.java @@ -1,24 +1,22 @@ package com.nnbc123.app.ui.widget; import android.content.Context; - -import androidx.recyclerview.widget.RecyclerView; - import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.RelativeLayout; +import androidx.recyclerview.widget.RecyclerView; + import com.coorchice.library.SuperTextView; import com.nnbc123.app.R; import com.nnbc123.app.common.widget.CircleImageView; +import com.nnbc123.app.ui.utils.ImageLoadUtils; import com.nnbc123.core.manager.AvRoomDataManager; import com.nnbc123.core.room.pk.bean.PKTeamInfo; -import com.nnbc123.library.utils.ListUtils; -import com.nnbc123.app.ui.utils.ImageLoadUtils; import com.nnbc123.core.room.queue.bean.MicMemberInfo; +import com.nnbc123.library.utils.ListUtils; import java.util.ArrayList; import java.util.List; @@ -82,51 +80,41 @@ public class GiftAvatarAdapter extends RecyclerView.Adapter 0) { - micMemberInfos.get(position - 1).setSelected(!micMemberInfos.get(position - 1).isSelected()); - if (selectType == SELECT_TYPE_WHOLE_MIC && !isSelectAll()) { - selectType = SELECT_TYPE_MULTI_MIC; - } else if (selectType == SELECT_TYPE_MULTI_MIC && isSelectAll()) { - selectType = SELECT_TYPE_WHOLE_MIC; + micMemberInfos.get(position).setSelected(!micMemberInfos.get(position).isSelected()); + if (selectType == SELECT_TYPE_WHOLE_MIC && !isSelectAll()) { + selectType = SELECT_TYPE_MULTI_MIC; + } else if (selectType == SELECT_TYPE_MULTI_MIC && isSelectAll()) { + selectType = SELECT_TYPE_WHOLE_MIC; + } + + notifyDataSetChanged(); + if (onItemSelectedListener != null) { + onItemSelectedListener.onItemSelected(position); + } + } + + public void selectAll() { + if (isSelectAll()) { + selectType = SELECT_TYPE_MULTI_MIC; + for (MicMemberInfo micMemberInfo : micMemberInfos) { + micMemberInfo.setSelected(false); } } else { - if (selectType == SELECT_TYPE_WHOLE_MIC && position == 0) { - selectType = SELECT_TYPE_MULTI_MIC; - for (MicMemberInfo micMemberInfo : micMemberInfos) { - micMemberInfo.setSelected(false); - } - micMemberInfos.get(0).setSelected(true); - } else { - selectType = SELECT_TYPE_WHOLE_MIC; - for (MicMemberInfo micMemberInfo : micMemberInfos) { - micMemberInfo.setSelected(true); - } + selectType = SELECT_TYPE_WHOLE_MIC; + for (MicMemberInfo micMemberInfo : micMemberInfos) { + micMemberInfo.setSelected(true); } } notifyDataSetChanged(); if (onItemSelectedListener != null) { - onItemSelectedListener.onItemSelected(position); + onItemSelectedListener.onItemSelected(-1); } } @@ -187,7 +179,6 @@ public class GiftAvatarAdapter extends RecyclerView.Adapter luckyMsgAdapter; @Nullable private GiftInfo currentGiftInfo; @@ -164,7 +164,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene private int giftNumber = 1; private View sendContainer; private TextView tvTextGold; - private TextView tvRecharge; + private View tvRecharge; private List micMemberInfos; private View giftNumLayout; private Disposable mSubscribe; @@ -422,8 +422,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene giftIndicator = findViewById(R.id.gift_indicator); giftIndicator.initTab( tabInfoList, - context.getResources().getColor(R.color.white), - context.getResources().getColor(R.color.color_5FCCE4) + context.getResources().getColor(R.color.color_bdbfd0), + context.getResources().getColor(R.color.color_ffe710) ); //noinspection ResultOfMethodCallIgnored giftIndicator.addClick() @@ -446,8 +446,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene lineTabType.setVisibility(View.GONE); } gridView = findViewById(R.id.gridView); - indicatorView = findViewById(R.id.indicator); - indicatorView.setVisibility(View.INVISIBLE); tvTextGold = findViewById(R.id.tv_text_gold); tvRecharge = findViewById(R.id.tv_recharge); tvTextGold.setSelected(true); @@ -466,6 +464,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene giftNumberOptions = findViewById(R.id.iv_gift_number_options); avatarImage = findViewById(R.id.avatar); nickText = findViewById(R.id.nick); + llAvatarList = findViewById(R.id.ll_avatar_list); avatarList = findViewById(R.id.avatar_list); LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false); avatarList.setLayoutManager(mLayoutManager); @@ -476,7 +475,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene flLuckyDesc = findViewById(R.id.fl_lucky_desc); rvLuckyMsg = findViewById(R.id.rv_lucky_msg); tvGiftValue = findViewById(R.id.tv_gift_value); + tvSelectAll = findViewById(R.id.tv_select_all); + tvSelectAll.setSelected(false); + tvSelectAll.setOnClickListener(v -> avatarListAdapter.selectAll()); ivLuckyBagIntro.setOnClickListener(this); + findViewById(R.id.ll_gold).setOnClickListener(this); if (giftId == 0) { // 更新所有礼物 showGiftTab(); @@ -505,16 +508,18 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene View descLayout = findViewById(R.id.desc_layout); if (isInRoom && (userOnMic || uid == 0)) { - avatarList.setVisibility(View.VISIBLE); descLayout.setVisibility(View.GONE); if (micMemberInfos != null && micMemberInfos.size() > 0) { + llAvatarList.setVisibility(View.VISIBLE); avatarListAdapter = new GiftAvatarAdapter(getContext()); avatarListAdapter.setMicMemberInfos(micMemberInfos); avatarListAdapter.setOnItemSelectedListener(this); avatarList.setAdapter(avatarListAdapter); + } else { + llAvatarList.setVisibility(View.GONE); } } else { - avatarList.setVisibility(View.INVISIBLE); + llAvatarList.setVisibility(View.GONE); descLayout.setVisibility(View.VISIBLE); Single single = UserModel.get().getUserInfo(uid); @@ -614,16 +619,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene itemType = ITEM_TYPE_GOLD; tvRecharge.setVisibility(View.VISIBLE); - tvRecharge.setText(context.getText(R.string.charge)); if (goldWalletInfo == null) { return; } String goldNumText = getContext().getString(R.string.gold_num_text, goldWalletInfo.getDiamondNum()); - SpannableBuilder builder = new SpannableBuilder(); - builder.append(context.getText(R.string.gift_wallet_overage), new ForegroundColorSpan( - context.getResources().getColor(R.color.white_transparent_50))) - .append(goldNumText); - tvTextGold.setText(builder.build()); + tvTextGold.setText(goldNumText); } private void setUpdateTipsText() { @@ -682,7 +682,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene if (currentGiftInfo.isSendMsg()) { etSendMessage.setVisibility(View.VISIBLE); } - pagerList = beanTransformVm(context, currentGiftInfoList, isKnap, 8, selectGiftInfo); + pagerList = beanTransformVm(context, currentGiftInfoList, isKnap, Integer.MAX_VALUE, selectGiftInfo); setGridViewData(pagerList); if (isKnap) { tvGiftValue.setVisibility(View.VISIBLE); @@ -729,7 +729,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene .flatMap(luckyBagNoticeInfos -> Observable.intervalRange(0, Integer.MAX_VALUE, 0, 5, TimeUnit.SECONDS)) .observeOn(AndroidSchedulers.mainThread()) .subscribe(aLong -> { - int index = Math.toIntExact(aLong) % luckyMsgAdapter.getItemCount(); + int index = aLong.intValue() % luckyMsgAdapter.getItemCount(); if (index == 0) { rvLuckyMsg.scrollToPosition(index); } else { @@ -746,7 +746,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene initInfo != null && initInfo.isTwelveStarSwitch()) { llStarWeek.setVisibility(View.VISIBLE); } else { - llStarWeek.setVisibility(View.INVISIBLE); + llStarWeek.setVisibility(View.GONE); return; } @@ -835,7 +835,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene } private void updateDrawGiftTips() { - if (drawGiftHelper == null) return; + if (drawGiftHelper == null || !isShowDrawGiftModel) return; if (drawGiftHelper.getDrawGiftSize() >= 10) { int memberSize = 0; if (!userOnMic && uid > 0) { @@ -883,7 +883,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene layoutLoading.setVisibility(View.GONE); gridView.setVisibility(View.INVISIBLE); etSendMessage.setVisibility(View.GONE); - indicatorView.setVisibility(View.INVISIBLE); } private void showLoadFailedView() { @@ -892,7 +891,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene layoutEmpty.setVisibility(View.GONE); gridView.setVisibility(View.GONE); etSendMessage.setVisibility(View.GONE); - indicatorView.setVisibility(View.GONE); } private void showLoadingView() { @@ -911,7 +909,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene flLuckyDesc.setVisibility(View.GONE); gridView.setVisibility(View.VISIBLE); - indicatorView.setVisibility(View.VISIBLE); sendContainer.setVisibility(View.VISIBLE); } @@ -919,7 +916,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene if (ListUtils.isListEmpty(pagerList)) { return; } - indicatorView.initIndicator(pagerList.size()); int defaultSelectPage = 0; int defaultSelectItem = 0; wai: @@ -934,12 +930,10 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene } } } - indicatorView.setSelectedPage(defaultSelectPage); layoutEmpty.setVisibility(View.GONE); gridView.setVisibility(View.VISIBLE); - indicatorView.setVisibility(pagerList.size() > 1 ? View.VISIBLE : View.INVISIBLE); - SparseArray cacheItemView = new SparseArray<>(); + SparseArray cacheItemView = new SparseArray<>(); lastSelectedItem = pagerList.get(defaultSelectPage).get(defaultSelectItem); setGoldOrRadishText(lastSelectedItem); gridView.setAdapter(new PagerAdapter() { @@ -957,10 +951,10 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int pagePos) { - RecyclerView recyclerView; + RecyclerViewNoViewpagerScroll recyclerView; MultiTypeAdapter giftAdapter; if (cacheItemView.get(pagePos) == null) { - recyclerView = new RecyclerView(context); + recyclerView = new RecyclerViewNoViewpagerScroll(context); recyclerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); recyclerView.setLayoutManager(new GridLayoutManager(context, 4)); @@ -1005,14 +999,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene } }); gridView.setCurrentItem(defaultSelectPage); - gridView.addOnPageChangeListener(new OnPageSelectedListener() { - @Override - public void onPageSelected(int position) { - if (pagerList.size() > 1) { - indicatorView.setSelectedPage(position); - } - } - }); } private List loadGiftInfoList() { @@ -1110,7 +1096,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene @Override public void onClick(View v) { switch (v.getId()) { - case R.id.tv_recharge: + case R.id.ll_gold: if (itemType == ITEM_TYPE_GOLD) { StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_GIFT_PANEL_TO_RECHARGE, "礼物面板_去充值:" + GIFT_DIALOG_FROM); @@ -1529,8 +1515,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene @Override public void onItemSelected(int position) { - avatarList.smoothScrollToPosition(position); - updateDrawGiftTips(); + if (position != -1) { + avatarList.smoothScrollToPosition(position); + updateDrawGiftTips(); + } + tvSelectAll.setSelected(avatarListAdapter.getSelectType() == GiftAvatarAdapter.SELECT_TYPE_WHOLE_MIC); } @Override diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/PrivateChatGiftDialog.java b/app/src/main/java/com/nnbc123/app/ui/widget/PrivateChatGiftDialog.java new file mode 100644 index 000000000..d7b0ae459 --- /dev/null +++ b/app/src/main/java/com/nnbc123/app/ui/widget/PrivateChatGiftDialog.java @@ -0,0 +1,884 @@ +package com.nnbc123.app.ui.widget; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.SparseArray; +import android.view.Display; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.LinearInterpolator; +import android.view.animation.RotateAnimation; +import android.widget.Button; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.google.android.material.bottomsheet.BottomSheetBehavior; +import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.nnbc123.core.UriProvider; +import com.nnbc123.core.auth.AuthModel; +import com.nnbc123.core.gift.GiftModel; +import com.nnbc123.core.gift.bean.GiftInfo; +import com.nnbc123.core.gift.bean.GiftTab; +import com.nnbc123.core.gift.bean.GiftType; +import com.nnbc123.core.gift.event.UpdateKnapEvent; +import com.nnbc123.core.gift.toolbox.GiftToolbox; +import com.nnbc123.core.initial.InitialModel; +import com.nnbc123.core.initial.bean.InitInfo; +import com.nnbc123.core.manager.AvRoomDataManager; +import com.nnbc123.core.manager.IMNetEaseManager; +import com.nnbc123.core.manager.RoomEvent; +import com.nnbc123.core.pay.PayModel; +import com.nnbc123.core.pay.bean.WalletInfo; +import com.nnbc123.core.pay.event.UpdateWalletInfoEvent; +import com.nnbc123.core.statistic.StatisticManager; +import com.nnbc123.core.statistic.protocol.StatisticsProtocol; +import com.nnbc123.core.utils.LogUtils; +import com.nnbc123.core.utils.net.RxHelper; +import com.nnbc123.core.utils.net.VipLevelNotEnoughException; +import com.nnbc123.app.BR; +import com.nnbc123.app.R; +import com.nnbc123.app.base.BaseActivity; +import com.nnbc123.app.common.widget.CircleImageView; +import com.nnbc123.app.common.widget.dialog.DialogManager; +import com.nnbc123.app.ui.gift.dialog.GiftInfoVm; +import com.nnbc123.app.ui.gift.dialog.PageIndicatorView; +import com.nnbc123.app.ui.pay.ChargeDialog; +import com.nnbc123.app.ui.utils.ImageLoadUtils; +import com.nnbc123.app.ui.webview.CommonWebViewActivity; +import com.nnbc123.app.ui.webview.DialogWebViewActivity; +import com.nnbc123.app.ui.widget.dialog.GiftManualQuantityDialog; +import com.nnbc123.app.ui.widget.magicindicator.GiftIndicator; +import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil; +import com.nnbc123.app.utils.SpannableBuilder; +import com.nnbc123.library.bindinglist.IItem; +import com.nnbc123.library.bindinglist.MultiTypeAdapter; +import com.nnbc123.library.utils.FormatUtils; +import com.nnbc123.library.utils.ListUtils; +import com.nnbc123.library.utils.LogUtil; +import com.nnbc123.library.utils.SingleToastUtil; +import com.nnbc123.library.utils.TextWatcherWrapper; +import com.nnbc123.library.widget.DrawableCenterTextView; +import com.netease.nim.uikit.business.session.helper.MessageListPanelHelper; +import com.zyyoona7.lib.EasyPopup; +import com.zyyoona7.lib.HorizontalGravity; +import com.zyyoona7.lib.VerticalGravity; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.disposables.Disposable; + +/** + * @author chenran + * @date 2017/7/27 + */ + +public class PrivateChatGiftDialog extends BottomSheetDialog implements View.OnClickListener { + + private static final String TAG = "GiftDialog"; + public static String GIFT_DIALOG_FROM = ""; // 埋点用,标识从哪个位置打开弹框 + private final Context context; + private final long uid; + @Nullable + private GiftInfo currentGiftInfo; + private List currentGiftInfoList; + private EasyPopup easyPopup; + private int giftNumber = 1; + private Disposable mSubscribe; + private CompositeDisposable compositeDisposable; + private GiftInfoVm lastSelectedItem; + private List> pagerList; + private WalletInfo goldWalletInfo = PayModel.get().getCurrentWalletInfo(); + + private GiftIndicator giftIndicator; + private LinearLayout llStarWeek; + private LinearLayout llWeekStarDetail; + private ImageView ivWeekStarIcon; + private CircleImageView ivAvatarCharm; + private TextView tvWeekStarDesc; + private TextView tvWeekStarFirstUsername; + private TextView tvWeekStarEmpty; + private DrawableCenterTextView tvWeekStarIn; + private TextView tvGiftValue; + private LinearLayout layoutLoading; + private ImageView ivLoading; + private LinearLayout layoutLoadFailed; + private TextView tvReload; + private ViewPager gridView; + private LinearLayout layoutEmpty; + private EditText etGiftMessage; + private View tvRecharge; + private TextView tvTextGold; + private LinearLayout sendContainer; + private LinearLayout giftNumberLayout; + private TextView giftNumberText; + private ImageView ivGiftNumberOptions; + private Button btnSend; + + /*** + * + * @param context context + * @param OtherUid 送礼人uid + */ + public PrivateChatGiftDialog(Context context, long OtherUid) { + super(context, R.style.ErbanBottomSheetDialog); + this.context = context; + this.uid = OtherUid; + } + + private List> beanTransformVm(Context context, + List data, + boolean isKnap, + int pageSize, + @Nullable GiftInfo selectGiftInfo) { + List> result = new ArrayList<>(); + if (ListUtils.isListEmpty(data)) { + return result; + } + boolean hasSelectGift = false; + for (int i = 0; i < data.size(); i++) { + GiftInfoVm item = null; + List page = null; + if (i % pageSize == 0) { + page = new ArrayList<>(); + result.add(page); + } else { + if (result.size() > 0) { + page = result.get(result.size() - 1); + } + } + + boolean select = false; + if (selectGiftInfo != null && selectGiftInfo.getGiftId() == data.get(i).getGiftId()) { + hasSelectGift = true; + select = true; + } + item = new GiftInfoVm(context, data.get(i), select, isKnap); + item.isPrivateChat = true; + if (page != null) { + page.add(item); + } + } + if (!hasSelectGift) { + result.get(0).get(0).isSelect.set(true); + } + return result; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + setCanceledOnTouchOutside(true); + setContentView(R.layout.dialog_private_chat_gift); + compositeDisposable = new CompositeDisposable(); + init(); + + FrameLayout bottomSheet = findViewById(R.id.design_bottom_sheet); + if (bottomSheet != null) { + BottomSheetBehavior.from(bottomSheet).setSkipCollapsed(false); + BottomSheetBehavior.from(bottomSheet).setHideable(false); + } + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + Display d = windowManager.getDefaultDisplay(); + DisplayMetrics realDisplayMetrics = new DisplayMetrics(); + d.getRealMetrics(realDisplayMetrics); + WindowManager.LayoutParams params = getWindow().getAttributes(); + params.width = WindowManager.LayoutParams.MATCH_PARENT; + params.height = WindowManager.LayoutParams.MATCH_PARENT; + params.dimAmount = 0.5f; + getWindow().setAttributes(params); + mSubscribe = IMNetEaseManager.get().getChatRoomEventObservable().subscribe(this::onReceiveRoomEvent); + } + + @Override + protected void onStop() { + super.onStop(); + GIFT_DIALOG_FROM = ""; + } + + private void onReceiveRoomEvent(RoomEvent roomEvent) { + int event = roomEvent.getEvent(); + if (event == RoomEvent.GIFT_OUT_OF_DATE) { + onGiftOutOfDate(roomEvent.getMessage()); + } + } + + @SuppressLint("CheckResult") + private void init() { + initView(); + findViewById(R.id.tv_recharge).setOnClickListener(this); + tvReload.setOnClickListener(this); + showLoadingView(); + showLoadingAnimation(); + btnSend.setOnClickListener(this); + giftNumberLayout.setOnClickListener(this); + List tabInfoList = new ArrayList<>(); + tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NORMAL, "礼物", "礼物")); + tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NOBLE, "贵族", "贵族")); + tabInfoList.add(new GiftTab(GiftIndicator.TYPE_WEEK, "星座礼物", "星座礼物")); + tabInfoList.add(new GiftTab(GiftIndicator.TYPE_KNAP, "背包", "背包")); + giftIndicator = findViewById(R.id.gift_indicator); + giftIndicator.initTab( + tabInfoList, + Color.parseColor("#878B9C"), + Color.parseColor("#282828") + ); + + giftIndicator.addClick() + .subscribeOn(AndroidSchedulers.mainThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(integer -> { + updateGiftView(integer); + //福袋礼物有定时更新逻辑,每次点击都需要刷新福袋礼物信息 + if (integer == GiftIndicator.TYPE_LUCKY) { + reloadData(false); + } + }); + giftIndicator.hidePosition(GiftIndicator.TYPE_LUCKY); + giftIndicator.hidePosition(GiftIndicator.TYPE_DRAW_GIFT); + tvTextGold.setSelected(true); + tvWeekStarIn.setOnClickListener(this); + layoutEmpty.setVisibility(View.GONE); + etGiftMessage.addTextChangedListener(new TextWatcherWrapper() { + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 15) { + SingleToastUtil.showToast(getContext().getString(R.string.tips_input_gift_message_limit)); + btnSend.setEnabled(false); + } + } + }); + compositeDisposable.add(GiftModel.get().requestKnapGiftInfos().subscribe()); + showGiftTab(); + } + + private void initView() { + llStarWeek = findViewById(R.id.ll_star_week); + llWeekStarDetail = findViewById(R.id.ll_week_star_detail); + ivWeekStarIcon = findViewById(R.id.iv_week_star_icon); + ivAvatarCharm = findViewById(R.id.iv_avatar_charm); + tvWeekStarDesc = findViewById(R.id.tv_week_star_desc); + tvWeekStarFirstUsername = findViewById(R.id.tv_week_star_first_username); + tvWeekStarEmpty = findViewById(R.id.tv_week_star_empty); + tvWeekStarIn = findViewById(R.id.tv_week_star_in); + tvGiftValue = findViewById(R.id.tv_gift_value); + layoutLoading = findViewById(R.id.layout_loading); + ivLoading = findViewById(R.id.iv_loading); + layoutLoadFailed = findViewById(R.id.layout_load_failed); + tvReload = findViewById(R.id.tv_reload); + gridView = findViewById(R.id.gridView); + layoutEmpty = findViewById(R.id.layout_empty); + etGiftMessage = findViewById(R.id.et_gift_message); + tvRecharge = findViewById(R.id.tv_recharge); + tvTextGold = findViewById(R.id.tv_text_gold); + sendContainer = findViewById(R.id.send_container); + giftNumberLayout = findViewById(R.id.gift_number_layout); + giftNumberText = findViewById(R.id.gift_number_text); + ivGiftNumberOptions = findViewById(R.id.iv_gift_number_options); + btnSend = findViewById(R.id.btn_send); + findViewById(R.id.ll_gold).setOnClickListener(this); + } + + + private void showLoadingAnimation() { + Animation rotateAnimation = new RotateAnimation(0, 360, + Animation.RELATIVE_TO_SELF, 0.5f, + Animation.RELATIVE_TO_SELF, 0.5f); + rotateAnimation.setFillAfter(true); + rotateAnimation.setDuration(1000); + rotateAnimation.setRepeatCount(-1); + rotateAnimation.setInterpolator(new LinearInterpolator()); + ivLoading.startAnimation(rotateAnimation); + } + + private void setGoldOrRadishText(IItem lastSelectedItem) { + if (lastSelectedItem == null) { + setTvGoldText(); + return; + } + if (lastSelectedItem instanceof GiftInfoVm) { + GiftInfoVm giftInfoVm = (GiftInfoVm) lastSelectedItem; + btnSend.setEnabled(true); + setTvGoldText(); + } + } + + private void setTvGoldText() { + tvRecharge.setVisibility(View.VISIBLE); + if (goldWalletInfo == null) { + return; + } + String goldNumText = getContext().getString(R.string.gold_num_text, goldWalletInfo.getDiamondNum()); + tvTextGold.setText(goldNumText); + } + + private void updateGiftView(int position) { + updateGiftView(position, null); + } + + private void updateGiftView(int position, @Nullable GiftInfo selectGiftInfo) { + showDataView(); + // 获得对应的普通礼物/贵族礼物/背包礼物 + List nobleGiftInfos = getNobleGiftInfos(); + if (position == GiftIndicator.TYPE_KNAP) { + currentGiftInfoList = GiftModel.get().getKnapList(); + } else if (position == GiftIndicator.TYPE_NOBLE) { + currentGiftInfoList = nobleGiftInfos; + } else if (position == GiftIndicator.TYPE_NORMAL) { + currentGiftInfoList = getNormalGiftInfos(); + } else if (position == GiftIndicator.TYPE_WEEK) { + currentGiftInfoList = getWeekStarGiftInfos(); + } + //是否背包礼物 + final boolean isKnap = (position == GiftIndicator.TYPE_KNAP); + initEasyPop(isKnap); + if (ListUtils.isListEmpty(currentGiftInfoList)) { + currentGiftInfo = null; + if (isKnap) { + tvGiftValue.setVisibility(View.VISIBLE); + showEmptyView(); + } else if (position == GiftIndicator.TYPE_LUCKY || + position == GiftIndicator.TYPE_WEEK || + position == GiftIndicator.TYPE_DRAW_GIFT || + position == GiftIndicator.TYPE_SING_ROOM || + position == GiftIndicator.TYPE_PENALTY) { + showEmptyView(); + updateWeekStarDesc(); + } else { + showLoadFailedView(); + } + return; + } + currentGiftInfo = selectGiftInfo == null ? currentGiftInfoList.get(0) : selectGiftInfo; + if (currentGiftInfo.isSendMsg()) { + etGiftMessage.setVisibility(View.VISIBLE); + } + pagerList = beanTransformVm(context, currentGiftInfoList, isKnap, Integer.MAX_VALUE, selectGiftInfo); + setGridViewData(pagerList); + if (isKnap) { + tvGiftValue.setVisibility(View.VISIBLE); + updateTotalPrice(); + } else { + if (giftNumber == -1) { + updateNumber(1); + } + } + updateWeekStarDesc(); + } + + @SuppressLint("CheckResult") + private void updateWeekStarDesc() { + InitInfo initInfo = InitialModel.get().getCacheInitInfo(); + if (giftIndicator.getCurrrentType() == GiftIndicator.TYPE_WEEK && + initInfo != null && initInfo.isTwelveStarSwitch()) { + llStarWeek.setVisibility(View.VISIBLE); + } else { + llStarWeek.setVisibility(View.GONE); + return; + } + + GiftModel.get().getLastRankFirst() + .subscribe(weekStarInfo -> { + if (TextUtils.isEmpty(weekStarInfo.getNick())) { + tvWeekStarEmpty.setVisibility(View.VISIBLE); + llWeekStarDetail.setVisibility(View.GONE); + } else { + tvWeekStarEmpty.setVisibility(View.GONE); + llWeekStarDetail.setVisibility(View.VISIBLE); + ImageLoadUtils.loadImage(context, weekStarInfo.getAvatar(), ivAvatarCharm); + ImageLoadUtils.loadImage(context, weekStarInfo.getMarkUrl(), ivWeekStarIcon); + tvWeekStarFirstUsername.setText(weekStarInfo.getNick()); + tvWeekStarDesc.setText("上期星座月" + weekStarInfo.getTwelveStarName() + "星主"); + } + }, throwable -> { + tvWeekStarEmpty.setVisibility(View.VISIBLE); + llWeekStarDetail.setVisibility(View.GONE); + }); + } + + + private void updateTotalPrice() { + String diamond = ""; + double totalValue = 0; + for (int i = 0; i < currentGiftInfoList.size(); i++) { + totalValue += currentGiftInfoList.get(i).getCount() * currentGiftInfoList.get(i).getGoldPrice(); + } + if (totalValue >= 10000) { + totalValue = totalValue / 10000.0f; + diamond = FormatUtils.formatBigDecimal(totalValue) + "W+"; + } else { + diamond = String.valueOf((int) totalValue); + } + SpannableBuilder text = new SpannableBuilder() + .append("总价值: ", new ForegroundColorSpan(Color.parseColor("#BABBCD"))) + .append(diamond + "", new ForegroundColorSpan(Color.parseColor("#5FCCE4"))); + tvGiftValue.setText(text.build()); + } + + private void showEmptyView() { + //tab对应的礼物列表为空的情况 + layoutEmpty.setVisibility(View.VISIBLE); + layoutLoadFailed.setVisibility(View.GONE); + layoutLoading.setVisibility(View.GONE); + gridView.setVisibility(View.INVISIBLE); + etGiftMessage.setVisibility(View.GONE); + } + + private void showLoadFailedView() { + layoutLoading.setVisibility(View.GONE); + layoutLoadFailed.setVisibility(View.VISIBLE); + layoutEmpty.setVisibility(View.GONE); + gridView.setVisibility(View.GONE); + etGiftMessage.setVisibility(View.GONE); + } + + private void showLoadingView() { + layoutLoading.setVisibility(View.VISIBLE); + layoutLoadFailed.setVisibility(View.GONE); + layoutEmpty.setVisibility(View.GONE); + } + + private void showDataView() { + layoutLoading.setVisibility(View.GONE); + layoutLoadFailed.setVisibility(View.GONE); + layoutEmpty.setVisibility(View.GONE); + etGiftMessage.setVisibility(View.GONE); + tvGiftValue.setVisibility(View.GONE); + llStarWeek.setVisibility(View.GONE); + + gridView.setVisibility(View.VISIBLE); + sendContainer.setVisibility(View.VISIBLE); + } + + private void setGridViewData(List> pagerList) { + if (ListUtils.isListEmpty(pagerList)) { + return; + } + int defaultSelectPage = 0; + int defaultSelectItem = 0; + wai: + for (int i = 0; i < pagerList.size(); i++) { + List pager = pagerList.get(i); + for (int j = 0; j < pager.size(); j++) { + GiftInfoVm iItem = pager.get(j); + if (iItem != null && iItem.isSelect.get()) { + defaultSelectPage = i; + defaultSelectItem = j; + break wai; + } + } + } + layoutEmpty.setVisibility(View.GONE); + gridView.setVisibility(View.VISIBLE); + + SparseArray cacheItemView = new SparseArray<>(); + lastSelectedItem = pagerList.get(defaultSelectPage).get(defaultSelectItem); + setGoldOrRadishText(lastSelectedItem); + gridView.setAdapter(new PagerAdapter() { + + @Override + public int getCount() { + return pagerList.size(); + } + + @Override + public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { + return view == object; + } + + @NonNull + @Override + public Object instantiateItem(@NonNull ViewGroup container, int pagePos) { + RecyclerViewNoViewpagerScroll recyclerView; + MultiTypeAdapter giftAdapter; + if (cacheItemView.get(pagePos) == null) { + recyclerView = new RecyclerViewNoViewpagerScroll(context); + recyclerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + recyclerView.setLayoutManager(new GridLayoutManager(context, 4)); + giftAdapter = new MultiTypeAdapter<>(BR.item, true); + recyclerView.setAdapter(giftAdapter); + cacheItemView.put(pagePos, recyclerView); + } else { + recyclerView = cacheItemView.get(pagePos); + giftAdapter = (MultiTypeAdapter) recyclerView.getAdapter(); + } + giftAdapter.clearAllItem(); + giftAdapter.addData(pagerList.get(pagePos)); + + giftAdapter.setOnItemClickListener(item -> { + if (item.data.isSendMsg()) { + etGiftMessage.setVisibility(View.VISIBLE); + } else { + etGiftMessage.setVisibility(View.GONE); + } + if (lastSelectedItem != null) { + lastSelectedItem.isSelect.set(false); + } + item.isSelect.set(true); + lastSelectedItem = item; + currentGiftInfo = item.data; + setGoldOrRadishText(lastSelectedItem); + updateWeekStarDesc(); + }); + container.addView(recyclerView); + return recyclerView; + } + + @Override + public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { + RecyclerView recyclerView = cacheItemView.get(position); + MultiTypeAdapter adapter = (MultiTypeAdapter) recyclerView.getAdapter(); + adapter.getAllItems().clear(); + container.removeView(recyclerView); + } + }); + gridView.setCurrentItem(defaultSelectPage); + } + + private List loadGiftInfoList() { + List giftInfos; + // 私聊送礼面板 不在房间内,直接在普通的列表里选出房间礼物进行显示 + giftInfos = GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_NORMAL); + if (ListUtils.isListEmpty(giftInfos)) return new ArrayList<>(); + return giftInfos; + } + + private List getNormalGiftInfos() { + List giftInfos = loadGiftInfoList(); + List infos = new ArrayList<>(); + for (int i = 0; i < giftInfos.size(); i++) { + GiftInfo giftInfo = giftInfos.get(i); + if (!giftInfo.isNobleGift() || giftInfo.getLevel() == 0) { + infos.add(giftInfo); + } + } + return infos; + } + + private List getWeekStarGiftInfos() { + return GiftModel.get().getGiftInfosByType( + String.valueOf(AvRoomDataManager.get().getRoomUid()), + GiftType.GIFT_TYPE_WEEK_STAR); + } + + private List getNobleGiftInfos() { + return GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_VIP); + } + + private void initEasyPop(boolean isBag) { + + easyPopup = new EasyPopup(getContext()) + .setContentView(R.layout.dialog_gift_number) + .setFocusAndOutsideEnable(true) + .createPopup(); + + easyPopup.getView(R.id.number_1).setOnClickListener(this); + easyPopup.getView(R.id.number_10).setOnClickListener(this); + easyPopup.getView(R.id.number_66).setOnClickListener(this); + easyPopup.getView(R.id.number_99).setOnClickListener(this); + easyPopup.getView(R.id.number_188).setOnClickListener(this); + easyPopup.getView(R.id.number_520).setOnClickListener(this); + easyPopup.getView(R.id.number_1314).setOnClickListener(this); + if (isBag) { + easyPopup.getView(R.id.number_all).setVisibility(View.VISIBLE); + easyPopup.getView(R.id.number_all).setOnClickListener(this); + } else { + easyPopup.getView(R.id.number_all).setVisibility(View.GONE); + } + easyPopup.getView(R.id.number_manual).setOnClickListener(this); + + easyPopup.setOnDismissListener(() -> ivGiftNumberOptions.animate().rotationBy(180).start()); + } + + @SuppressLint("CheckResult") + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.ll_gold: + StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_GIFT_PANEL_TO_RECHARGE, "礼物面板_去充值:" + GIFT_DIALOG_FROM); + ChargeDialog.start(getContext()); + dismiss(); + break; + //送礼物 + case R.id.btn_send: + final GiftInfo finalCurrentGiftInfo = currentGiftInfo; + btnSend.setEnabled(false); + btnSend.setText("赠送中..."); + Log.e(TAG, "onClick: indicator type: " + giftIndicator.getCurrrentType()); + if (!AuthModel.get().isImLogin()) { + SingleToastUtil.showToast("网络异常,请重试!"); + btnSend.setText("赠送"); + btnSend.setEnabled(true); + return; + } + if (finalCurrentGiftInfo == null) { + btnSend.setText("赠送"); + btnSend.setEnabled(true); + return; + } + String giftMessage = getGiftMessage(); + if (Objects.equals(giftMessage, "")) { + SingleToastUtil.showToast("请输入喊话内容"); + btnSend.setText("赠送"); + btnSend.setEnabled(true); + } else { + GiftModel.get().sendPersonalGift(finalCurrentGiftInfo.getGiftId(), String.valueOf(uid), giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber, + giftMessage, + giftIndicator.getCurrrentType() == GiftIndicator.TYPE_KNAP) + .doOnError(throwable -> { + if (btnSend == null) return; + btnSend.setText("赠送"); + btnSend.setEnabled(true); + if (throwable instanceof VipLevelNotEnoughException) { + new DialogManager(context).showOkDialog("尚未达到赠送" + + finalCurrentGiftInfo.getGiftName() + + "所需贵族等级,所需贵族等级:" + + finalCurrentGiftInfo.getGiftVipInfo().getVipName()); + } + }) + .flatMap(serviceResult -> GiftToolbox.sendGiftPrivateChatMessage(serviceResult.getData())) + .subscribe(imMessage -> { + // 手动更新送礼物的消息 + MessageListPanelHelper.getInstance().notifyAddMessage(imMessage); + StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_PRIVATECHAT_SENDGIFT, + "私聊_送礼物"); + onSendGiftSuccess(finalCurrentGiftInfo); + }); + etGiftMessage.setText(""); + } + + break; + case R.id.number_1: + updateNumber(1); + break; + case R.id.number_10: + updateNumber(10); + break; + case R.id.number_66: + updateNumber(66); + break; + case R.id.number_99: + updateNumber(99); + break; + case R.id.number_188: + updateNumber(188); + break; + case R.id.number_520: + updateNumber(520); + break; + case R.id.number_1314: + updateNumber(1314); + break; + case R.id.number_all: + updateNumber(-1); + break; + case R.id.number_manual: + GiftManualQuantityDialog giftManualQuantityDialog = new GiftManualQuantityDialog(context); + giftManualQuantityDialog.setOnConfirmClick(new GiftManualQuantityDialog.OnConfirmClick() { + @Override + public void onConfirm(int quantity) { + updateNumber(quantity); + giftManualQuantityDialog.dismiss(); + } + }); + giftManualQuantityDialog.show(); + easyPopup.dismiss(); + break; + case R.id.gift_number_layout: + showEasyPopup(); + break; + case R.id.iv_lucky_bag_intro: + if (currentGiftInfo == null) break; + DialogWebViewActivity.start(context, UriProvider.getLuckyGiftRule(currentGiftInfo.getGiftId()), true); + break; + + case R.id.tv_reload: + reloadData(true); + break; + case R.id.tv_week_star_in: + CommonWebViewActivity.start(context, UriProvider.getWeekStarUrl()); + break; + case R.id.tv_tab_send_gift: + showGiftTab(); + break; + default: + break; + } + } + + private void showGiftTab() { + showGiftTab(GiftIndicator.TYPE_NORMAL, null); + } + + private void showGiftTab(int position, @Nullable GiftInfo selectGiftInfo) { + giftIndicator.hidePosition(GiftIndicator.TYPE_DRAW_GIFT); + giftIndicator.hidePosition(GiftIndicator.TYPE_PENALTY); + giftIndicator.showPosition(GiftIndicator.TYPE_LUCKY); + giftIndicator.showPosition(GiftIndicator.TYPE_NOBLE); + giftIndicator.showPosition(GiftIndicator.TYPE_WEEK); + giftIndicator.showPosition(GiftIndicator.TYPE_NORMAL); + if (AvRoomDataManager.get().isSingleRoom()) { + giftIndicator.showPosition(GiftIndicator.TYPE_SING_ROOM); + } else { + giftIndicator.hidePosition(GiftIndicator.TYPE_SING_ROOM); + } + + giftIndicator.setPosition(position); + updateGiftView(giftIndicator.getCurrrentType(), selectGiftInfo); + } + + private void onSendGiftSuccess(GiftInfo giftInfo) { + if (btnSend == null) return; + btnSend.setText("赠送"); + btnSend.setEnabled(true); + } + + private void reloadData(final boolean needShowLoading) { + if (needShowLoading) showLoadingView(); + int currentType = giftIndicator.getCurrrentType(); + switch (currentType) { + case GiftIndicator.TYPE_NORMAL: + case GiftIndicator.TYPE_LUCKY: + case GiftIndicator.TYPE_NOBLE: + case GiftIndicator.TYPE_WEEK: + compositeDisposable.add(GiftModel.get().refreshGiftList(null) + .subscribe((giftListInfoServiceResult, throwable) -> { + if (throwable == null) { + // 返回结果时,当前选中选项与请求时的选项一样时才显示 + if (currentType == giftIndicator.getCurrrentType()) { + updateGiftView(giftIndicator.getCurrrentType()); + } + } else { + if (needShowLoading) showLoadFailedView(); + } + }) + ); + break; + + case GiftIndicator.TYPE_KNAP: + compositeDisposable.add(GiftModel.get() + .requestKnapGiftInfos() + .subscribe((listServiceResult, throwable) -> { + if (throwable == null) { + if (currentType == giftIndicator.getCurrrentType()) { + updateGiftView(giftIndicator.getCurrrentType()); + } + } else { + if (needShowLoading) showLoadFailedView(); + } + }) + ); + break; + } + } + + private String getGiftMessage() { + if (currentGiftInfo != null && currentGiftInfo.isSendMsg()) { + if (etGiftMessage.getText().toString().length() == 0) { + return getContext().getString(R.string.tips_input_gift_message); + } else { + if (Objects.equals(etGiftMessage.getText().toString().trim(), "")) { + return ""; + } else { + return etGiftMessage.getText().toString().trim(); + } + } + } else { + return null; + } + } + + private void updateNumber(int number) { + giftNumber = number; + giftNumberText.setText(giftNumber == -1 ? "all" : giftNumber + ""); + easyPopup.dismiss(); + } + + private void showEasyPopup() { + ivGiftNumberOptions.animate().rotationBy(180).start(); + easyPopup.showAtAnchorView(giftNumberLayout, VerticalGravity.ABOVE, HorizontalGravity.ALIGN_LEFT, + 0, -UIUtil.dip2px(context, 11)); + } + + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + EventBus.getDefault().unregister(this); + if (mSubscribe != null) { + mSubscribe.dispose(); + mSubscribe = null; + } + if (compositeDisposable != null) { + compositeDisposable.dispose(); + compositeDisposable = null; + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onWalletInfoUpdate(UpdateWalletInfoEvent event) { + goldWalletInfo = PayModel.get().getCurrentWalletInfo(); + setGoldOrRadishText(lastSelectedItem); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onRecieveGiftKnapMsg(UpdateKnapEvent event) { + //刷新背包礼物 + compositeDisposable.add(GiftModel.get().requestKnapGiftInfos() + .compose(RxHelper.handleSchedulers()) + .subscribe()); + if (giftIndicator.getCurrrentType() != GiftIndicator.TYPE_KNAP) { + return; + } + int giftId = event.getGiftId(); + int sendNum = event.getSendNumber(); + if (ListUtils.isListEmpty(pagerList)) { + return; + } + for (List page : pagerList) { + for (GiftInfoVm item : page) { + if (item.data.getGiftId() == giftId) { + int count = item.data.getCount() - sendNum; + item.data.setCount(Math.max(count, 0)); + item.updateCount(); + break; + } + } + } + updateTotalPrice(); + } + + private void onGiftOutOfDate(String message) { + ((BaseActivity) getContext()).toast(message); + } + +} diff --git a/app/src/main/res/color/color_selector_gift_all.xml b/app/src/main/res/color/color_selector_gift_all.xml new file mode 100644 index 000000000..90c165fc1 --- /dev/null +++ b/app/src/main/res/color/color_selector_gift_all.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_recharge_white.png b/app/src/main/res/drawable-xhdpi/ic_arrow_recharge_white.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9f0eb49adad9a7096f3dfcf79c5c6390d7612c GIT binary patch literal 280 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 E0OZ*@ssI20 diff --git a/app/src/main/res/drawable-xhdpi/icon_room_send_arrow_white.png b/app/src/main/res/drawable-xhdpi/icon_room_send_arrow_white.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd160bba6a8fe5ea400c543ea3f6db1bc96838e GIT binary patch literal 360 zcmV-u0hj)XP)Px$B1uF+R7gwh)T>SdK@`UE{}&Q&3I!U;699Dug-29!c>)XxJOBuiz5xZz3!p#( zeS*qrP&h6LIb@QlA>Exz+1AX;-8tts=ggcHGkP>5mjX|%^QG0L)s1za@^YEk6>tK~ zW$HgbSJLUY_&WF#Sja?2VPBFKQ{fxnU_$s-(qSsR1UvxSnfNoXE9oN%c8kqy6?g&G z6Y(LiCF!jyF8Jp%vkl-0Sc$~nftI8}-TENxE8hX`f%yRb4eUvJ3~e$B_V^KS9Y}aA zsTV@s_h{JT7rAF=!6#HhKr_{{h^)jwEXY_Ej$f?hH3Q(g)gAW0QTW#|4_% znxAp^+0E)}Y^9@hNoSmzeByEXPq0+nL^o@5mdiD@mj41!fI}Z?GTrw80000C literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/bg_dialog_private_chat.xml b/app/src/main/res/drawable/bg_dialog_private_chat.xml new file mode 100644 index 000000000..e238d8de4 --- /dev/null +++ b/app/src/main/res/drawable/bg_dialog_private_chat.xml @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/bg_dialog_room_operation.xml b/app/src/main/res/drawable/bg_dialog_room_operation.xml index fa72da90b..4347b517f 100644 --- a/app/src/main/res/drawable/bg_dialog_room_operation.xml +++ b/app/src/main/res/drawable/bg_dialog_room_operation.xml @@ -1,12 +1,12 @@ - + + android:topLeftRadius="20dp" + android:topRightRadius="20dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_gift_dialog_all.xml b/app/src/main/res/drawable/bg_gift_dialog_all.xml new file mode 100644 index 000000000..2b26625d3 --- /dev/null +++ b/app/src/main/res/drawable/bg_gift_dialog_all.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/bg_magic_dialog_button_send.xml b/app/src/main/res/drawable/bg_magic_dialog_button_send.xml index 6a7e82f05..6fbf97602 100644 --- a/app/src/main/res/drawable/bg_magic_dialog_button_send.xml +++ b/app/src/main/res/drawable/bg_magic_dialog_button_send.xml @@ -2,18 +2,14 @@ - - + + - + diff --git a/app/src/main/res/drawable/common_btn_bg.xml b/app/src/main/res/drawable/common_btn_bg.xml index b4f4693c6..b69ea2751 100644 --- a/app/src/main/res/drawable/common_btn_bg.xml +++ b/app/src/main/res/drawable/common_btn_bg.xml @@ -1,29 +1,32 @@ + - + + - + - + - + - + + diff --git a/app/src/main/res/drawable/shape_bg_gift_dialog_select_all.xml b/app/src/main/res/drawable/shape_bg_gift_dialog_select_all.xml new file mode 100644 index 000000000..b5ec5ba66 --- /dev/null +++ b/app/src/main/res/drawable/shape_bg_gift_dialog_select_all.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_black_solid_round.xml b/app/src/main/res/drawable/shape_black_solid_round.xml index 2fe106270..365e85461 100644 --- a/app/src/main/res/drawable/shape_black_solid_round.xml +++ b/app/src/main/res/drawable/shape_black_solid_round.xml @@ -1,9 +1,6 @@ - - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_ffe710_20dp_round.xml b/app/src/main/res/drawable/shape_ffe710_20dp_round.xml new file mode 100644 index 000000000..6c679c55c --- /dev/null +++ b/app/src/main/res/drawable/shape_ffe710_20dp_round.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gift_item_select.xml b/app/src/main/res/drawable/shape_gift_item_select.xml index c8e0e35fb..cafb22142 100644 --- a/app/src/main/res/drawable/shape_gift_item_select.xml +++ b/app/src/main/res/drawable/shape_gift_item_select.xml @@ -1,7 +1,13 @@ - + + - - \ No newline at end of file + android:width="1.5dp" + android:color="#ffe710" /> + + + + + + diff --git a/app/src/main/res/drawable/shape_gift_item_select_room.xml b/app/src/main/res/drawable/shape_gift_item_select_room.xml new file mode 100644 index 000000000..6d68d0a94 --- /dev/null +++ b/app/src/main/res/drawable/shape_gift_item_select_room.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/shape_room_bg_send.xml b/app/src/main/res/drawable/shape_room_bg_send.xml index a9241df13..6d9a3fbf7 100644 --- a/app/src/main/res/drawable/shape_room_bg_send.xml +++ b/app/src/main/res/drawable/shape_room_bg_send.xml @@ -2,7 +2,7 @@ - - - - - - + app:layout_constraintStart_toStartOf="parent"> @@ -256,19 +237,8 @@ android:layout_width="8dp" android:layout_height="8dp" android:layout_marginStart="-4dp" - android:visibility="gone" - android:background="@drawable/shap_red_point" /> - - - - + android:background="@drawable/shap_red_point" + android:visibility="gone" /> @@ -290,14 +260,13 @@ android:layout_marginTop="10dp" android:gravity="center_vertical" android:orientation="horizontal" - android:visibility="invisible" - tools:contentDescription="聊天窗口赠送礼物时才显示" - tools:visibility="visible"> + android:visibility="gone" + tools:contentDescription="聊天窗口赠送礼物时才显示"> @@ -313,13 +282,50 @@ - + android:layout_height="35dp" + android:layout_marginTop="10dp" + android:visibility="gone" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + @@ -361,7 +367,7 @@ + - - - - - - + android:layout_height="@dimen/dp_50" + android:background="#161722"> - + android:layout_marginStart="15dp" + android:background="@drawable/shape_black_solid_round" + android:gravity="center_vertical" + android:paddingStart="9dp" + android:paddingEnd="9dp"> - + + + + + + + android:layout_marginStart="8dp" + android:layout_toEndOf="@id/ll_gold" /> + android:src="@drawable/icon_room_send_arrow_white" /> diff --git a/app/src/main/res/layout/dialog_private_chat_gift.xml b/app/src/main/res/layout/dialog_private_chat_gift.xml new file mode 100644 index 000000000..91c67d203 --- /dev/null +++ b/app/src/main/res/layout/dialog_private_chat_gift.xml @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +