1.新增VIP规则弹窗 2.VIP坑位相关逻辑处理

This commit is contained in:
huangjian
2021-10-08 18:54:35 +08:00
parent 5874315f76
commit ce758776e0
14 changed files with 186 additions and 21 deletions

View File

@@ -2,11 +2,14 @@ package com.yizhuan.erban.avroom.adapter
import android.annotation.SuppressLint
import android.content.Context
import android.util.SparseArray
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.util.forEach
import androidx.core.view.isVisible
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@@ -69,6 +72,7 @@ class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context)
private val viewGenderBg: View = itemView.findViewById(R.id.view_gender_bg)
private val tvSelectedStatus: TextView = itemView.findViewById(R.id.tv_selected_status)
private val ivCap: ImageView = itemView.findViewById(R.id.iv_cap)
protected val ivVipWear: ImageView = itemView.findViewById(R.id.iv_vip_wear)
@SuppressLint("SetTextI18n")
public override fun bind(info: RoomQueueInfo, position: Int) {
@@ -108,10 +112,19 @@ class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context)
} else {
ivCap.visibility = View.GONE
}
if (it.isVipMic) {
ivHeadWear.isVisible = false
ivVipWear.isVisible = true
tvSelectedStatus.background = null
} else {
ivVipWear.isVisible = false
}
} ?: run {
tvSelectedStatus.visibility = View.GONE
ivCap.visibility = View.GONE
if (position == AvRoomDataManager.POSITION_VIP_MIC) {
ivVipWear.isVisible = false
if (AvRoomDataManager.get().isDatingVipMic(position)) {
tvNick.text = ""
} else if (position != -1) {
tvNick.text = "${if (manMicro) "男神" else "女神"}"
@@ -125,21 +138,44 @@ class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context)
inner class DatingBossMicroViewHolder internal constructor(itemView: View) :
BossMicroViewHolder(itemView) {
private val rvVip: RecyclerView = itemView.findViewById(R.id.rv_vip)
private val ivVipWear: ImageView = itemView.findViewById(R.id.iv_vip_wear)
public override fun bind(info: RoomQueueInfo, position: Int) {
super.bind(info, position)
if (info.mChatRoomMember == null) {
tvNick.alpha = 1f
tvNick.text = "主持人"
ivVipWear.isVisible = false
} else {
if (info.mChatRoomMember.isVipMic) {
ivHeadWear.isVisible = false
ivVipWear.isVisible = true
} else {
ivVipWear.isVisible = false
}
}
var adapter: VipMicroViewAdapter? = rvVip.adapter as? VipMicroViewAdapter
if (adapter == null) {
adapter = VipMicroViewAdapter(context)
adapter.bindToRecyclerView(rvVip)
adapter.setOnMicroItemClickListener(onMicroItemClickListener)
val mMicQueueMemberMap = AvRoomDataManager.get().mMicQueueMemberMap
var showVipMicro = true
mMicQueueMemberMap.forEach { key, value ->
value?.mChatRoomMember?.let {
if (it.isVipMic && !AvRoomDataManager.get().isDatingVipMic(key)) {
showVipMicro = false
}
}
}
rvVip.isVisible = showVipMicro
if (showVipMicro) {
var adapter: VipMicroViewAdapter? = rvVip.adapter as? VipMicroViewAdapter
if (adapter == null) {
adapter = VipMicroViewAdapter(context)
adapter.bindToRecyclerView(rvVip)
adapter.setOnMicroItemClickListener(onMicroItemClickListener)
}
adapter.notifyDataSetChanged()
}
adapter.notifyDataSetChanged()
}
}
@@ -187,9 +223,7 @@ class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context)
override fun bind(info: RoomQueueInfo, position: Int) {
super.bind(info, position)
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo ?: return
val roomMicInfo = info.mRoomMicInfo
val uid = UserUtils.getUserUid()
ivVipWear.isVisible = true
}
}

View File

@@ -0,0 +1,35 @@
package com.yizhuan.erban.avroom.dialog;
import android.content.Context;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import com.yizhuan.erban.R;
import com.yizhuan.erban.databinding.DialogDatingVipRuleBinding;
import com.yizhuan.erban.treasure_box.widget.dialog.BaseBindingDialog;
import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
@ActLayoutRes(R.layout.dialog_dating_vip_rule)
public class DatingVipRuleDialog extends BaseBindingDialog<DialogDatingVipRuleBinding> implements View.OnClickListener {
public DatingVipRuleDialog(Context context) {
super(context, R.style.DialogFragment);
}
public static DatingVipRuleDialog newInstance(Context context) {
return new DatingVipRuleDialog(context);
}
@Override
protected void init() {
binding.setClick(this);
binding.tvRule.setMovementMethod(ScrollingMovementMethod.getInstance());
}
@Override
public void onClick(View v) {
closeDialog();
}
}

View File

@@ -29,6 +29,7 @@ import androidx.viewpager.widget.ViewPager;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.coorchice.library.SuperTextView;
import com.yizhuan.erban.avroom.dialog.DatingVipRuleDialog;
import com.yizhuan.erban.ui.webview.DatingRuleWebViewActivity;
import com.yizhuan.erban.ui.webview.DialogWebViewActivity;
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
@@ -1847,7 +1848,11 @@ public class HomePartyRoomFragment extends BaseMvpFragment<IHomePartyView, HomeP
@Override
public void onUpMicBtnClick(int position, MicMemberInfo chatRoomMember) {
getMvpPresenter().microPhonePositionClick(position, chatRoomMember);
if (AvRoomDataManager.get().isDatingVipMic(position) && !AvRoomDataManager.get().isDatingVip()) {
DatingVipRuleDialog.newInstance(mContext).show();
} else {
getMvpPresenter().microPhonePositionClick(position, chatRoomMember);
}
}
@Override

View File

@@ -782,6 +782,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
//目标用户是否是管理,(房主或者管理员)
boolean isTargetManager = isTargetRoomOwner || isTargetRoomAdmin;
boolean isTargetOnMic = AvRoomDataManager.get().isOnMic(account);
boolean isTargetVip = AvRoomDataManager.get().isDatingVip() || AvRoomDataManager.get().isDatingVipMic(micPosition);
//超管逻辑
if (SuperAdminUtil.isSuperAdmin()) {
if (isTargetOnMic) {
@@ -804,7 +805,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
if (!roomMicInfo.isMicMute()) {
buttonItems.add(createBanMicItem(micPosition));
}
if (!roomMicInfo.isMicLock()) {
if (!roomMicInfo.isMicLock() && !isTargetVip) {
buttonItems.add(createLockMicItem(micPosition));
}
}
@@ -840,7 +841,9 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
if (roomMicInfo.isMicLock()) {
buttonItems.add(createUnLockMicItem(micPosition));
} else {
buttonItems.add(createLockMicItem(micPosition));
if (!isTargetVip){
buttonItems.add(createLockMicItem(micPosition));
}
}
}
}
@@ -856,7 +859,9 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
}
}
if (isTargetOnMic) {
buttonItems.add(createKickMicItem());
if (!isTargetVip){
buttonItems.add(createKickMicItem());
}
} else {
handleInviteMicItem(buttonItems);
}
@@ -866,7 +871,9 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
if (roomMicInfo.isMicLock()) {
buttonItems.add(createUnLockMicItem(micPosition));
} else {
buttonItems.add(createLockMicItem(micPosition));
if (!isTargetVip){
buttonItems.add(createLockMicItem(micPosition));
}
}
}
}
@@ -896,7 +903,9 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
if (roomMicInfo.isMicLock()) {
buttonItems.add(createUnLockMicItem(micPosition));
} else {
buttonItems.add(createLockMicItem(micPosition));
if (!isTargetVip){
buttonItems.add(createLockMicItem(micPosition));
}
}
}
}
@@ -917,7 +926,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
//管理员能抱所有人上麦
if (isTargetOnMic) {
//管理员能抱管理员和游客下麦
if (!isTargetRoomOwner) {
if (!isTargetRoomOwner && !isTargetVip) {
buttonItems.add(createKickMicItem());
}
} else {
@@ -937,7 +946,9 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
if (roomMicInfo.isMicLock()) {
buttonItems.add(createUnLockMicItem(micPosition));
} else {
buttonItems.add(createLockMicItem(micPosition));
if (!isTargetVip){
buttonItems.add(createLockMicItem(micPosition));
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="click"
type="android.view.View.OnClickListener" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<FrameLayout
android:layout_width="260dp"
android:layout_height="325dp"
android:background="@drawable/bg_dating_vip_rule">
<TextView
android:id="@+id/tv_rule"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="15dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="15dp"
android:scrollbars="vertical"
android:text="@string/text_dating_vip_rule"
android:textColor="#FFF9BC"
android:textSize="12sp" />
</FrameLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:onClick="@{click}"
android:src="@drawable/ic_dating_vip_rule_close" />
</LinearLayout>
</layout>

View File

@@ -60,6 +60,15 @@
android:visibility="gone"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_vip_wear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:src="@drawable/icon_room_dating_vip"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_head_wear"
android:layout_width="match_parent"

View File

@@ -49,6 +49,14 @@
android:visibility="invisible"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_vip_wear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:src="@drawable/icon_room_dating_vip"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_head_wear"
android:layout_width="match_parent"

View File

@@ -60,11 +60,12 @@
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_vip"
android:id="@+id/iv_vip_wear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:src="@drawable/icon_room_dating_vip" />
android:src="@drawable/icon_room_dating_vip"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_head_wear"

View File

@@ -902,4 +902,5 @@
<string name="app_privacy_policy">&app_name;隐私政策</string>
<string name="about_app">关于&app_name;</string>
<string name="authorization_text">并授权&app_name;获取本机号码</string>
<string name="text_dating_vip_rule">1.每轮相亲在“自由交流”阶段累积送礼满999钻石且送礼价值最高的用户自动登上VIP席位\n\n 2.若出现多个满足上VIP席位要求的用户VIP席位最终由送礼价值最高的用户获得若送礼价值相同以最先达到该值的用户为准\n\n 3.VIP席位的用户可选择是否下麦其他用户不可因此代替坐上席位 \n\n 4.用户只能在“自由交流”阶段抢夺VIP席位“自由交流”阶段后直到结束本轮前即使送出超过之前VIP总礼物价值也不能换人\n\n 5.每轮相亲结束后VIP席位清空下一轮重新开始抢位。</string>
</resources>

View File

@@ -1114,6 +1114,20 @@ public final class AvRoomDataManager {
return mCurrentRoomInfo != null && mCurrentRoomInfo.getRoomModeType() == RoomModeType.OPEN_DATING_MODE;
}
/**
* @return true 相亲模式的VIP麦位
*/
public boolean isDatingVipMic(int position) {
return position == AvRoomDataManager.POSITION_VIP_MIC;
}
/**
* @return true 相亲模式的VIP
*/
public boolean isDatingVip() {
return mCurrentRoomInfo != null && mCurrentRoomInfo.getBlindDateVipUid() == AuthModel.get().getCurrentUid();
}
/**
* @return 相亲模式是否已经选择心动对象了
*/

View File

@@ -179,6 +179,8 @@ public class RoomInfo implements Parcelable,Serializable {
*/
private String blindDateState = "";
private long blindDateVipUid;
private boolean canOpenBlindDate;
/**

View File

@@ -37,7 +37,7 @@ public class MicMemberInfo {
private int selectMicPosition;
//是否有选择心动对象
private boolean hasSelectUser;
private boolean isVipMic;
private boolean vipMic;
/**
* GroupType_default = 0,//默认