贵族特权完善

This commit is contained in:
huangjian
2022-04-29 18:31:42 +08:00
parent e71b0f5791
commit 3f8af55c58
24 changed files with 204 additions and 47 deletions

View File

@@ -274,12 +274,12 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
}
protected void setDefalutText(int index) {
tvNick.setTextColor(context.getResources().getColor(R.color.white_transparent_30));
tvNick.setTextColor(Color.WHITE);
tvNick.setText("号麦位");
if (tvNumber != null) {
tvNumber.setBackgroundResource(R.drawable.icon_bg_number_default);
tvNumber.setTextColor(context.getResources().getColor(R.color.white_transparent_30));
tvNumber.setTextColor(Color.WHITE);
tvNumber.setText(String.valueOf(index + 1));
}

View File

@@ -1,6 +1,8 @@
package com.yizhuan.erban.avroom.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -55,7 +57,7 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
} else {
item = LayoutInflater.from(parent.getContext()).
inflate(R.layout.list_item_micro, parent, false);
return new GiftValueViewHolder(item);
return new MicroViewHolder(item);
}
}
@@ -79,4 +81,36 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
if (position == 0) return TYPE_BOSS;
return TYPE_NORMAL;
}
class MicroViewHolder extends BaseMicroViewAdapter.GiftValueViewHolder {
MicroViewHolder(View itemView) {
super(itemView);
}
@Override
public void bind(RoomQueueInfo info, int position) {
super.bind(info, position);
if (position == 7) {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro_vip);
} else {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
}
}
@SuppressLint("SetTextI18n")
@Override
public void setDefalutText(int index) {
if (index == 7) {
tvNick.setTextColor(Color.WHITE);
tvNick.setText("老板位");
if (tvNumber != null) {
tvNumber.setBackgroundResource(R.drawable.shape_micro_vip);
tvNumber.setTextColor(Color.WHITE);
tvNumber.setText(String.valueOf((index + 1)));
}
} else {
super.setDefalutText(index);
}
}
}
}

View File

@@ -16,6 +16,8 @@ import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.uinfo.constant.GenderEnum;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import com.yizhuan.erban.R;
@@ -32,8 +34,10 @@ import com.yizhuan.xchat_android_core.noble.NobleResourceType;
import com.yizhuan.xchat_android_core.noble.NobleUtil;
import com.yizhuan.xchat_android_core.room.bean.OnlineChatMember;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.utils.LogUtils;
import com.yizhuan.xchat_android_library.utils.ListUtils;
import java.util.Arrays;
import java.util.List;
import io.reactivex.disposables.Disposable;
@@ -49,7 +53,7 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
private boolean mIsHomeParty;
private Disposable mDisposable;
private Context context;
private OnRoomOnlineNumberChangeListener mListener;
public OnlineUserAdapter(Context context, boolean isHomeParty) {
super(null);
@@ -66,7 +70,6 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
registerRoomEvent();
}
@Override
protected void convert(BaseViewHolder baseViewHolder, OnlineChatMember onlineChatMember) {
if (onlineChatMember != null) {
@@ -131,6 +134,7 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
onlineChatMember.chatRoomMember.setAvatar(context.getResources().getString(R.string.url_mystery_man));
onlineChatMember.chatRoomMember.setNick(context.getResources().getString(R.string.mystery_man));
}
LogUtils.d(Arrays.toString(onlineChatMember.chatRoomMember.getExtension().entrySet().toArray()));
baseViewHolder.setText(R.id.nick, RegexUtil.getPrintableString(onlineChatMember.chatRoomMember.getNick()));
@@ -294,7 +298,6 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
roomEvent.getEvent() == RoomEvent.ROOM_MANAGER_REMOVE, mData);
}
private void updateDownUpMic(String account, boolean isUpMic) {
if (mListener != null) {
mListener.onMemberDownUpMic(account, isUpMic, mData);
@@ -308,8 +311,6 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
}
}
private OnRoomOnlineNumberChangeListener mListener;
public void setListener(OnRoomOnlineNumberChangeListener listener) {
mListener = listener;
}

View File

