1.签约抱麦添加拒绝逻辑。

2.爵位不返回userInfo 逻辑容错。
3.礼物动画优化。
This commit is contained in:
2025-12-08 19:00:15 +08:00
parent 61106bc5eb
commit 079d9ab1b1
19 changed files with 120 additions and 47 deletions

View File

@@ -161,7 +161,7 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio
//设置mqtt环境 false 测试环境 true 正式环境
// ExternalResConstants.INSTANCE.setIS_MQTT_RELEASE(false);
//设置http环境 false 测试环境 true 正式环境
ExternalResConstants.INSTANCE.setIS_HTTP_RELEASE(true);
ExternalResConstants.INSTANCE.setIS_HTTP_RELEASE(false);
currentEnvironment = ExternalResConstants.INSTANCE.HTTP_PATH();
initialization();

View File

@@ -148,7 +148,8 @@ public class EMMessageInfo implements MultiItemEntity {
/// 延时到这个时间点
public static final int QXRoomMessageTypeSignDelayText = 1093;
/// 被签约者提示弹窗
public static final int QXRoomMessageTypeSignTipText = 1094;
private RoomMessageEvent emMessage;
private int custom = 0;

View File

@@ -128,11 +128,6 @@ public class ConfirmDialog extends Dialog {
}
dismiss();
});
// 倒计时逻辑
if (isCountdownEnabled && countdownSeconds > 0) {
startCountdown(btnNegative);
}
} else {
// 隐藏取消按钮
btnNegative.setVisibility(View.GONE);
@@ -154,15 +149,6 @@ public class ConfirmDialog extends Dialog {
ThemeableDrawableUtils.setThemeableRoundedBackground(btnPositive, ColorManager.getInstance().getPrimaryColorInt(), 53);
btnPositive.setTextColor(ColorManager.getInstance().getButtonColorInt());
// 找到根布局并应用动画
// if (rootView != null) {
// Animation slideDown = AnimationUtils.loadAnimation(context, R.anim.slide_down);
// Animation shake = AnimationUtils.loadAnimation(context, R.anim.shake);
//
// rootView.startAnimation(slideDown);
// rootView.startAnimation(shake);
// }
}
private boolean isCountdownCancelled = false; // 添加标志位
private void startCountdown(Button btnNegative) {

View File

@@ -905,4 +905,8 @@ public interface ApiServer {
@FormUrlEncoded
@POST(Constants.POST_RE_SIGN)
Call<BaseModel<String>> reSign(@Field("user_id") String user_id);
@FormUrlEncoded
@POST(Constants.POST_SIGN_REFUSE)
Call<BaseModel<String>> signRefuse(@Field("room_id") String room_id);
}

View File

@@ -4799,6 +4799,21 @@ public class RetrofitClient {
});
}
public void signRefuse(String roomId,BaseObserver<String> observer){
sApiServer.signRefuse(roomId).enqueue(new Callback<BaseModel<String>>() {
@Override
public void onResponse(Call<BaseModel<String>> call, Response<BaseModel<String>> response) {
onNextRetu(response, observer);
}
@Override
public void onFailure(Call<BaseModel<String>> call, Throwable t) {
}
});
}
public void freeReSign(int type, String userId,BaseObserver<String> observer) {
if (type==1) {
sApiServer.freeReSign(userId).enqueue(new Callback<BaseModel<String>>() {

View File

@@ -433,6 +433,7 @@ public class Constants {
public static final String GET_SKILL_LIST = "/api/Sign/skill_list";//才艺列表
public static final String POST_FREE_RE_SIGN = "/api/Sign/free_re_sign";//免费续约
public static final String POST_RE_SIGN = "/api/Sign/re_sign";//续签(花金币)
public static final String POST_SIGN_REFUSE = "/api/RoomPit/refuse_sign_room_host_invite";//签约房间主持邀请上签约麦用户拒绝

View File

@@ -18,6 +18,7 @@ import com.opensource.svgaplayer.SVGAVideoEntity;
import com.tencent.qgame.animplayer.AnimConfig;
import com.tencent.qgame.animplayer.AnimView;
import com.tencent.qgame.animplayer.inter.IAnimListener;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.GiftBean;
import java.io.File;
@@ -31,6 +32,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.ReentrantLock;
import lombok.Setter;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
@@ -46,7 +48,8 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio
private boolean isShow = true;//是否开启特效
private ReentrantLock lock = new ReentrantLock();
private List<String> giftArray = new ArrayList<>();
public ExecutorService queue = Executors.newSingleThreadExecutor();
@Setter
public ExecutorService queue;
private Context mContext;
private boolean isOnece;
// 添加带Context参数的构造函数
@@ -64,9 +67,6 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio
this.mContext = context;
init();
}
public void setQueue(ExecutorService queue) {
this.queue = queue;
}
public GiftAnimView(Context context) {
super(context);
@@ -76,13 +76,11 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio
private void init() {
isLoadEffect = false;
setBackgroundColor(getResources().getColor(R.color.colorBlack45));
// 初始化SVGA视图
svgaView = new GiftSvgaView(getContext());
addView(svgaView);
playerMp4View = new AnimView(getContext());
addView(playerMp4View);
// 设置布局参数 - 在Android中通常使用LayoutParams

View File

@@ -85,7 +85,7 @@ public class QXGiftPlayerManager {
roomCPView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
));
// 创建专用线程池替代GCD队列
ExecutorService queue = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
@@ -153,10 +153,13 @@ public class QXGiftPlayerManager {
}
chatEffectView = null;
}
if (roomCPView != null) {
// 先调用destroyEffectView方法它会自动从父视图中移除
roomCPView.destroyEffectView();
if (bgEffectView != null) {
((ViewGroup) bgEffectView).removeView(roomCPView);
}
roomCPView = null;
}

View File

@@ -856,7 +856,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
AgoraManager.getInstance().cleanup()
CommonAppContext.getInstance().isPlaying = false
CommonAppContext.getInstance().isShow = false
QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga()
// QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga()
cleanupResources()
}
@@ -1523,6 +1523,8 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
roomFragment?.handleRoomMessage(messageEvent)
} else if (msgType == EMMessageInfo.QXRoomMessageTypeSignDelayText) {
roomFragment?.handleRoomMessage(messageEvent)
}else if (msgType == EMMessageInfo.QXRoomMessageTypeSignTipText) {
roomFragment?.handleRoomMessage(messageEvent)
}
}
@@ -2816,7 +2818,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
// 执行退出房间逻辑
CommonAppContext.getInstance().isPlaying = false
CommonAppContext.getInstance().isShow = false
QXGiftPlayerManager.getInstance(this).destroyEffectSvga()
// QXGiftPlayerManager.getInstance(this).destroyEffectSvga()
AgoraManager.getInstance().cleanup()
MyRoomSingleton.getInstance().onExitRoom()
@@ -2863,7 +2865,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
if (appStateListener != null) {
appStateListener!!.isAppInBackground = true
}
QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga()
// QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga()
if (ActivityUtils.getActivityList().size <= 1) {
singleTaskToActivity(MainActivity::class.java)
} else {

View File

@@ -23,6 +23,8 @@ class MentorShipContacts {
fun signDelay(signId:String,roomId:String)
fun signRefuse(roomId: String)
fun signCoinList(signId:String)
fun signCoin(signId:String,sign_value:String)

View File

@@ -113,14 +113,14 @@ public class RankingChildFragment extends BaseMvpFragment<DataListPresenter, Roo
cAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (view.getId() == R.id.room_item_head) {
CharmRankingResp item = cAdapter.getItem(position);
RoomUserInfoFragment.show(roomId,item.getUser_id(), "", getHostUser(), true, 3, 0, getChildFragmentManager());
RoomUserInfoFragment.show(roomId,item.getUser_id(), "", getHostUser(), false, 3, 0, getChildFragmentManager());
}
});
} else {
wAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (view.getId() == R.id.room_item_head) {
CharmRankingResp item = wAdapter.getItem(position);
RoomUserInfoFragment.show(roomId,item.getUser_id(), "", getHostUser(), true, 3, 0, getChildFragmentManager());
RoomUserInfoFragment.show(roomId,item.getUser_id(), "", getHostUser(), false, 3, 0, getChildFragmentManager());
}
});
}

View File

@@ -906,6 +906,9 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
case EMMessageInfo.QXRoomMessageTypeSignDelayText:
mentorShipFragment.event1093(messageEvent);
break;
case EMMessageInfo.QXRoomMessageTypeSignTipText:
mentorShipFragment.event1094(messageEvent);
break;
}
}

View File

@@ -546,7 +546,7 @@ public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoom
AgoraManager.getInstance().stopMuisc();
MvpPre.changeSong(roomInfoResp.getRoom_info().getRoom_id(), did);
} else if (id == R.id.ll_ds) {
if (mBinding.muYc.pitBean.getUser_id() != null && !mBinding.muYc.pitBean.getUser_id().equals("")) {
if (mBinding.muYc.pitBean.getUser_id() != null && !mBinding.muYc.pitBean.getUser_id().equals("")&& !mBinding.muYc.pitBean.getUser_id().equals("0")) {
UserInfo userInfo = new UserInfo();
userInfo.setAvatar(roomInfoResp.getSong_user_info().getAvatar());
userInfo.setNickname(roomInfoResp.getSong_user_info().getNickname());

View File

@@ -2,6 +2,7 @@ package com.xscm.modulemain.activity.room.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.Handler
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
@@ -9,6 +10,7 @@ import android.widget.PopupWindow
import android.widget.Switch
import android.widget.TextView
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.LogUtils
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.room.contacts.MentorShipContacts
import com.xscm.modulemain.activity.room.presenter.MentorShipPresenter
@@ -36,6 +38,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.launch
/**
@@ -284,8 +287,14 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
mBinding.tvTime.text = "倒计时 00:00:00"
setIvForMai(0)
}
if (viewList[0].pitBean.user_id.equals(mRoomInfo?.user_info?.user_id.toString()) && !mSignPitBean?.user_id.equals("0")){
LogUtils.e(
"showBtn",
"showBtn: $isSignUser isStart: $isStart viewList[0].pitBean.user_id: ${viewList[0].pitBean.user_id} mSignPitBean?.user_id: ${mSignPitBean?.user_id} mRoomInfo?.user_info?.user_id: ${mRoomInfo?.user_info?.user_id} mUserInfo?.user_id: ${mUserInfo?.user_id}"
)
if (viewList[0].pitBean.user_id.equals(mUserInfo?.user_id.toString()) && !mSignPitBean?.user_id.equals(
"0"
)
) {
mBinding.tvTimeLeft.visibility = View.VISIBLE
} else {
mBinding.tvTimeLeft.visibility = View.GONE
@@ -357,7 +366,6 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
setIvForMai(2)
}
}
}
/**
@@ -697,5 +705,23 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
}
}
fun event1094(messageEvent: RoomMessageEvent) {
if (messageEvent.text.user_id.equals(mUserInfo?.user_id.toString())) {
// 创建并显示确认对话框
ConfirmDialog(
ActivityUtils.getTopActivity(),
"提示",
messageEvent.text.text,
"确认",
"拒绝",
{ v: View? ->
MvpPre.applyPit(mRoomInfo?.room_info?.room_id!!, "1")
},
{ v: View? ->
MvpPre.signRefuse(mRoomInfo?.room_info?.room_id!!)
}, true, 5
).show()
}
}
}

View File

@@ -44,6 +44,7 @@ import com.xscm.moduleutil.bean.TopRoom;
import com.xscm.moduleutil.event.MqttBean;
import com.xscm.moduleutil.event.RoomGiftRunable;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.logger.DataLogger;
@@ -271,6 +272,7 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
// 创建适配器
MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getActivity(), list);
mBinding.viewPager.setAdapter(adapter);
mBinding.slidingTabLayout.setSelectedTabIndicatorColor(ColorManager.getInstance().getPrimaryColorInt());
if (!list.isEmpty())
mBinding.viewPager.setOffscreenPageLimit(list.size() - 1);
// 设置 TabLayout 与 ViewPager2 的关联

View File

@@ -78,6 +78,17 @@ class MentorShipPresenter(context: Context, val view: MentorShipContacts.View) :
})
}
override fun signRefuse(roomId: String) {
RetrofitClient.getInstance().signRefuse(roomId, object : BaseObserver<String?>(){
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
}
})
}
override fun signCoinList(signId: String) {
RetrofitClient.getInstance().signCoinList(signId, object : BaseObserver<List<String>>() {
override fun onSubscribe(d: Disposable) {

View File

@@ -15,6 +15,7 @@ import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.hjq.toast.ToastUtils;
import com.rmondjone.locktableview.LockTableView;
import com.rmondjone.xrecyclerview.ProgressStyle;
import com.xscm.modulemain.BaseMvpActivity;
@@ -29,7 +30,9 @@ import com.xscm.moduleutil.bean.NobilitDeatils;
import com.xscm.moduleutil.bean.NobilitList;
import com.xscm.moduleutil.bean.NobilityPrice;
import com.xscm.moduleutil.bean.TableCellData;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.SpUtil;
import java.util.ArrayList;
import java.util.List;
@@ -43,6 +46,7 @@ public class NobleTitleActivity extends BaseMvpActivity<NobleTitlePresenter, Act
private LinearLayout mContentView;
private List<NobilitDeatils.nobilityPowerItem> mNobilityPowerItemList = new ArrayList<>();
private String lid;
@Override
protected void initData() {
MvpPre.getNobilityDetail();
@@ -193,8 +197,27 @@ public class NobleTitleActivity extends BaseMvpActivity<NobleTitlePresenter, Act
@SuppressLint("SetTextI18n")
@Override
public void getNobilityDetail(NobilitDeatils nobilitDeatils) {
ImageUtils.loadHeadCC(nobilitDeatils.getUser_info().getAvatar(), mBinding.ciUserImage);
mBinding.tvUserName.setText(nobilitDeatils.getUser_info().getNickname());
String avatar = "";
String nickName = "";
if (nobilitDeatils.getNobility_info() == null){
UserInfo userInfo = SpUtil.getUserInfo();
avatar = userInfo.getAvatar();
nickName = userInfo.getNickname();
}else {
avatar = nobilitDeatils.getUser_info().getAvatar();
nickName = nobilitDeatils.getUser_info().getNickname();
}
if (avatar == null || avatar.isEmpty()) {
ToastUtils.show("爵位 账号数据存在问题,请联系管理员");
finish();
return;
}
ImageUtils.loadHeadCC(avatar, mBinding.ciUserImage);
mBinding.tvUserName.setText(nickName);
if (nobilitDeatils.getNobility_info().getStatus() == 0) {
mBinding.tvUserLv.setText("暂未开通任何爵位");
mBinding.imMeNobleStatus.setImageResource(com.xscm.moduleutil.R.mipmap.me_noble_no);
@@ -218,11 +241,10 @@ public class NobleTitleActivity extends BaseMvpActivity<NobleTitlePresenter, Act
mBinding.ciImage2.setVisibility(VISIBLE);
mBinding.tvMeX.setVisibility(VISIBLE);
mBinding.imKt.setVisibility(VISIBLE);
ImageUtils.loadHeadCC(nobilitDeatils.getUser_info().getAvatar(), mBinding.ciImage2);
String nickname = nobilitDeatils.getUser_info().getNickname();
ImageUtils.loadHeadCC(avatar, mBinding.ciImage2);
String nickname = nickName;
String displayNickname = nickname.length() > 3 ? nickname.substring(0, 3) + ".." : nickname;
mBinding.tvMeX.setText(displayNickname + "的当前爵位状态是" + nobilitDeatils.getNobility_info().getName());
// mBinding.tvMeX.setText(nobilitDeatils.getUser_info().getNickname()+"的当前爵位状态是"+nobilitDeatils.getNobility_info().getName());
}

View File

@@ -6,7 +6,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_320">
android:layout_height="@dimen/dp_330">
<com.xscm.moduleutil.widget.RoomFriendshipWheatView
@@ -64,7 +64,6 @@
android:id="@+id/tv_heart"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10"
android:gravity="center"
android:paddingStart="@dimen/dp_3"

View File

@@ -267,14 +267,12 @@
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginRight="@dimen/dp_16"
app:tabIndicator="@drawable/tab_indicator_bg"
app:tabIndicatorFullWidth="true"
app:tabIndicatorHeight="@dimen/dp_15"
app:tabIndicatorGravity="center"
app:tabIndicatorFullWidth="false"
app:tabIndicatorHeight="@dimen/dp_2"
app:tabIndicatorGravity="bottom"
app:tabMode="scrollable"
app:tabMinWidth="@dimen/dp_40"
app:tabSelectedTextColor="@color/white"
app:tabIndicatorColor="@android:color/transparent"
app:tabIndicatorColor="@color/colorPrimary"
app:tabTextAppearance="@style/CustomTabTextAppearance"
app:tabTextColor="#F1ECFF" />
</com.google.android.material.appbar.AppBarLayout>