@@ -736,23 +736,15 @@ public class RoomEffectView extends FrameLayout {
&& userInfo.getCarInfo() != null
&& userInfo.getCarInfo().isUsing()
&& userInfo.getCarInfo().getStatus() == CarInfo.STATUS_USER_CAN_USE) {
if (AvRoomDataManager.get().mIsNeedGiftEffect &&
!AvRoomDataManager.get().isSelfGamePlaying()) {
mCarEffectList.add(userInfo.getCarInfo());
}
// 非贵族人员,进来后要播放座驾动画
if (userInfo.getNobleInfo() == null) {
if (!binding.roomCarSvga.isAnimating() && !isSvgaPlaying) {
// 播放座驾动画
playCarAnim(userInfo.getCarInfo());
}
// 公屏进入房间的提示语
IMNetEaseManager.get()
.sendCarPlayRoomMsgBySdk(userInfo.getCarInfo(), userInfo.getUid(), userInfo.getNick())
.subscribe();
}
// 贵族人员,要先判断是否隐身
if (userInfo.getNobleInfo() != null && !userInfo.getNobleInfo().isNobleEnterHide()) {
if (userInfo.getUserVipInfoVO() == null || !userInfo.getUserVipInfoVO().getEnterHide()) {
if (AvRoomDataManager.get().mIsNeedGiftEffect &&
!AvRoomDataManager.get().isSelfGamePlaying()) {
mCarEffectList.add(userInfo.getCarInfo());
}
if (!binding.roomCarSvga.isAnimating() && !isSvgaPlaying) {
// 播放座驾动画
playCarAnim(userInfo.getCarInfo());

View File

@@ -77,12 +77,6 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
}
})
mTitleBar.addAction(object : TitleBar.ImageAction(R.drawable.ic_vip_setting) {
override fun performAction(view: View) {
VipSettingActivity.start(this@VipMainActivity)
}
})
binding.ivTimeHelp.setOnClickListener {
VipRemainTimeDialog.newInstance().show(this)
}
@@ -155,6 +149,14 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
keepParams.horizontalBias = it.levelKeepScore.toFloat() / it.levelUpScore
binding.ivKeepIndicator.layoutParams = keepParams
if (it.ownAuthTypes?.contains(13) == true && mTitleBar.actionCount == 1) {
mTitleBar.addAction(object : TitleBar.ImageAction(R.drawable.ic_vip_setting) {
override fun performAction(view: View) {
VipSettingActivity.start(this@VipMainActivity)
}
}, 0)
}
} ?: run {
binding.llMyVipInfo.isVisible = false
binding.tvOpenVip.isVisible = true

View File

@@ -8,6 +8,7 @@ import com.netease.nim.uikit.StatusBarUtil
import com.yizhuan.erban.R
import com.yizhuan.erban.base.BaseViewBindingActivity
import com.yizhuan.erban.databinding.ActivityVipSettingBinding
import com.yizhuan.xchat_android_core.user.UserModel
class VipSettingActivity : BaseViewBindingActivity<ActivityVipSettingBinding>() {
@@ -26,6 +27,24 @@ class VipSettingActivity : BaseViewBindingActivity<ActivityVipSettingBinding>()
@SuppressLint("SetTextI18n")
override fun init() {
initWhiteTitleBar("贵族设置")
vipViewModel.loadingLiveData.observe(this) {
if (it == true) {
dialogManager.showProgressDialog(this)
} else {
dialogManager.dismissDialog()
}
}
vipViewModel.enterHideLiveData.observe(this) {
binding.switchHideGoRoom.isOn = it == true
}
binding.switchHideGoRoom.isOn = UserModel.get().cacheLoginUserInfo?.userVipInfoVO?.enterHide == true
binding.switchHideGoRoom.setOnSwitchStateChangeListener {
vipViewModel.changeInvisibleInRoom(it)
}
}
override fun initWhiteTitleBar(title: String?) {

View File

@@ -42,6 +42,9 @@ class VipViewModel : BaseViewModel() {
private val _vipBroadcastInfoLiveData = MutableLiveData<BeanResult<VipBroadcastInfo>>()
val vipBroadcastInfoLiveData: LiveData<BeanResult<VipBroadcastInfo>> = _vipBroadcastInfoLiveData
private val _enterHideLiveData = MutableLiveData<Boolean>()
val enterHideLiveData: LiveData<Boolean> = _enterHideLiveData
fun getVipPageInfo() {
_loadingLiveData.value = true
safeLaunch(
@@ -132,6 +135,24 @@ class VipViewModel : BaseViewModel() {
)
}
fun changeInvisibleInRoom(open: Boolean) {
_loadingLiveData.value = true
safeLaunch(
onError = {
it.message.toast()
_loadingLiveData.value = false
_enterHideLiveData.value = !open
},
block = {
VipModel.changeInvisibleInRoom(open)
_loadingLiveData.value = false
_enterHideLiveData.value = open
UserModel.get().cacheLoginUserInfo?.userVipInfoVO?.enterHide = open
"设置成功".toast()
}
)
}
fun onItemSelect(position: Int) {
_currVipInfoLiveData.value = vipInfosLiveData.value?.getOrNull(position)
_pageLiveData.value = position

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
android:angle="180"
android:startColor="#fff1b54d"
android:endColor="#ffefcc95"
android:type="linear"
android:useLevel="true" />
</shape>

View File

@@ -25,11 +25,11 @@
</style>
<style name="TextViewStyle" parent="android:Widget.TextView">
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:fontFamily">sans-serif</item>
</style>
<style name="ButtonStyle" parent="android:Widget.Holo.Button">
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:fontFamily">sans-serif</item>
</style>
</resources>

View File

@@ -30,6 +30,7 @@ import com.yizhuan.erban.ui.webview.DialogWebViewActivity;
import com.yizhuan.treasure_box.bean.PrizeInfo;
import com.yizhuan.treasure_box.model.BoxModel;
import com.yizhuan.treasure_box.model.IBoxModel;
import com.yizhuan.xchat_android_core.DemoCache;
import com.yizhuan.xchat_android_core.UriProvider;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
import com.yizhuan.xchat_android_core.manager.RoomEvent;
@@ -188,7 +189,7 @@ public class TreasureBoxActivity extends BaseBindingActivity<ActivityTreasureBox
mBinding.ivFirstBox.setVisibility(View.GONE);
mBinding.ivBoxOpen.startAnimation();
long startTime = System.currentTimeMillis();
BoxModel.get().openBox(boxType, count, true)
BoxModel.get().openBox(boxType, count, DemoCache.readBoolean(DemoCache.KEY_BOX_MESSAGE, true))
.compose(bindToLifecycle())
.doOnError(throwable -> {
mBinding.ivOpen.setEnabled(true);
@@ -325,7 +326,6 @@ public class TreasureBoxActivity extends BaseBindingActivity<ActivityTreasureBox
super.setStatusBar();
StatusBarUtil.transparencyBar(this);
StatusBarUtil.StatusBarLightMode(this);
StatusBarUtil.StatusBarLightMode(this);
}
}

View File

@@ -30,6 +30,7 @@ import com.yizhuan.erban.ui.webview.DialogWebViewActivity;
import com.yizhuan.treasure_box.bean.PrizeInfo;
import com.yizhuan.treasure_box.model.BoxModel;
import com.yizhuan.treasure_box.model.IBoxModel;
import com.yizhuan.xchat_android_core.DemoCache;
import com.yizhuan.xchat_android_core.UriProvider;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
import com.yizhuan.xchat_android_core.manager.RoomEvent;
@@ -179,7 +180,7 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
mBinding.ivOpen.setEnabled(false);
mBinding.svgaOpen.startAnimation();
BoxModel.get()
.openBox(boxType, count, true)
.openBox(boxType, count, DemoCache.readBoolean(DemoCache.KEY_BOX_MESSAGE, true))
.compose(bindToLifecycle())
.doOnError(throwable -> {
mBinding.ivOpen.setEnabled(true);

View File

@@ -2,6 +2,7 @@ package com.yizhuan.erban.treasure_box.widget.dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
@@ -9,6 +10,7 @@ import com.yizhuan.erban.R;
import com.yizhuan.erban.databinding.DialogBoxMoreBinding;
import com.yizhuan.erban.ui.webview.CommonWebViewActivity;
import com.yizhuan.erban.ui.webview.DialogWebViewActivity;
import com.yizhuan.xchat_android_core.DemoCache;
import com.yizhuan.xchat_android_core.UriProvider;
import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
@@ -36,16 +38,28 @@ public class BoxMoreDialog extends BaseBindingDialog<DialogBoxMoreBinding> {
@Override
protected void init() {
binding.tvHistory.setOnClickListener(v -> {
DialogWebViewActivity.start(context, UriProvider.getBoxHistory(),false);
DialogWebViewActivity.start(context, UriProvider.getBoxHistory(), false);
closeDialog();
});
binding.tvBoxRule.setOnClickListener(v -> {
DialogWebViewActivity.start(context, UriProvider.getBoxHelp(),false);
DialogWebViewActivity.start(context, UriProvider.getBoxHelp(), false);
closeDialog();
});
binding.tvGetKey.setOnClickListener(v -> {
DialogWebViewActivity.start(context,UriProvider.getBoxKey());
DialogWebViewActivity.start(context, UriProvider.getBoxKey());
closeDialog();
});
updateMsgSwitch(DemoCache.readBoolean(DemoCache.KEY_BOX_MESSAGE, true));
binding.ivSwitch.setOnClickListener(v -> {
boolean sendMsg = !DemoCache.readBoolean(DemoCache.KEY_BOX_MESSAGE, true);
updateMsgSwitch(sendMsg);
DemoCache.saveBoolean(DemoCache.KEY_BOX_MESSAGE, sendMsg);
});
}
private void updateMsgSwitch(boolean sendMsg) {
binding.ivSwitch.setImageResource(sendMsg ?
R.drawable.icon_room_set_lock_true : R.drawable.icon_room_set_lock_false);
}
}

View File

@@ -128,6 +128,7 @@
android:layout_gravity="center_horizontal"
android:layout_marginTop="52dp"
app:autoPlay="false"
app:fillMode="Clear"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_bg"

View File

@@ -225,6 +225,7 @@
android:layout_height="200dp"
android:layout_marginTop="60dp"
app:autoPlay="false"
app:fillMode="Clear"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/view_bg"
@@ -239,6 +240,7 @@
android:layout_marginStart="80dp"
android:layout_marginTop="60dp"
app:autoPlay="false"
app:fillMode="Clear"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/iv_box"

View File

@@ -57,6 +57,29 @@
android:textColor="#ff333333"
android:textSize="14sp" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="43dp"
android:gravity="center_vertical"
android:text="允许中奖消息对外展示"
android:textColor="#ff333333"
android:textSize="14sp" />
<ImageView
android:id="@+id/iv_switch"
android:layout_width="@dimen/dp_45"
android:layout_height="@dimen/dp_25"
android:scaleType="fitCenter"
android:layout_gravity="end|center_vertical"
android:src="@drawable/icon_room_set_lock_false" />
</FrameLayout>
</LinearLayout>
</layout>

View File

@@ -1,8 +1,14 @@
package com.yizhuan.xchat_android_core.manager;
import android.annotation.SuppressLint;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Handler;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.util.Log;
import android.util.SparseArray;
@@ -13,6 +19,7 @@ import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.business.session.helper.MessageListPanelHelper;
import com.netease.nim.uikit.common.antispam.AntiSpamEvent;
import com.netease.nim.uikit.common.util.AntiSpamUtil;
@@ -50,6 +57,7 @@ import com.netease.nimlib.sdk.util.api.RequestResult;
import com.orhanobut.logger.Logger;
import com.yizhuan.xchat_android_constants.XChatConstants;
import com.yizhuan.xchat_android_core.Constants;
import com.yizhuan.xchat_android_core.R;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.bean.RoomMicInfo;
import com.yizhuan.xchat_android_core.bean.RoomQueueInfo;
@@ -1488,11 +1496,28 @@ public final class IMNetEaseManager {
msg.setRemoteExtension(remoteExtension);
}
}
//需要稍微延迟点,否则有冲突
new Handler().postDelayed(() -> noticeMemBerInNotice(msg), 500);
if (!needToHideEnterMessage(msg)) {
addMessagesImmediately(msg);
//需要稍微延迟点,否则有冲突
new Handler().postDelayed(() -> noticeMemBerInNotice(msg), 500);
} else {
if (Objects.equals(String.valueOf(AuthModel.get().getCurrentUid()), account)) {
//SingleToastUtil.showToast("您已隐身进入房间");
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append("-");
builder.setSpan(new ImageSpan(
BitmapFactory.decodeResource(
BasicConfig.INSTANCE.getAppContext().getResources(),
R.drawable.ic_hide_enter_room)),
0, 1,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
builder.append(" ");
builder.append("您已隐身进入房间");
ToastUtils.show(builder);
}
}
AvRoomDataManager.get().mRoomAllMemberList.add(chatRoomMember);
addMessagesImmediately(!needToHideEnterMessage(msg) ? msg : null);
}

View File

@@ -59,6 +59,7 @@ public class DemoCache {
private static final String KEY_RED_PACKAGE = "RedPackage";
public static final String KEY_VIP_RED_POINT = "key_vip_red_point";
private static final String KEY_AT_MSG_UUID = "AtMsgUuid";
public static final String KEY_BOX_MESSAGE = "key_box_message";
/**
* 保存网页域名

View File

@@ -419,8 +419,6 @@ public class NobleUtil {
}
public static Object getResource(String type, MicMemberInfo chatRoomMember) {
// 判断是否有权限
if (!hasRightToDo(type, chatRoomMember)) return "";
Object o;
if (chatRoomMember == null || TextUtils.isEmpty(chatRoomMember.getAccount())
|| chatRoomMember.getExtension() == null
@@ -435,8 +433,6 @@ public class NobleUtil {
}
public static Object getResource(String type, ChatRoomMember chatRoomMember) {
// 判断是否有权限
if (!hasRightToDo(type, chatRoomMember)) return "";
Object o;
if (chatRoomMember == null || TextUtils.isEmpty(chatRoomMember.getAccount())
|| chatRoomMember.getExtension() == null

View File

@@ -48,6 +48,7 @@ import com.yizhuan.xchat_android_core.room.queue.bean.MicMemberInfo;
import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.BaseInfo;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.utils.LogUtils;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_core.vip.UserVipInfo;
import com.yizhuan.xchat_android_core.vip.VipInfo;
@@ -58,6 +59,7 @@ import com.yizhuan.xchat_android_library.utils.ListUtils;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import io.reactivex.Observable;

View File

@@ -594,7 +594,7 @@ public class UserInfo implements Serializable {
UserVipInfo userVipInfo = userInfo.getUserVipInfoVO();
if (userVipInfo != null && !TextUtils.isEmpty(userVipInfo.getVipIcon())) {
map.put(VIP_ICON, userVipInfo.getVipIcon());
map.put(NobleResourceType.KEY_ENTER_HIDE, userVipInfo.getEnterHide() ? 1 : 0);
map.put(NobleResourceType.KEY_ENTER_HIDE, userVipInfo.getEnterHide());
if (!TextUtils.isEmpty(userVipInfo.getEnterRoomEffects())) {
map.put(ENTER_ROOM_EFFECTS, userVipInfo.getEnterRoomEffects());
}

View File

@@ -7,6 +7,6 @@ data class UserVipInfo(
val vipLevel: Int = 0,
val friendNickColour: String = "",
val preventKick: Boolean = false,
val enterHide: Boolean = false,
var enterHide: Boolean = false,
val enterRoomEffects: String = ""
) : Serializable

View File

@@ -32,6 +32,11 @@ object VipModel : BaseModel() {
api.sendVipBroadcast(content, AvRoomDataManager.get().roomUid)
}
suspend fun changeInvisibleInRoom(open: Boolean): String? =
launchRequest {
api.changeInvisibleInRoom(open)
}
private interface Api {
@@ -70,6 +75,14 @@ object VipModel : BaseModel() {
@Query("content") content: String,
@Query("roomUid") roomUid: Long
): ServiceResult<String>
/**
* 开关隐身进房状态
*
* @return
*/
@GET("/vip/changeInvisibleInRoom")
suspend fun changeInvisibleInRoom(@Query("open") open: Boolean): ServiceResult<String>
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB