Merge branch 'branch_new' into branch_new_83

This commit is contained in:
2025-12-16 10:01:20 +08:00
127 changed files with 2632 additions and 974 deletions

View File

@@ -74,8 +74,7 @@ public class AppUpdateDialog extends BaseDialog<DialogAppUpdateBinding> implemen
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setMessage("下载中请稍等!!!");
mProgressDialog.show();
DownloadUtil downloadUtil = new DownloadUtil(getContext());
downloadUtil.downloadFile(appUpdateModel.getUrl(), this);
DownloadUtil downloadUtil = new DownloadUtil(getContext(),appUpdateModel.getUrl(),this);
}
}

View File

@@ -274,9 +274,11 @@ public class CirleListAdapter extends BaseQuickAdapter<CircleListBean, BaseViewH
}
if (item.getRoom_id() != null && !item.getRoom_id().equals("0")) {
helper.setText(R.id.gensui, "跟随");
helper.setText(R.id.gensui, "");
helper.getView(R.id.gensui).setBackgroundResource(com.xscm.moduleutil.R.mipmap.gsui);
} else if (item.getRoom_id() == null || item.getRoom_id().equals("0")) {
helper.setText(R.id.gensui, "私信");
helper.setText(R.id.gensui, "");
helper.getView(R.id.gensui).setBackgroundResource(com.xscm.moduleutil.R.mipmap.six);
}
//分享数
// helper.setText(R.id.dy_zs, item.getRewards_num() != null ? item.getRewards_num() : "0");

View File

@@ -80,6 +80,7 @@ public class GiftRoomAdapter extends BaseAdapter {
private static RoonGiftModel sGiftModel;
private GiftRoomAdapter mAdapter;
private RoonGiftModel mGiftModel;
public void setGiftModel(GiftRoomAdapter adapter, RoonGiftModel gift) {
sAdapter = new WeakReference<>(adapter);
sGiftModel = gift;
@@ -152,13 +153,20 @@ public class GiftRoomAdapter extends BaseAdapter {
viewHolder.iv_gift_select.setVisibility(VISIBLE);
}
if (giftModel.getIs_cp()==0) {//这是cp礼物
if (giftModel.getIs_cp() == 0 && giftModel.getIs_teacher() == 0 ) {//这是cp礼物
viewHolder.im_heart.setVisibility(GONE);
} else {
if (viewHolder.im_heart != null) {
viewHolder.im_heart.setVisibility(VISIBLE);
if (giftModel.getIs_cp() == 1) {
viewHolder.im_heart.setImageResource(R.mipmap.icon_heart);
}else if (giftModel.getIs_teacher() == 1) {
viewHolder.im_heart.setImageResource(R.mipmap.icon_teacher);
}
}
}
/*
* 在给View绑定显示的数据时计算正确的position = position + curIndex * pageSize
*/

View File

@@ -297,12 +297,18 @@ public class GiftTwoDetailsFragment extends BaseMvpFragment<RewardGiftPresenter,
roonGiftModel.setNum(giftModel.getNum());
if (giftModel.getGift_id().equals(id)) {
if (!giftModel.isChecked()) {
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type, roonGiftModel));
giftModel.setChecked(true);
roonGiftModel.setChecked(giftModel.isChecked());
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type, roonGiftModel));
}else {
giftModel.setChecked(false);
roonGiftModel.setChecked(giftModel.isChecked());
}
} else {
giftModel.setChecked(false);
roonGiftModel.setChecked(giftModel.isChecked());
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
@@ -321,13 +327,20 @@ public class GiftTwoDetailsFragment extends BaseMvpFragment<RewardGiftPresenter,
if (giftModel.getGift_id().equals(id)) {
selGift = giftModel;
if (!giftModel.isChecked()) {
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type, roonGiftModel));
giftModel.setChecked(true);
roonGiftModel.setChecked(giftModel.isChecked());
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type, roonGiftModel));
}else {
giftModel.setChecked(false);
roonGiftModel.setChecked(giftModel.isChecked());
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type, roonGiftModel));
}
} else {
giftModel.setChecked(false);
EventBus.getDefault().post(new GiftUserRefreshEvent(false, event.type, null));
roonGiftModel.setChecked(giftModel.isChecked());
// EventBus.getDefault().post(new GiftUserRefreshEvent(false, event.type, roonGiftModel));
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();

View File

@@ -3,6 +3,7 @@ package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
* @author qx
* @data 2025/5/27
@@ -12,7 +13,8 @@ import lombok.Data;
public class GiftBoxBean {
private String user_gold;//累计获取的金币
private List<GiftBean> gift_box_list;
private TaskDataBean tasks;
private List<TaskDataBean> tasks;
@Data
public static class GiftBean {
// private String giftName; //初级礼盒、高级礼盒
@@ -21,6 +23,21 @@ public class GiftBoxBean {
// private String giftTypeNumber; //当前的百分比
// private String giftTypeStatus; //是否已经可以
/*{
"id":2,
"name":"高级礼盒",
"title":"最高可获得10000金币",
"icon":"",
"highest_gain":"10000",
"meet":"300",
"unlock_progress":0,
"all_number":"1",
"taday_number":0,
"taday_number_left":1,
"status":0,
"status_str":"未解锁"
}*/
private String id;//礼盒ID
private String name;//礼盒名称
private String title; //标题
@@ -37,25 +54,62 @@ public class GiftBoxBean {
@Data
public static class TaskDataBean {
private List<DailyTasksBean> daily_tasks;
private List<DailyTasksBean> daily_tasks_special;
private List<DailyTasksBean> usual_tasks;
private List<DailyTasksBean> teacher_tasks;
private List<DailyTasksBean> task_list;
// private List<DailyTasksBean> daily_tasks_special;
// private List<DailyTasksBean> usual_tasks;
// private List<DailyTasksBean> teacher_tasks;
private int task_type_id;
private String task_type_name;
@Data
public static class DailyTasksBean {
/* {
"task_id":20,
"icon":null,
"task_name":"每日在房间时长 15 分钟(0/15)",
"target_quantity":900,
"task_type":2,
"jump_type":4,
"tasks_bag_id":0,
"task_status":1,
"task_type_str":"去完成",
"jump_type_str":"跳转房间",
"from_id":6040,
"is_time":1,
"processing_type":2,
"processing_type_str":"去观看",
"reward_str":"25金币笨笨狗x1,
仙女之星头像框,
三八大杠"
}*/
private int task_id;////任务Id
private String task_name;//任务名称
private String icon;//图标
private int gold_reward; //奖励金币
private String task_name;//任务名称
private int target_quantity;//目标完成数量
private int task_type;//任务类型 1每日任务 2每日特殊任务 3平台常规任务
/**
* 0 不跳转
* 1 跳转实名
* 2 跳转我的相册
* 3 跳转绑定管理
* 4 跳转房间
* 5 跳转申请加入公会
* 6 跳转充值
*/
private int jump_type; //跳转类型
private int tasks_bag_id; //任务礼盒ID
private int task_status;//任务状态1完成 2去领取 3已领取
private String task_type_str; //任务状态
private String jump_type_str; //跳转类型提示
private String from_id;
private int is_time;
private int processing_type;//跳转状态:
private String processing_type_str;//跳转状态
private String from_id;
private int reward_type;//1金币 2钻石
private String reward_str;//1奖励
private String student_id;//徒弟ID
}
}

View File

@@ -58,7 +58,7 @@ public class PlaceholderBean {
private String nickname1;
private String avatar;
private String total;
private String rank;
private String rank="";
private List<String> icon;
private String room_name;
private String room_id;

View File

@@ -111,6 +111,9 @@ public class RoomMessageEvent extends BaseEvent {
private String sign_day;//被签约天数
private String current_body_value;//被签约身价
private String status = "";
private String from_id = "";
}
@Data

View File

@@ -35,7 +35,8 @@ public class RoonGiftModel {
private int gift_bag;//10天空之境 11岁月之城 12时空之巅
private int is_lock;//爵位礼物 0不锁 1
private int is_cp;//1:是 0不是
private int is_cp;//1:是 0不是 是不是cp心动礼物
private int is_teacher;//1:是 0不是 是不是师徒礼物
public boolean isCan_send_self() {
if ( isManghe()) {
return true;

View File

@@ -0,0 +1,115 @@
package com.xscm.moduleutil.bean
import com.chad.library.adapter.base.entity.MultiItemEntity
/**
* 项目名称:羽声语音
* 时间2025/12/12 10:35
* 用途:签到实体类
*/
class SignInData : MultiItemEntity{
val TYPE_NORMAL: Int = 0 // 普通类型使用day_sgin布局
val TYPE_DOUBLE: Int = 1 // 双倍宽度类型使用day_sgin2布局
var viewType: Int = TYPE_NORMAL // 默认为普通类型
var day: Int = 0 //第几天
var sign_in_date: String = "" //日期
var sign_in_status: Int = 0 // 签到状态1已签到 0未签到
var sign_in_status_str: String = "" //已签到
var is_today: Int = 0 //是否是当天 0否 1是
var gift_name: String = "" //礼物名称
var num: String = "" //数量
var gift_price: Int = 0 //价格
var type: Int = 0 //类型: 1金币 2礼物 3装扮 4钻石
var base_image: String = "" //礼物图片
override fun getItemType(): Int {
return viewType
}
/* "gift_bag": [
{
"day": 1, //第几天
"sign_in_date": "2025-12-09", //日期
"sign_in_status": 1, //签到状态1已签到 0未签到
"sign_in_status_str": "已签到",
"is_today": 0, //是否是当天 0否 1是
"gift_name": "金币", //礼物名称
"num": 1, //数量
"gift_price": 1, //价格
"type": 1, //类型: 1金币 2礼物 3装扮 4钻石
"base_image": "https://test.vespa.qxyushen.top/static/image/icon/gold.png" //礼物图片
},
{
"day": 2,
"sign_in_date": "2025-12-10",
"sign_in_status": 1,
"sign_in_status_str": "已签到",
"is_today": 0,
"gift_name": "打工狗",
"num": "1 个",
"gift_price": "9",
"type": 2,
"base_image": "https://cos.xscmmidi.site/admin/3143tianxuanbanzhuangou_17615346376493.png"
},
{
"day": 3,
"sign_in_date": "2025-12-11",
"sign_in_status": 1,
"sign_in_status_str": "已签到",
"is_today": 0,
"gift_name": "神皇",
"num": "3 天",
"gift_price": 30,
"type": 3,
"base_image": "https://midi01.oss-cn-beijing.aliyuncs.com/5544shenhuang_17579016149523.png"
},
{
"day": 4,
"sign_in_date": "2025-12-12",
"sign_in_status": 1,
"sign_in_status_str": "已签到",
"is_today": 1,
"gift_name": "心动喷发",
"num": "2 个",
"gift_price": "100",
"type": 2,
"base_image": "https://cos.xscmmidi.site/admin/3300xindongpenfa_17615347008740.png"
},
{
"day": 5,
"sign_in_date": "2025-12-13",
"sign_in_status": 0,
"sign_in_status_str": "未签到",
"is_today": 0,
"gift_name": "钻石",
"num": 20,
"gift_price": 1,
"type": 4,
"base_image": "https://test.vespa.qxyushen.top/static/image/icon/gold.png"
},
{
"day": 6,
"sign_in_date": "2025-12-14",
"sign_in_status": 0,
"sign_in_status_str": "未签到",
"is_today": 0,
"gift_name": "王者之戒",
"num": "1 个",
"gift_price": "19",
"type": 2,
"base_image": "https://cos.xscmmidi.site/admin/5390wangzhezhijie_17615353361010.png"
},
{
"day": 7,
"sign_in_date": "2025-12-15",
"sign_in_status": 0,
"sign_in_status_str": "未签到",
"is_today": 0,
"gift_name": "财源滚滚",
"num": "30 天",
"gift_price": 288,
"type": 3,
"base_image": "https://midi01.oss-cn-beijing.aliyuncs.com/2160caiyuangunguntouxiangkuang_17579008394073.png"
}
]*/
}

View File

@@ -0,0 +1,11 @@
package com.xscm.moduleutil.bean
/**
* 项目名称:羽声语音
* 时间2025/12/12 14:54
* 用途:签到状态
*/
class TasksSignStatus {
var status : Int=0
var status_str: String=""
}

View File

@@ -1,5 +1,7 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
@Data
@@ -9,8 +11,9 @@ public class UserResultResp {
private String user_id;
private String user_code;
private String nickname;
private String head_picture;
private String sex;
private String avatar;
private int sex;
private List<String> icon;
private String follow;
private String fans_count;
private String online_text;

View File

@@ -1,11 +1,12 @@
package com.xscm.moduleutil.bean.room;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
@Data
public class RoomOnline {
public class RoomOnline implements Serializable {
private List<RoomOnlineBean> on_pit;//麦上用户
private List<RoomOnlineBean> off_pit;//麦下用户

View File

@@ -2,6 +2,7 @@ package com.xscm.moduleutil.bean.room;
import com.chad.library.adapter.base.entity.MultiItemEntity;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
@@ -12,7 +13,7 @@ import lombok.Data;
* @description: 房间在线列表
*/
@Data
public class RoomOnlineBean implements MultiItemEntity {
public class RoomOnlineBean implements MultiItemEntity, Serializable {
private int itemViewType;
private String typeNames;
private int user_id;

View File

@@ -1,6 +1,7 @@
package com.xscm.moduleutil.dialog;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
@@ -36,6 +37,7 @@ public class ConfirmDialog extends Dialog {
private int countdownSeconds = 0; // 倒计时秒数
private CountDownTimer countDownTimer; // 倒计时对象
private Context context;
public ConfirmDialog(Context context, String title, String message,
String positiveButtonText, String negativeButtonText,
@@ -43,6 +45,7 @@ public class ConfirmDialog extends Dialog {
View.OnClickListener negativeButtonClickListener,
boolean isCountdownEnabled, int countdownSeconds) {
super(context);
this.context = context;
this.title = title;
this.message = message;
this.positiveButtonText = positiveButtonText;
@@ -60,6 +63,7 @@ public class ConfirmDialog extends Dialog {
View.OnClickListener negativeButtonClickListener,
boolean isCountdownEnabled, int countdownSeconds) {
super(context);
this.context = context;
this.title = title;
this.spannableMessage = spannableMessage;
this.positiveButtonText = positiveButtonText;
@@ -178,6 +182,12 @@ public class ConfirmDialog extends Dialog {
countDownTimer.cancel(); // 取消倒计时
countDownTimer = null;
}
if (context instanceof Activity) {
Activity activity = (Activity) context;
if (activity.isFinishing() || activity.isDestroyed()) {
return; // Don't try to dismiss if activity is gone
}
}
super.dismiss();
}
}

View File

@@ -25,9 +25,11 @@ import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.AppPay;
import com.xscm.moduleutil.bean.BindType;
import com.xscm.moduleutil.bean.RechargeBean;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.databinding.FragmentRechargeDialogBinding;
import com.xscm.moduleutil.presenter.RechargeDialogContacts;
import com.xscm.moduleutil.presenter.RechargeDialogPresenter;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.widget.PaymentUtil;
import com.tencent.mm.opensdk.openapi.IWXAPI;
@@ -142,6 +144,9 @@ public class RechargeDialogFragment extends BaseMvpDialogFragment<RechargeDialog
}else{
mBinding.r4.setVisibility(View.GONE);
}
ThemeableDrawableUtils.setThemeableRoundedBackground(mBinding.tvPayment, ColorManager.getInstance().getPrimaryColorInt(), 53);
mBinding.tvPayment.setTextColor(ColorManager.getInstance().getButtonColorInt());
}
@Override

View File

@@ -80,7 +80,7 @@ public interface ApiServer {
@FormUrlEncoded
@POST(Constants.dailyTasksReceive)
Call<ResponseBody> dailyTasksReceive(@Field("task_id") String task_id);
Call<ResponseBody> dailyTasksReceive(@Field("task_id") String task_id,@Field("student_id") String student_id);
@FormUrlEncoded
@POST(Constants.dailyTasksComplete)
@@ -498,6 +498,10 @@ public interface ApiServer {
@POST(Constants.JOIN_ROOM)
Call<BaseModel<RoomInfoResp>> roomGetIn(@Field("room_id") String roomId, @Field("password") String password);
@FormUrlEncoded
@POST(Constants.TASK_JUMP_ROOM)
Call<BaseModel<String>> taskJumpRoomId(@Field("task_id") String taskId);
@FormUrlEncoded
@POST(Constants.DELETE_ALBUM_IMAGE)
Call<BaseModel<String>> deleteAlbumImage(@Field("id") String id);
@@ -915,4 +919,14 @@ public interface ApiServer {
@FormUrlEncoded
@POST(Constants.POST_SIGN_REFUSE)
Call<BaseModel<String>> signRefuse(@Field("room_id") String room_id);
@GET(Constants.GET_SIGN_IN_LIST)
Call<BaseModel<List<SignInData>>> signIn();
@GET(Constants.POST_DAILY_TASKS_SIGN)
Call<BaseModel<String>> postDailyTasksSign();
@GET(Constants.POST_DAILY_TASKS_SIGN_STATUS)
Call<BaseModel<TasksSignStatus>> postDailyTasksSignStatus();
}

View File

@@ -887,8 +887,8 @@ public class RetrofitClient {
sApiServer.roomRanking(type).compose(new DefaultTransformer<>()).subscribe(observer);
} else if (ranking_type.equals("1") || ranking_type.equals("2")) {
sApiServer.wealthRanking(ranking_type, type).compose(new DefaultTransformer<>()).subscribe(observer);
} else if (ranking_type.equals("3")) {
sApiServer.loveRanking(type).compose(new DefaultTransformer<>()).subscribe(observer);
} else if (ranking_type.equals("3")) {//2025年12月11日14:57:44原是传递的type现在修改成0.只是将真爱榜变成心动榜
sApiServer.loveRanking("0").compose(new DefaultTransformer<>()).subscribe(observer);
} else if (ranking_type.equals("4")) {
sApiServer.guildRanking().compose(new DefaultTransformer<>()).subscribe(observer);
}
@@ -921,6 +921,8 @@ public class RetrofitClient {
BaseModel<List<MyBagDataBean>> baseModel = response.body();
if (baseModel.getCode() == 1) {
observer.onNext(baseModel.getData());
}else if (baseModel.getCode() == 0) {
observer.onNext(new ArrayList<>());
}
}
}
@@ -940,6 +942,8 @@ public class RetrofitClient {
BaseModel<List<MyBagDataBean>> baseModel = response.body();
if (baseModel.getCode() == 1) {
observer.onNext(baseModel.getData());
}else if (baseModel.getCode() == 0) {
observer.onNext(new ArrayList<>());
}
}
}
@@ -961,7 +965,7 @@ public class RetrofitClient {
if (baseModel.getCode() == 1) {
observer.onNext(baseModel.getData());
} else {
observer.onNext(null);
// observer.onNext(null);
}
}
}
@@ -982,7 +986,7 @@ public class RetrofitClient {
if (baseModel.getCode() == 1) {
observer.onNext(baseModel.getMsg());
} else {
observer.onNext(null);
// observer.onNext(null);
}
}
}
@@ -1058,8 +1062,8 @@ public class RetrofitClient {
sApiServer.dailyTasksOpenBox(gift_box_id).compose(new DefaultTransformer<>()).subscribe(observer);
}
public void dailyTasksReceive(String task_id, BaseObserver<String> observer) {
sApiServer.dailyTasksReceive(task_id).enqueue(new Callback<ResponseBody>() {
public void dailyTasksReceive(String task_id,String student_id, BaseObserver<String> observer) {
sApiServer.dailyTasksReceive(task_id,student_id).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
@@ -2277,6 +2281,26 @@ public class RetrofitClient {
});
}
public void taskJumpRoomId(String taskId, BaseObserver<String> observer) {
sApiServer.taskJumpRoomId(taskId).enqueue(new Callback<BaseModel<String>>() {
@Override
public void onResponse(Call<BaseModel<String>> call, Response<BaseModel<String>> response) {
if (response.code() == 200) {
BaseModel<String> stringBaseModel = response.body();
if (stringBaseModel.getCode() == 1) {
observer.onNext(stringBaseModel.getData());
}
}
}
@Override
public void onFailure(Call<BaseModel<String>> call, Throwable t) {
}
});
}
public void updatePassword(String roomId, String password, BaseObserver<String> observer) {
sApiServer.updatePassword(roomId, password).enqueue(new Callback<BaseModel<String>>() {
@@ -4913,6 +4937,83 @@ public class RetrofitClient {
}
}
public void signIn(BaseObserver<List<SignInData>> observer) {
sApiServer.signIn().enqueue(new Callback<BaseModel<List<SignInData>>>(){
@Override
public void onResponse(Call<BaseModel<List<SignInData>>> call, Response<BaseModel<List<SignInData>>> response) {
if (response.code()==200){
BaseModel<List<SignInData>> baseModel = response.body();
if (baseModel.getCode()==1 ){
observer.onNext(baseModel.getData()!=null ? baseModel.getData() : new ArrayList<SignInData>());
}else if (baseModel.getCode()==0){
com.hjq.toast.ToastUtils.show(baseModel.getMsg());
}else if (baseModel.getCode()==301){
try {
CommonAppContext.getInstance().clearLoginInfo();
ToastUtils.showShort(baseModel.getMsg());
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}else {
LogUtils.e("signIn",response.errorBody());
}
}
@Override
public void onFailure(Call<BaseModel<List<SignInData>>> call, Throwable t) {
LogUtils.e("signIn", t.fillInStackTrace());
}
});
}
public void dailyTasksSign(BaseObserver<String> observer) {
sApiServer.postDailyTasksSign().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) {
LogUtils.e("signIn", t.fillInStackTrace());
}
});
}
public void tasksSignStatus(BaseObserver<TasksSignStatus> observer) {
sApiServer.postDailyTasksSignStatus().enqueue(new Callback<BaseModel<TasksSignStatus>>(){
@Override
public void onResponse(Call<BaseModel<TasksSignStatus>> call, Response<BaseModel<TasksSignStatus>> response) {
if (response.code()==200){
BaseModel<TasksSignStatus> baseModel = response.body();
if (baseModel.getCode()==1){
observer.onNext(baseModel.getData());
}else if (baseModel.getCode()==0){
com.hjq.toast.ToastUtils.show(baseModel.getMsg());
}else if (baseModel.getCode()==301){
try {
CommonAppContext.getInstance().clearLoginInfo();
ToastUtils.showShort(baseModel.getMsg());
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}else {
LogUtils.e("postDailyTasksSignStatus",response.errorBody());
}
}
@Override
public void onFailure(Call<BaseModel<TasksSignStatus>> call, Throwable t) {
LogUtils.e("postDailyTasksSignStatus", t.fillInStackTrace());
}
});
}
}

View File

@@ -17,6 +17,7 @@ import com.xscm.moduleutil.event.RoomJoinMountModel;
import com.xscm.moduleutil.event.UnreadCountEvent;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.rtc.MusicPlayBean;
import com.xscm.moduleutil.utils.CustomMsgCode;
import com.xscm.moduleutil.utils.SpUtil;
import com.tencent.imsdk.v2.V2TIMAdvancedMsgListener;
import com.tencent.imsdk.v2.V2TIMCallback;
@@ -66,6 +67,8 @@ public class MessageListenerSingleton {
private final Map<String, List<RoomMessageEvent>> cachedMessages = new ConcurrentHashMap<>();
private final Set<String> joinedRooms = ConcurrentHashMap.newKeySet();
private OnMsgTaskListener onMsgTaskListener;
// private boolean listenersAdded = false; // 标记监听器是否已添加
// 1. 添加新的监听器接口
public interface PublicScreenMessageListener {
@@ -321,6 +324,10 @@ public class MessageListenerSingleton {
if (event.getMsgType() == 130 || event.getMsgType() == 131) {
// EventBus.getDefault().post(event);
RetrofitClient.getInstance().getCpListener().onReceiveMsg(event);
} else if (event.getMsgType() == CustomMsgCode.INSTANCE.getCODE_TASK_APPRENTICE_JOIN_ROOM()) {
if (onMsgTaskListener != null) {
onMsgTaskListener.onMsgTask(event);
}
} else {
notifyMessageReceived(event);
}
@@ -608,6 +615,30 @@ public class MessageListenerSingleton {
}
// TODO: 2025/11/19 添加发送公共方法messageType发送的typemessage发送的内容 userId发送给谁
public void sendCustomC2CMessage(int messageType, String userId,RoomMessageEvent.T text) {
text.setFromUserInfo(SpUtil.getUserInfo());
LogUtils.e("发送消息", "messageType:" + messageType + "\nuserId:" + userId + "\ntext:" + text,toString());
RoomMessageEvent roomMessageEvent = new RoomMessageEvent(messageType, mRoomId, text);
String json = com.blankj.utilcode.util.GsonUtils.toJson(roomMessageEvent);
// 转换为 byte[]
byte[] binaryData = json.getBytes(StandardCharsets.UTF_8);
// 创建自定义群消息
V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage(binaryData);
v2TIMMessage.setExcludedFromUnreadCount(true);
v2TIMMessage.setExcludedFromContentModeration(true);
// v2TIMMessage.setNeedReadReceipt(true);
//
// // 发送消息
V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, "u" + userId, null, V2TIMMessage.V2TIM_PRIORITY_HIGH,
true,
null,
sendCallback);
}
public void sendCustomC2CMessage125(String userId, byte[] binaryData) {
// 创建自定义群消息
V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage(binaryData);
@@ -664,4 +695,13 @@ public class MessageListenerSingleton {
public interface OnMessageReceivedListener {
void onMessageReceived(RoomMessageEvent message);
}
public void setOnMsgTaskListener(OnMsgTaskListener listener) {
this.onMsgTaskListener = listener;
}
public interface OnMsgTaskListener {
void onMsgTask(RoomMessageEvent message);
}
}

View File

@@ -0,0 +1,8 @@
package com.xscm.moduleutil.utils
object CustomMsgCode {
val CODE_TASK_APPRENTICE_JOIN_ROOM_TIMER_ID = "132"
val CODE_TASK_APPRENTICE_JOIN_ROOM = 132
val CODE_TASK_APPRENTICE_JOIN_ROOM_MSG = "您的师傅邀请您进入房间,您是否同意?"
val CODE_TASK_APPRENTICE_JOIN_ROOM_MSG_REFUSE = "您的徒弟拒绝了您的邀请。"
}

View File

@@ -135,7 +135,7 @@ public class DateSelectDialog extends BaseBottomSheetDialog<MeDialogDateSelectBi
int currentDay = TimeUtils.getDay();
// 如果是最大年份且是最大月份,则日期不能超过当前日期
if (year == currentYear - 16 && month == currentMonth) {
if (year == currentYear - 18 && month == currentMonth) {
dayLimit = currentDay;
}
@@ -158,7 +158,7 @@ public class DateSelectDialog extends BaseBottomSheetDialog<MeDialogDateSelectBi
int monthLimit = 12;
// 如果是最大年份16年前则月份不能超过当前月份
if (year == currentYear - 16) {
if (year == currentYear - 18) {
monthLimit = currentMonth;
}
@@ -175,7 +175,7 @@ public class DateSelectDialog extends BaseBottomSheetDialog<MeDialogDateSelectBi
private List<DateBean> getYear() {
int currentYear = TimeUtils.getYear();
int minYear = currentYear - 100; // 最小年份设为100年前
int maxYear = currentYear - 16; // 最大年份设为16年前
int maxYear = currentYear - 18; // 最大年份设为16年前
List<DateBean> yearList = new ArrayList<>();
for (int i = minYear; i <= maxYear; i++) {

View File

@@ -1,16 +1,21 @@
package com.xscm.moduleutil.utils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.util.Log;
import com.alibaba.android.arouter.utils.TextUtils;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ThreadUtils;
import com.blankj.utilcode.util.ToastUtils;
import java.io.File;
import java.io.FileNotFoundException;
@@ -19,6 +24,11 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
@@ -41,14 +51,58 @@ public class DownloadUtil {
private static final String PATH_AUDIO = Environment.getExternalStorageDirectory() + "/qipao/audio";
public DownloadUtil(Context context) {
this.mContext = context;
@SuppressLint("CheckResult")
public DownloadUtil(Context context, String downUrl,final DownloadListener downloadListener) {
// 1. 判空,避免空指针
if (context == null) {
ToastUtils.showShort("Context 不能为 null");
LogUtils.e("Context 不能为 null."+(mApi == null));
return;
}
if (downUrl == null || downUrl.trim().isEmpty()) {
ToastUtils.showShort("下载链接不能为 null 或空!");
LogUtils.e("下载链接不能为 null 或空!."+(mApi == null));
return;
}
this.mContext = context;
final String dUrl = downUrl;
File qipaoDir = new File(mContext.getFilesDir(), PATH_APK);
if (qipaoDir.exists() && qipaoDir.isDirectory()) {
Observable.create(new ObservableOnSubscribe<Boolean>() {
@Override
public void subscribe(ObservableEmitter<Boolean> emitter) throws Exception {
LogUtils.e("删除文件中."+(mApi == null));
FileUtils.deleteAllInDir(qipaoDir);
emitter.onNext(true);
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
LogUtils.e("删除成功."+(mApi == null));
if (mApi == null) {
//初始化网络请求接口
mApi = ApiHelper.getInstance().createService(ApiInterface.class);
mApkPath = new File(mContext.getFilesDir(), PATH_APK).getAbsolutePath();
int i = dUrl.lastIndexOf('/');//一定是找最后一个'/'出现的位置
String downUrlEnd = "";
if (i != -1) {
downUrlEnd = dUrl.substring(i);
}
mApkPath = new File(mContext.getFilesDir(), PATH_APK + downUrlEnd).getAbsolutePath();
}
downloadFile(dUrl, downloadListener);
});
} else {
LogUtils.e("else ."+(mApi == null));
if (mApi == null) {
//初始化网络请求接口
mApi = ApiHelper.getInstance().createService(ApiInterface.class);
int i = downUrl.lastIndexOf('/');//一定是找最后一个'/'出现的位置
if (i != -1) {
downUrl = downUrl.substring(i);
}
mApkPath = new File(mContext.getFilesDir(), PATH_APK + downUrl).getAbsolutePath();
}
downloadFile(downUrl, downloadListener);
}
}

View File

@@ -1,5 +1,7 @@
package com.xscm.moduleutil.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -258,6 +260,25 @@ public class TimeUtils {
return "1天"; // 或者 return "0天";
}
/**
* 计算时间差值并向上取整为天数
* @param currentTimeMillis 当前时间(毫秒级时间戳)
* @param createTimeSecond 创建时间(秒级时间戳)
* @return 向上取整后的天数
*/
public static int calculateDays(long currentTimeMillis, long createTimeSecond) {
// 1. 计算时间差(毫秒)
long timeDiffMillis = currentTimeMillis - createTimeSecond;
// 2. 转换为天数1天 = 24*60*60*1000 毫秒)
BigDecimal daysDecimal = new BigDecimal(timeDiffMillis)
.divide(new BigDecimal(24 * 60 * 60 * 1000), 10, RoundingMode.HALF_UP);
// 3. 向上取整(即使是 8.0001 天也会变成 9 天)
return daysDecimal.setScale(0, RoundingMode.CEILING).intValue();
}
/**
* 根据生日字符串计算年龄
* @param birthDay 生日字符串,格式为 "yyyy-MM-dd"

View File

@@ -422,6 +422,7 @@ public class AvatarFrameView extends FrameLayout {
mainHandler.post(() -> {
// 检查是否已销毁
if (file.exists()) {
LogUtils.e("有缓存:"+file.exists()+"===="+file.getAbsolutePath());
playMp4File(file);
} else {
LogUtils.w(TAG, "有缓存2222222222222");

View File

@@ -260,6 +260,7 @@ public class Constants {
public static final String GET_DECORATE = "/api/Decorate/user_decorate";//装扮详情
public static final String SET_USER_DECORATE = "/api/Decorate/set_user_decorate";//用户装扮
public static final String JOIN_ROOM = "/api/Room/join_room";//加入房间
public static final String TASK_JUMP_ROOM = "/api/Room/task_jump_room";//师徒任务 加入房间
public static final String UPDATEPASSWORD = "/api/room/setRoomPassword";//更新房间秘密啊
public static final String GET_ROOM_ONLINE = "/api/Room/room_online_list";//房间在线列表
@@ -360,9 +361,11 @@ public class Constants {
public static final String POST_ROOM_RANKING = "/api/Ranking/room_ranking";//房间榜
public static final String GUILD_RANKING = "/api/Ranking/guild_ranking";//公会榜
public static final String POST_LOVE_RANKING = "/api/Ranking/love_ranking";//真爱榜
public static final String GET_TASKS_LIHEN = "/api/Dailytasks/dailyTasksList";//每日任务列表
public static final String GET_DAILY_TASK_BOX = "/api/Dailytasks/dailyTasksBoxRecord";//礼盒记录
public static final String dailyTasksOpenBox = "/api/Dailytasks/dailyTasksOpenBox";//开启礼盒
public static final String GET_TASKS_LIHEN = "/api/Tasks/dailyTasksList";//每日任务列表
public static final String GET_DAILY_TASK_BOX = "/api/Tasks/dailyTasksBoxRecord";//礼盒记录
public static final String dailyTasksOpenBox = "/api/Tasks/dailyTasksOpenBox";//开启礼盒
public static final String dailyTasksReceive = "/api/Tasks/dailyTasksReceive";//领取每日任务奖励
public static final String dailyTasksComplete = "/api/Tasks/dailyTasksComplete";//领取每日任务奖励
public static final String GET_MY_BAG_DATA = "/api/UserGiftPack/get_gift_pack_income";//背包收入
public static final String GET_MY_BAG_OUTCOME = "/api/UserGiftPack/get_gift_pack_outcome";//背包礼物支出列表
public static final String GET_GIFT_PACK = "/api/UserGiftPack/get_gift_pack_list";//获取背包礼物列表
@@ -386,9 +389,7 @@ public class Constants {
public static final String GET_ACTIVITIES_PERMISSION = "/api/Activities/activities_permission";//活动弹框权限
public static final String GET_INDEX_RECOMMEND_ROOM = "/api/Index/index_recommend_room";//首页弹窗推荐房间
public static final String GET_DAY_DROP_GIFT = "/api/Activities/day_drop_gift";//天降好礼列表接口(弹框)
public static final String dailyTasksReceive = "/api/Dailytasks/dailyTasksReceive";//领取每日任务奖励
public static final String postRoomSwToken = "/api/Room/update_user_sw_token";//获取用户声网token
public static final String dailyTasksComplete = "/api/Dailytasks/dailyTasksComplete";//领取每日任务奖励
public static final String POST_CANCEL_USER_DECORATE = "/api/Decorate/cancel_user_decorate";//取消装扮
public static final String GET_THEME_DATA = "/api/Theme/get_theme_data";//主题接口
public static final String START_FRIEND = "/api/Friend/start_friend";//点击开始按钮 交友房
@@ -436,6 +437,9 @@ public class Constants {
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";//签约房间主持邀请上签约麦用户拒绝
public static final String GET_SIGN_IN_LIST = "/api/Tasks/dailyTasksSignList";//签到列表页面
public static final String POST_DAILY_TASKS_SIGN = "/api/Tasks/dailyTasksSign";//每日签到
public static final String POST_DAILY_TASKS_SIGN_STATUS = "/api/Tasks/dailyTasksSignStatus";//每日签到状态

View File

@@ -15,6 +15,8 @@ class CustomViewPager(context: Context, attrs: AttributeSet?) : ViewPager(contex
private var initialX = 0f
private var initialY = 0f
private var isBeingDragged = false
override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
when (ev.action) {
MotionEvent.ACTION_DOWN -> {
@@ -31,11 +33,34 @@ class CustomViewPager(context: Context, attrs: AttributeSet?) : ViewPager(contex
if (deltaX > deltaY && deltaX > 30) { // 30是阈值可以根据需要调整
return super.onInterceptTouchEvent(ev)
}
// 否则,不拦截,让子视图处理
// 如果是向上滑动,确保父容器不拦截
if (deltaY > deltaX && ev.y < initialY) {
parent.requestDisallowInterceptTouchEvent(true)
return false
}
// // 否则,不拦截,让子视图处理
// parent.requestDisallowInterceptTouchEvent(true)
// return false
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
isBeingDragged = false
}
}
return super.onInterceptTouchEvent(ev)
}
override fun onTouchEvent(ev: MotionEvent): Boolean {
when (ev.action) {
MotionEvent.ACTION_DOWN -> {
parent.requestDisallowInterceptTouchEvent(true)
}
MotionEvent.ACTION_MOVE -> {
if (isBeingDragged) {
parent.requestDisallowInterceptTouchEvent(true)
}
}
}
return super.onTouchEvent(ev)
}
}

View File

@@ -10,26 +10,17 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.blankj.utilcode.util.LogUtils;
import com.opensource.svgaplayer.SVGACallback;
import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
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;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.ReentrantLock;
import lombok.Setter;
@@ -276,9 +267,7 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio
if (isLoadEffect && giftModel != null && !TextUtils.isEmpty(giftModel)) {
String finalGiftModel = giftModel;
post(new Runnable() {
@Override
public void run() {
post(() -> {
String playImage = finalGiftModel;
if (playImage.endsWith("mp4")) {
downloadAndPlay(getContext(), playImage, new DownloadCallback() {
@@ -324,7 +313,6 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio
// 直接播放缓存文件
}
}
});
}
}

View File

@@ -37,7 +37,7 @@ class ShineTextView : AppCompatTextView {
var _count: Int = 0 //自行运行动画次数
private lateinit var mLinearGradient: LinearGradient
private var mLinearGradient: LinearGradient? = null
private var mGradientMatrix: Matrix = Matrix()
private var mViewWidth = 0
private var mTranslate = 0
@@ -121,13 +121,13 @@ class ShineTextView : AppCompatTextView {
_count++
}
mGradientMatrix.setTranslate(mTranslate.toFloat(), 0f)
mLinearGradient.setLocalMatrix(mGradientMatrix)
mLinearGradient?.setLocalMatrix(mGradientMatrix)
when {
shineType == 0 && _count < shineCount -> postInvalidateDelayed(50)
shineType == 1 && _count < 1 -> postInvalidateDelayed(50)
else -> {
mGradientMatrix.setTranslate((1.2 * mViewWidth).toFloat(), 0f)
mLinearGradient.setLocalMatrix(mGradientMatrix)
mLinearGradient?.setLocalMatrix(mGradientMatrix)
}
}
}

View File

@@ -270,7 +270,7 @@ public class RewardGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPr
private void giveGift(String num) {
getSelectedGift();
if (roonGiftModel == null) {
if (roonGiftModel == null || !roonGiftModel.isChecked()) {
ToastUtils.show("请选择礼物");
return;
}

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="90"
android:centerColor="#CFFFDC"
android:endColor="#CFFFDC"
android:startColor="#DEFF85"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="@dimen/dp_16"
/>
</shape>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:centerColor="#90FF86"
android:endColor="#E7FE67"
android:startColor="#5CFBBD"
android:type="linear"
android:useLevel="true" />
<stroke android:color="#FFFFF072" android:width="@dimen/dp_1"/>
<corners android:radius="@dimen/dp_99" />
</shape>

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="rectangle">
<solid android:color="#fffcf7eb" />
<corners
android:bottomLeftRadius="4dp"
android:bottomRightRadius="4dp"
android:topLeftRadius="4dp"
android:topRightRadius="4dp" />
</shape>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="90"
android:centerColor="#CFFFDC"
android:endColor="#CFFFDC"
android:startColor="#DEFF85"
android:type="linear"
android:useLevel="true" />
<corners
android:bottomLeftRadius="4dp"
android:bottomRightRadius="4dp"
android:topLeftRadius="4dp"
android:topRightRadius="4dp" />
</shape>

View File

@@ -90,7 +90,7 @@
android:id="@+id/im_heartssss"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_heart"
tools:src="@mipmap/icon_heart"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:scaleType="fitCenter"

View File

@@ -43,7 +43,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.59" />
app:layout_constraintGuide_percent="0.62" />
<ImageView
android:id="@+id/iv_frame_bg"

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

View File

@@ -299,6 +299,7 @@
<color name="EFF2F8">#EFF2F8</color>
<color name="color_5B5B5B">#5B5B5B</color>
<color name="color_C7BF62">#C7BF62</color>
<color name="color_e3fae4">#FFE3FAE4</color>
<!-- 主题色 -->

View File

@@ -2,6 +2,9 @@ package com.xscm.modulemain
import android.app.Activity
import android.content.Context
import android.text.TextUtils
import android.view.View
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.AppUtils
import com.blankj.utilcode.util.CrashUtils
import com.blankj.utilcode.util.LogUtils
@@ -10,14 +13,22 @@ import com.opensource.svgaplayer.utils.log.SVGALogger
import com.scwang.smartrefresh.layout.SmartRefreshLayout
import com.scwang.smartrefresh.layout.footer.ClassicsFooter
import com.scwang.smartrefresh.layout.header.ClassicsHeader
import com.xscm.modulemain.activity.main.activity.MainActivity
import com.xscm.modulemain.activity.room.activity.RoomActivity
import com.xscm.modulemain.dialog.InviteDialog
import com.xscm.modulemain.manager.RoomManager
import com.xscm.modulemain.utils.TimerManager
import com.xscm.modulemain.widget.WheatLayoutSingManager
import com.xscm.moduleutil.base.CommonAppContext
import com.xscm.moduleutil.bean.IndexRecommendRoom
import com.xscm.moduleutil.bean.RoomMessageEvent
import com.xscm.moduleutil.dialog.ConfirmDialog
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import com.xscm.moduleutil.listener.MessageListenerSingleton
import com.xscm.moduleutil.utils.CustomMsgCode
import io.reactivex.disposables.Disposable
import org.json.JSONObject
import java.util.concurrent.TimeUnit
open class Application : CommonAppContext() {
@@ -29,6 +40,7 @@ open class Application : CommonAppContext() {
var isAgoraStop = false
var inviteDialog: InviteDialog? = null
var currDialogActivity: Activity? = null
// 单例实例
companion object {
@@ -48,10 +60,9 @@ open class Application : CommonAppContext() {
override fun onCreate() {
super.onCreate()
APP_CONENT = getExternalFilesDir("APP_CONTENT")?.absolutePath.toString()
LOGUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_LOG")?.absolutePath.toString()
CRASHUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_CRASH")?.absolutePath.toString()
getExternalFilesDir("")
APP_CONENT = getExternalFilesDir("APP_CONTENT")?.absolutePath.toString()
// 初始化单例实例
instance = this
@@ -66,7 +77,127 @@ open class Application : CommonAppContext() {
initCrashUtils()
initSmartRefreshLayout()
initImMsg()
}
private fun initImMsg() {
MessageListenerSingleton.getInstance().setOnMsgTaskListener { event ->
when (event.msgType) {
CustomMsgCode.CODE_TASK_APPRENTICE_JOIN_ROOM -> {
TimerManager.cancelTimer(CustomMsgCode.CODE_TASK_APPRENTICE_JOIN_ROOM_TIMER_ID)
try {
val json = JSONObject(event.text.text)
if (!json.isNull("status")) {
event.text.status = json.getString("status")
}
if (TextUtils.isEmpty(event.text.status))
return@setOnMsgTaskListener
when (event.text.status) {
"1" -> {//1:邀请
if (!json.isNull("room_id"))
event.text.room_id = json.getString("room_id")
if (event?.text?.room_id.isNullOrEmpty())
return@setOnMsgTaskListener
customDialog(
event.text.room_id,
CustomMsgCode.CODE_TASK_APPRENTICE_JOIN_ROOM_MSG,
5,
1,
event.text
)
}
"2" -> {//2:拒绝
customDialog(
"",
CustomMsgCode.CODE_TASK_APPRENTICE_JOIN_ROOM_MSG_REFUSE,
5,
3,
null,
"",
"知道了"
)
}
}
}catch (E: Exception){
LogUtils.e("Exception",E.message.toString())
}
}
}
}
}
private fun customDialog(
roomId: String,
message: String,
downCount: Int,
status: Int = 1,
event: RoomMessageEvent.T?,
confirm: String = "同意",
cancel: String = "拒绝",
) {
// 创建并显示确认对话框
ConfirmDialog(
ActivityUtils.getTopActivity(),
"提示",
message,
confirm,
cancel,
{ v: View? ->
when (status) {
1 -> {
if (!TextUtils.isEmpty(CommonAppContext.getInstance().playId)
&& roomId == CommonAppContext.getInstance().playId
&& ActivityUtils.getTopActivity() is RoomActivity
) {
return@ConfirmDialog
}
if (ActivityUtils.getTopActivity() is RoomActivity) {
(ActivityUtils.getTopActivity() as RoomActivity).refreshRoomInfo(roomId)
return@ConfirmDialog
}
RoomManager.getInstance()
.fetchRoomDataAndEnter(ActivityUtils.getTopActivity(), roomId, "", null)
}
}
},
{ v: View? ->
when (status) {
1 -> {
val text = RoomMessageEvent.T()
val json = JSONObject()
json.put("status", "2")
json.put("room_id", roomId)
text.text = json.toString()
MessageListenerSingleton.getInstance().sendCustomC2CMessage(
CustomMsgCode.CODE_TASK_APPRENTICE_JOIN_ROOM,
event?.fromUserInfo?.user_id.toString(),
text
)
}
}
}, true, downCount
).show()
}
fun inviteApprenticeTaskTimer() {
TimerManager.scheduleTimer(
CustomMsgCode.CODE_TASK_APPRENTICE_JOIN_ROOM_TIMER_ID,
20,
TimeUnit.SECONDS,
onTimeUp = {
customDialog(
"",
CustomMsgCode.CODE_TASK_APPRENTICE_JOIN_ROOM_MSG_REFUSE,
5,
3,
null,
"",
"知道了"
)
})
}
@@ -80,6 +211,7 @@ open class Application : CommonAppContext() {
}
override fun onNext(t: IndexRecommendRoom) {
LogUtils.e(t)
if (!t.room_id.isNullOrEmpty()) {
showInviteDialog(activity, t)
}
@@ -95,10 +227,16 @@ open class Application : CommonAppContext() {
}
fun showInviteDialog(activity: Activity?, t: IndexRecommendRoom) {
if (inviteDialog == null) {
inviteDialog = activity?.let { InviteDialog(it, t) }
}
if (activity != null && activity == currDialogActivity && inviteDialog != null) {
inviteDialog?.setData(t)
return
}
inviteDialog?.dismiss()
inviteDialog = null
inviteDialog = activity?.let { InviteDialog(it, t) }
inviteDialog?.setData(t)
currDialogActivity = activity
}
private fun initLogUtils() {

View File

@@ -42,6 +42,7 @@ import com.tencent.qcloud.tuikit.tuichat.bean.ChatInfo;
import com.xscm.modulemain.activity.WebViewActivity;
import com.xscm.modulemain.activity.main.activity.MainActivity;
import com.xscm.modulemain.activity.room.activity.RoomActivity;
import com.xscm.modulemain.activity.user.activity.DailyTasksActivity;
import com.xscm.modulemain.activity.user.activity.HeartCpActivity;
import com.xscm.modulemain.activity.user.activity.MyRoomActivity;
import com.xscm.modulemain.manager.RoomManager;
@@ -147,6 +148,8 @@ public abstract class BaseMvpActivity<P extends IPresenter, VDB extends ViewData
((MainActivity) mThis).isShowLoading(false);
} else if (mThis instanceof MyRoomActivity) {
((MyRoomActivity) mThis).isShowLoading(false);
} else if (mThis instanceof DailyTasksActivity) {
((DailyTasksActivity) mThis).isShowLoading(false);
}
});
@@ -1142,5 +1145,9 @@ public abstract class BaseMvpActivity<P extends IPresenter, VDB extends ViewData
startActivity(intent);
}
public void toActivity(Class<?> clazz) {
Intent intent = new Intent(this, clazz);
startActivity(intent);
}
}

View File

@@ -1,10 +1,7 @@
package com.xscm.modulemain
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class TransparentActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {

View File

@@ -17,6 +17,7 @@ import androidx.fragment.app.Fragment;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.hjq.toast.ToastUtils;
import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.engine.CropFileEngine;
@@ -139,6 +140,11 @@ public class ImproveInfoActivity extends BaseMvpActivity<ImproveInfoPresenter, A
// ToastUtils.showShort("请选择性别");
return;
}
if(birthdy==null||TextUtils.isEmpty(birthdy)){
ToastUtils.show("请选择生日");
return;
}
if (!inviteCode.isEmpty() || inviteCode != null) {
// map.put("user_no", inviteCode);
init_code = inviteCode;

View File

@@ -291,7 +291,8 @@ public class ReleaseActivity extends BaseMvpActivity<ReleasePresenter, ActivityR
TextView btnCancel = dialog.findViewById(R.id.btn_cancel);
TextView btnConfirm = dialog.findViewById(R.id.btn_confirm);
btnConfirm.setTextColor(Color.WHITE);
TextView tvTitle = dialog.findViewById(R.id.tv_title);
tvTitle.setText("选择话题");
assert recyclerView != null;
recyclerView.setLayoutManager(new LinearLayoutManager(this));
MultiSelectAdapter adapter = new MultiSelectAdapter(list);

View File

@@ -64,10 +64,12 @@ public class RedResultActivity extends BaseMvpActivity<RedEnvelopesPresenter, Fr
@Override
public void onRefresh(@NonNull @NotNull RefreshLayout refreshLayout) {
MvpPre.getRedpacketDetail(redpacketId);
}
@Override
public void onLoadMore(@NonNull @NotNull RefreshLayout refreshLayout) {
MvpPre.getRedpacketDetail(redpacketId);
}
});
}
@@ -83,6 +85,8 @@ public class RedResultActivity extends BaseMvpActivity<RedEnvelopesPresenter, Fr
if (isFinishing() || isDestroyed()) {
return;
}
mBinding.smartRefreshLayout.finishLoadMore();
mBinding.smartRefreshLayout.finishRefresh();
if (redpacketDetail != null) {
ImageUtils.loadHeadCC(redpacketDetail.getRedpacket_info().getAvatar(), mBinding.userAvatar);
mBinding.userName.setText(redpacketDetail.getRedpacket_info().getNickname());

View File

@@ -47,6 +47,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Autowired
import com.alibaba.android.arouter.facade.annotation.Route
@@ -69,6 +70,7 @@ import com.tencent.imsdk.v2.V2TIMUserFullInfo
import com.tencent.imsdk.v2.V2TIMValueCallback
import com.xscm.modulemain.BaseMvpActivity
import com.xscm.modulemain.R
import com.xscm.modulemain.TransparentActivity
import com.xscm.modulemain.activity.main.activity.MainActivity
import com.xscm.modulemain.activity.room.contacts.RoomContacts
import com.xscm.modulemain.activity.room.fragment.ChatRoomFragment
@@ -94,7 +96,6 @@ import com.xscm.modulemain.dialog.RoomMessageDialogFragment
import com.xscm.modulemain.dialog.RoomOnlineDialogFragment
import com.xscm.modulemain.dialog.RoomPkDialogFragment
import com.xscm.modulemain.dialog.RoomSettingFragment
import com.xscm.modulemain.dialog.RoomUserInfoFragment
import com.xscm.modulemain.dialog.SoundEffectsDialogFragment
import com.xscm.modulemain.dialog.TourClubDialogFragment
import com.xscm.modulemain.manager.RoomManager
@@ -170,7 +171,6 @@ import com.xscm.moduleutil.utils.roomview.GiftDisplayManager
import com.xscm.moduleutil.widget.CircularProgressView
import com.xscm.moduleutil.widget.CustomMusicFloatingView
import com.xscm.moduleutil.widget.QXGiftPlayerManager
import com.xscm.moduleutil.widget.RoomKtvWheatView
import com.xscm.moduleutil.widget.SilentCountDownTimer
import com.xscm.moduleutil.widget.ViewUtils
import com.xscm.moduleutil.widget.ViewUtils.OnViewCreatedListener
@@ -190,6 +190,7 @@ import java.lang.ref.WeakReference
import java.nio.charset.StandardCharsets
import java.util.Arrays
import java.util.Date
import java.util.concurrent.TimeUnit
import java.util.stream.Collectors
@Route(path = ARouteConstants.ROOM_DETAILS)
@@ -232,9 +233,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
private var circularProgress: CircularProgressView? = null
private var publicScreenFragment: ChatRoomFragment? = null // 添加成员变量
// 添加成员变量
private var isLayoutAdjusted = false
// 存储当前显示的弹框引用
private val activeDialogs: MutableList<DialogInterface> = ArrayList()
private val activeDialogFragments: MutableList<Fragment> = ArrayList()
@@ -243,6 +241,8 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
private var appStateListener: AppStateListener? = null
private var qxRedPacketManager: QXRedPacketManager? = null
//用户列表用
private var mOnlineBean: RoomOnline? = null
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_DOWN) {
@@ -515,15 +515,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
mBinding?.roomTop?.userRecyclerView?.adapter = likeUserAdapter
likeUserAdapter!!.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { adapter, view, position ->
val fragment = RoomOnlineDialogFragment.show(
showUserListDialog(
roomId, "", mRoomUserBean, mRoomInfoResp,
supportFragmentManager
)
LogUtils.e("fragment_onItemClickListener: ${(fragment != null)}")
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
}
mBinding!!.ivChat.setOnClickListener { view: View ->
@@ -903,6 +898,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
override fun onSelfInfoUpdated(info: V2TIMUserFullInfo?) {}
}
@SuppressLint("CheckResult")
private fun setView(resp: RoomInfoResp?, isSwitchRoomType: Boolean = false) {
if (resp == null)
return
@@ -1014,6 +1010,17 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
setupEffectView()
MvpPre?.roomRedPackets(roomId)
Observable.timer(1000, TimeUnit.MILLISECONDS).observeOn(
AndroidSchedulers.mainThread()
).subscribe { aLong: Long? ->
if (ActivityUtils.getTopActivity() is RoomActivity) {
startActivity(
Intent(ActivityUtils.getTopActivity(), TransparentActivity::class.java)
)
}
}
}
@@ -1925,11 +1932,13 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
roomFragment!!.upRoomInfoData(mRoomInfoResp)
roomFragment?.handleRoomMessage(messageEvent)
}
RoomType.SIGN_CONTRACT -> {
mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1] = RoomPitBean(pitNumber)
roomFragment!!.upRoomInfoData(mRoomInfoResp)
roomFragment?.handleRoomMessage(messageEvent)
}
else -> {
roomFragment!!.updateSeatViewExchangedWithPitArray(mRoomInfoResp)
}
@@ -2002,6 +2011,8 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
LogUtils.e("1020_mRoomBean", mRoomInfoResp?.room_info.toString())
EventBus.getDefault().post(mRoomInfoResp?.room_info)
changeBackgroundColor(mRoomInfoResp?.room_info?.room_background)
ImageUtils.loadHeadCC(mRoomInfoResp?.room_info?.room_cover, mBinding!!.roomTop.avatar)
mBinding?.roomTop?.name?.text = mRoomInfoResp?.room_info?.room_name
}
private fun handleMsgType1011(messageEvent: RoomMessageEvent, text: T?) {
@@ -2620,13 +2631,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} else if (id == R.id.btn_close_live) { //退出房间
showExitRoomDialog()
} else if (id == R.id.tv_num) {
val fragment = RoomOnlineDialogFragment.show(
showUserListDialog(
roomId, "", mRoomUserBean, mRoomInfoResp,
supportFragmentManager
)
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
} else if (id == R.id.rl) {
MvpPre!!.clearUserCharm(roomId, "")
} else if (id == R.id.ll_input) {
@@ -3814,84 +3822,12 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
LogUtils.e("RoomActivity", "onWindowFocusChanged")
if (hasFocus && !isLayoutAdjusted) {
// adjustLayoutHeights()
isLayoutAdjusted = true
}
}
var maxHeightDp: Int = 333
/**
* 动态调整布局高度以适配不同设备
*/
private fun adjustLayoutHeights() {
if (mBinding == null) return
try {
// 获取主容器
val mainContainer = mBinding!!.mainContentContainer
val pager: View = mBinding!!.vpRoomPager
val easeContainer: View = mBinding!!.easeContainer
if (mainContainer != null && pager != null && easeContainer != null) {
// 强制测量主容器
val widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
val heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
mainContainer.measure(widthSpec, heightSpec)
var containerHeight = mainContainer.measuredHeight
if (containerHeight <= 0) {
// 如果测量不到高度,使用布局参数中的高度
val containerParams =
mainContainer.layoutParams as ConstraintLayout.LayoutParams
containerHeight = (resources.displayMetrics.heightPixels
- statusBarHeight
- resources.getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_50) // room_top 高度
- resources.getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_15) * 3) // 底部控件高度
}
// 确保最小高度
if (containerHeight > 0) {
// 设置 vp_room_pager 占用 70% 空间
val pagerParams = pager.layoutParams as ConstraintLayout.LayoutParams
pagerParams.height = SystemUtils.getWidth(maxHeightDp)
pager.layoutParams = pagerParams
// 设置 ease_container 占用 30% 空间
val easeParams = easeContainer.layoutParams as ConstraintLayout.LayoutParams
easeParams.height = 0
easeContainer.layoutParams = easeParams
// 请求重新布局
mainContainer.requestLayout()
}
}
} catch (e: Exception) {
LogUtils.e("adjustLayoutHeights error: " + e.message)
}
}
private val statusBarHeight: Int
/**
* 获取状态栏高度
*/
get() {
var result = 0
val resourceId =
resources.getIdentifier("status_bar_height", "dimen", "android")
if (resourceId > 0) {
result = resources.getDimensionPixelSize(resourceId)
}
return result
}
// TODO: 根据返回的在线列表获取对应的值,查看是否有在线用户
override fun getRoomOnline(onlineBean: RoomOnline?) {
if (onlineBean != null) {
mOnlineBean = onlineBean
val onlineBeans: MutableList<RoomOnlineBean> = ArrayList()
if (onlineBean.on_pit.size > 0) {
onlineBeans.addAll(onlineBean.on_pit)
@@ -3908,6 +3844,25 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
}
fun showUserListDialog(
roomId: String?,
pitNumber: String?,
mRoomUserBean: RoomUserBean?,
mRoomInfoResp: RoomInfoResp?,
supportFragmentManager: FragmentManager
) {
val fragment = RoomOnlineDialogFragment.show(
roomId, pitNumber, mOnlineBean, mRoomUserBean, mRoomInfoResp,
supportFragmentManager
)
LogUtils.e("fragment_onItemClickListener: ${(fragment != null)}")
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
}
override fun applyPit() {
}
@@ -4090,6 +4045,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
"@@@",
"上一个房间的roonid" + AgoraManager.getInstance().lastRoomId
)
MessageListenerSingleton.getInstance().joinGroup(AgoraManager.getInstance().lastRoomId)
MvpPre?.getRoomIn(AgoraManager.getInstance().lastRoomId, "")
AgoraManager.getInstance().lastRoomId = ""
}

View File

@@ -226,11 +226,11 @@ public class SearchActivity extends BaseMvpActivity<SearchPresenter, ActivitySea
} else {
mBinding.recycleViewRoom.setVisibility(View.VISIBLE);
mBinding.rlRoom.setVisibility(View.VISIBLE);
if (data.getRooms().size() > 2) {
mSearchRoomResultAdapter.setNewData(data.getRooms().subList(0, 2));
} else {
// if (data.getRooms().size() > 2) {
// mSearchRoomResultAdapter.setNewData(data.getRooms().subList(0, 2));
// } else {
mSearchRoomResultAdapter.setNewData(data.getRooms());
}
// }
mBinding.tvRoomCount.setText("全部 " + data.getRooms().size());
}
if (data.getUsers() != null && data.getUsers().size() != 0) {

View File

@@ -5,6 +5,7 @@ import android.app.Activity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
import com.xscm.moduleutil.bean.ActivitiesPermission;
import com.xscm.moduleutil.bean.TasksSignStatus;
public final class VoiceContacts {
@@ -15,6 +16,8 @@ public final class VoiceContacts {
void hideRecommend(boolean hideRecommend,boolean hideGame);
void activitiesPermissionSuccess(ActivitiesPermission activitiesPermission);
void tasksSignStatus(TasksSignStatus tasksSignStatus);
}
public interface IIndexPre extends IPresenter {
@@ -25,6 +28,8 @@ public final class VoiceContacts {
void activitiesPermission();//活动弹框权限
void tasksSignStatus();
}
}

View File

@@ -82,6 +82,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
public void applyPit() {
}
public FriendshipRoomFragment() {
}
@@ -93,6 +94,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
FriendshipRoomFragment fragment = new FriendshipRoomFragment(roomInfoResp);
return fragment;
}
@Override
public void endFriend(FriendUserBean friendUserBean) {
if (friendUserBean != null) {
@@ -162,9 +164,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
}
@Override
protected FriendshipRoomPresenter bindPresenter() {
return new FriendshipRoomPresenter(this, getActivity());
@@ -364,7 +363,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
if (((RoomActivity) getActivity()).isFastDoubleClick(roomInfoResp.getUser_info().getUser_id() + "", pitBean.getPit_number())) {
return;
}
RoomOnlineDialogFragment.show(roomId, "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
((RoomActivity) getActivity()).showUserListDialog(roomId, "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
} else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
}
@@ -713,7 +712,9 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
tvHugMic.setOnClickListener(v -> {
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
popupWindow.dismiss();
});
}

View File

@@ -72,6 +72,7 @@ public class HotListFragment extends BaseMvpFragment<HotListPresenter, FragmentH
@Override
public void onResume() {
super.onResume();
page=1;
MvpPre.getRoomList(2, "1", "20", "1", label_id);
}
@@ -150,17 +151,17 @@ public class HotListFragment extends BaseMvpFragment<HotListPresenter, FragmentH
} else {
// 检查是否有重复数据
boolean hasDuplicate = false;
List<TopRoom> currentData = mAdapter.getData();
if (!currentData.isEmpty() && !data.isEmpty()) {
// 检查第一条数据是否已经存在
TopRoom firstNewData = data.get(0);
for (TopRoom item : currentData) {
if (item.getRoom_id().equals(firstNewData.getRoom_id())) {
hasDuplicate = true;
break;
}
}
}
// List<TopRoom> currentData = mAdapter.getData();
// if (!currentData.isEmpty() && !data.isEmpty()) {
// // 检查第一条数据是否已经存在
// TopRoom firstNewData = data.get(0);
// for (TopRoom item : currentData) {
// if (item.getRoom_id().equals(firstNewData.getRoom_id())) {
// hasDuplicate = true;
// break;
// }
// }
// }
if (!hasDuplicate) {
mAdapter.addData(data); // 加载更多时添加数据

View File

@@ -406,7 +406,9 @@ public class RoomAuctionFragment extends BaseMvpFragment<RoomAuctionPresenterTow
if (wheatView2.getUserId() != null) {
if (wheatView2.getUserId().equals("")) {
if ((wheatView.getUserId() != null && wheatView.getUserId().equals(SpUtil.getUserId() + "") || getHostUser() < 4)) {
RoomOnlineDialogFragment.show(roomInfoResp.getRoom_info().getRoom_id(), 888 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity)getActivity()).showUserListDialog(roomInfoResp.getRoom_info().getRoom_id(), 888 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
if (roomInfoResp.getRoom_auction() != null && roomInfoResp.getRoom_auction().getAuction_user() != null) {

View File

@@ -570,6 +570,7 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
Observable.timer(1000, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(
aLong -> {
if (ActivityUtils.getTopActivity() instanceof RoomActivity)
startActivity(new Intent(ActivityUtils.getTopActivity(), TransparentActivity.class));
}
);

View File

@@ -141,10 +141,12 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
roomPitBean = pitBean;
showPopupMenu(roomJukeboxWheatView); // v 是点击的按钮视图
} else if ((finalI + 1) == 10) {
if (ActivityUtils.getTopActivity() instanceof RoomActivity) {
if (getActivity() instanceof RoomActivity) {
if (((RoomActivity) ActivityUtils.getTopActivity()).getHostUser() < 4) {
if (!isFastDoubleClick("online_dialog", finalI + 1 + "")) {
RoomOnlineDialogFragment.show(roomId, finalI + 1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity)getActivity()).showUserListDialog(roomId, finalI + 1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
@@ -336,7 +338,9 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
tvHugMic.setOnClickListener(v -> {
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
popupWindow.dismiss();
});
}
@@ -757,8 +761,8 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
mBinding.wvZc.pitBean.setImageType(false);
mBinding.wvZc.setData(mBinding.wvZc.pitBean);
} else {
for (int i = 0; i < roomPitBeans.size(); i++) {
RoomPitBean roomPitBean = roomPitBeans.get(i);
if (roomPitBean.getUser_id().equals(userId)) {
roomPitBean.setImageType(true);
} else {
@@ -766,9 +770,6 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
}
viewList.get(i).setData(roomPitBean);
}
// adapter.notifyDataSetChanged();
}
} else {
mBinding.ciUserAva.setImageResource(0);

View File

@@ -432,8 +432,8 @@ public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoom
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), muJb.getUserId(), muJb.pitNumber, getHostUser(), false, 2, isNumberWhether(), getChildFragmentManager());
} else {
if (getActivity() != null && getActivity() instanceof RoomActivity) {
if (((RoomActivity) getActivity()).getHostUser() < 4) {
RoomOnlineDialogFragment.show(roomInfoResp.getRoom_info().getRoom_id(), "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && ((RoomActivity) getActivity()).getHostUser() < 4) {
((RoomActivity)getActivity()).showUserListDialog(roomInfoResp.getRoom_info().getRoom_id(), "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
} else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
}

View File

@@ -2,7 +2,6 @@ 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
@@ -12,6 +11,7 @@ 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.activity.RoomActivity
import com.xscm.modulemain.activity.room.contacts.MentorShipContacts
import com.xscm.modulemain.activity.room.presenter.MentorShipPresenter
import com.xscm.modulemain.databinding.FragmentMentorShipBinding
@@ -33,19 +33,19 @@ import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.bean.room.RoomUserBean
import com.xscm.moduleutil.dialog.ConfirmDialog
import com.xscm.moduleutil.utils.ClickUtils
import io.reactivex.disposables.Disposable
import kotlinx.coroutines.CoroutineScope
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
/**
* 签约房
* 1234 5 9
*/
class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
BaseMvpFragment<MentorShipPresenter, FragmentMentorShipBinding>(), MentorShipContacts.View,
View.OnClickListener {
@@ -65,7 +65,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
private var popupWindow: PopupWindow? = null
private var mPitBean: RoomPitBean? = null
private var mRoomId: String = mRoomInfo?.room_info?.room_id!!
private var mRoomId: String = mRoomInfoResp?.room_info?.room_id!!
private var mSignPitBean: RoomPitBean? = null
private var mSignId: String? = null
@@ -75,7 +75,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
private val startOrDelay = arrayOf("开始", "延时")
private var mUserInfo: RoomUserBean? = mRoomInfo?.user_info
private var mUserInfo: RoomUserBean? = mRoomInfoResp?.user_info
private var dialogMentorShip: DialogMentorShip? = null
@@ -83,6 +83,9 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
private var signTypeDialog: DialogSignType? = null
private var disposable: Disposable? = null
private val ivForMai = arrayOf(
com.xscm.moduleutil.R.mipmap.icon_apply_for_mai,
com.xscm.moduleutil.R.mipmap.icon_show_alent,
@@ -116,9 +119,9 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
mBinding.tvTimeLeft.visibility = View.GONE
for ((idx, view) in viewList.withIndex()) {
if (mRoomInfo?.room_info?.pit_list!!.size > indexList[idx].toInt() - 1) {
if (mRoomInfoResp?.room_info?.pit_list!!.size > indexList[idx].toInt() - 1) {
view.setRoomWheatNumber(indexList[idx])
val bean = mRoomInfo?.room_info?.pit_list!![indexList[idx].toInt() - 1]
val bean = mRoomInfoResp?.room_info?.pit_list!![indexList[idx].toInt() - 1]
if (idx == 0) {
view.setHostTv(mBinding.tvHostName)
} else if (idx == 1) {
@@ -139,7 +142,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
if (!view.getUserId().equals("") && !view.getUserId().equals("0")) {
RoomUserInfoFragment.show(
mRoomInfo?.room_info?.room_id,
mRoomInfoResp?.room_info?.room_id,
view.getUserId(),
view.pitNumber,
getHostUser(),
@@ -154,7 +157,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
} else {
when (indexList[idx]) {
"9" -> {
MvpPre.applyPit(mRoomInfo?.room_info?.room_id!!, "9")
MvpPre.applyPit(mRoomInfoResp?.room_info?.room_id!!, "9")
}
"2" -> {
@@ -163,14 +166,14 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
"1", "3", "4", "5" -> {
mPitBean =
mRoomInfo?.room_info?.pit_list!![indexList[idx].toInt() - 1]
mRoomInfoResp?.room_info?.pit_list!![indexList[idx].toInt() - 1]
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(
(activity as RoomActivity).showUserListDialog(
mRoomId,
mPitBean?.pit_number,
mRoomInfo?.user_info,
mRoomInfo,
mRoomInfoResp?.user_info,
mRoomInfoResp,
childFragmentManager
)
}
@@ -186,10 +189,10 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
mBinding.tvTimeRight.setOnClickListener(this)
mBinding.ivHelp.setOnClickListener(this)
if (mRoomInfo?.sign_info?.sign_id != "-1") {
mSignId = mRoomInfo?.sign_info?.sign_id
if (mRoomInfo?.sign_info?.sign_status == 1) {
startTimer(mRoomInfo?.sign_info?.end_time!!)
if (mRoomInfoResp?.sign_info?.sign_id != "-1") {
mSignId = mRoomInfoResp?.sign_info?.sign_id
if (mRoomInfoResp?.sign_info?.sign_status == 1) {
startTimer(mRoomInfoResp?.sign_info?.end_time!!)
if (mUserInfo?.user_id?.toString().equals(mSignPitBean?.user_id)) {
setIvForMai(1)
} else if (!mSignPitBean?.user_id.equals("0")) {
@@ -201,9 +204,9 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
setIvForMai(0)
}
mBinding.tvSignDay.visibility = View.VISIBLE
mBinding.tvLeftPrice.text = mRoomInfo?.sign_info?.current_body_value.toString()
mBinding.tvLeftPrice.text = mRoomInfoResp?.sign_info?.current_body_value.toString()
mBinding.tvSignDay.text = "签约${mRoomInfo?.sign_info?.sign_day}"
mBinding.tvSignDay.text = "签约${mRoomInfoResp?.sign_info?.sign_day}"
} else {
setIvForMai(0)
}
@@ -215,7 +218,8 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
R.id.iv_apply_for_mai -> {
when (mBinding.ivApplyForMai.tag) {
ivForMai[0] -> {
MvpPre!!.applyPit(mRoomInfo?.room_info?.room_id!!, "")
mBinding.ivApplyForMai.isClickable = false
MvpPre!!.applyPit(mRoomInfoResp?.room_info?.room_id!!, "")
}
ivForMai[1] -> {
@@ -265,19 +269,28 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
}
}
@SuppressLint("CheckResult")
private fun showBtn(isSignUser: Boolean = false) {
activity?.runOnUiThread {
if (isStart) {
mBinding.tvTimeLeft.text = startOrDelay[1]
mBinding.tvTime.visibility = View.VISIBLE
mBinding.groupLeftPrice.visibility = View.VISIBLE
if (getHostUser() < 4) {
mBinding.tvTimeRight.visibility = View.VISIBLE
} else {
mBinding.tvTimeRight.visibility = View.GONE
}
} else {
mBinding.tvTimeLeft.text = startOrDelay[0]
mBinding.tvTimeLeft.visibility = View.GONE
mBinding.tvTime.visibility = View.GONE
mBinding.tvTimeRight.visibility = View.GONE
mBinding.tvTime.visibility = View.GONE
mBinding.tvJsq.visibility = View.GONE
mBinding.tvTimeLeft.visibility = View.GONE
mBinding.groupLeftPrice.visibility = View.GONE
if (!isSignUser) {
mBinding.tvLeftPrice.text = "0"
@@ -287,10 +300,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
mBinding.tvTime.text = "倒计时 00:00:00"
setIvForMai(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"
)
@@ -302,15 +312,37 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
}
fun roomInfoUpdate(mRoomInfoResp: RoomInfoResp) {
mRoomInfo = mRoomInfoResp
mUserInfo = mRoomInfo?.user_info
LogUtils.e(
"showBtn ${Thread.currentThread()}",
"showBtn: isSignUser: $isSignUser " +
"\nisStart: $isStart " +
"\n viewList[0].pitBean.user_id: ${viewList[0].pitBean.user_id} " +
"\n mSignPitBean?.user_id: ${mSignPitBean?.user_id} " +
"\n mRoomInfo?.user_info?.user_id: ${mRoomInfoResp?.user_info?.user_id} " +
"\n mUserInfo?.user_id: ${mUserInfo?.user_id}" +
"\n mBinding.tvTimeRight: ${mBinding.tvTimeRight.visibility == View.VISIBLE}" +
"\n mBinding.tvTime: ${mBinding.tvTime.visibility == View.VISIBLE}" +
"\n mBinding.tvTimeLeft: ${mBinding.tvTimeLeft.visibility == View.VISIBLE}"
)
}
// 核心工具方法:检查 Fragment 是否和 Activity 有效绑定
private fun checkFragmentAttached(): Boolean {
// 依次检查Fragment 是否附加到 Activity、是否已销毁、是否处于正常状态
return isAdded && !isDetached && !requireActivity().isFinishing && !requireActivity().isDestroyed
}
fun roomInfoUpdate(roomInfoResp: RoomInfoResp) {
this.mRoomInfoResp = roomInfoResp
mUserInfo = this.mRoomInfoResp?.user_info
mRoomId = this.mRoomInfoResp?.room_info?.room_id!!
showBtn()
}
fun roomTypeSwitch(mRoomInfoResp: RoomInfoResp) {
mRoomInfo = mRoomInfoResp
mUserInfo = mRoomInfo?.user_info
fun roomTypeSwitch(roomInfoResp: RoomInfoResp) {
this.mRoomInfoResp = roomInfoResp
mUserInfo = this.mRoomInfoResp?.user_info
mRoomId = this.mRoomInfoResp?.room_info?.room_id!!
initView()
}
@@ -318,7 +350,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
val pitNumber = messageEvent.text.pit_number
if (indexList.contains(pitNumber)) {
val viewPos = indexList.indexOf(pitNumber)
val pitBean = mRoomInfo?.room_info?.pit_list!![pitNumber.toInt() - 1]
val pitBean = mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1]
viewList[viewPos].setData(pitBean)
if (pitNumber == "1") {
mSignPitBean = pitBean
@@ -331,7 +363,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
val pitNumber = messageEvent.text.pit_number
if (indexList.contains(pitNumber)) {
val viewPos = indexList.indexOf(pitNumber)
val pitBean = mRoomInfo?.room_info?.pit_list!![pitNumber.toInt() - 1]
val pitBean = mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1]
viewList[viewPos].setData(pitBean)
if (pitNumber == "1") {
mSignPitBean = pitBean
@@ -345,6 +377,8 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
* sign_id 场次id这个出价的时候要传回来
*/
fun event1090(messageEvent: RoomMessageEvent?) {
mBinding.ivApplyForMai.isClickable = true
mSignId = messageEvent?.text?.sign_id
val endTime = messageEvent?.text?.end_time
val signDay = messageEvent?.text?.sign_day
@@ -354,7 +388,6 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
signTypeDialog?.show(0)
mBinding.tvTimeLeft.text = startOrDelay[1]
mBinding.tvLeftPrice.text = currBodyValue
mBinding.tvSignDay.visibility = View.VISIBLE
@@ -385,17 +418,6 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
pitBean.charm = fromUserInfo.charm
viewList[indexList.indexOf("2")].setData(pitBean)
//当前麦上出价,需要更麦上数据
// for (i in 0 until viewList.size) {
// if(i == 1 || i == 2){
// continue
// }
// if (viewList[i].pitBean?.user_id != "0" && viewList[i].pitBean?.user_id == pitBean.user_id) {
// viewList[i].setData(mRoomInfo?.room_info?.pit_list!![indexList[i].toInt() - 1])
// }
// }
if (dialogMentorShip != null && dialogMentorShip?.isShowing!!) {
MvpPre!!.signCoinList(mSignId!!)
}
@@ -447,8 +469,6 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
override fun onItemClick(coin: String) {
dialogMentorShip?.setClickable(false)
MvpPre!!.signCoin(mSignId!!, coin)
}
})
@@ -470,6 +490,16 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
// 观察时间变化
scope.launch {
timer.timeLeft.collect { time ->
LogUtils.e("startTimer:" + time)
if (time / 1000 <= 10) {
mBinding.tvJsq.visibility = View.VISIBLE
mBinding.tvJsq.text = (time / 1000).toString()
if ((time / 1000).toInt() <= 0) {
mBinding.tvJsq.visibility = View.GONE
}
} else {
mBinding.tvJsq.visibility = View.GONE
}
val formattedTime = timer.formatTime(time)
// 更新UI显示
updateTimerDisplay(formattedTime)
@@ -488,6 +518,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
private fun updateTimerDisplay(time: String) {
// 在这里更新你的UI比如
mBinding.tvTime.text = "倒计时 ${time}"
LogUtils.e("updateTimerDisplay:" + mBinding.tvTime.text.toString() + "\n" + (mBinding.tvTime.visibility == View.VISIBLE))
}
// 延迟后重新开始计时
@@ -503,7 +534,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
val fromUserId = messageEvent.text.fromUserInfo.user_id
for (i in 0 until viewList.size) {
if (viewList[i].pitBean?.user_id == fromUserId.toString()) {
val pitBean = mRoomInfo?.room_info?.pit_list!![indexList[i].toInt() - 1]
val pitBean = mRoomInfoResp?.room_info?.pit_list!![indexList[i].toInt() - 1]
viewList[i].setData(pitBean)
break
}
@@ -515,7 +546,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
val toId = messageEvent.text.to_pit_number
if (indexList.contains(fromId)) {
val viewPos = indexList.indexOf(fromId)
val pitBean = mRoomInfo?.room_info?.pit_list!![fromId.toInt() - 1]
val pitBean = mRoomInfoResp?.room_info?.pit_list!![fromId.toInt() - 1]
viewList[viewPos].setData(pitBean)
if (fromId == "1") {
mSignPitBean = pitBean
@@ -524,7 +555,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
if (indexList.contains(toId)) {
val viewPos = indexList.indexOf(toId)
val pitBean = mRoomInfo?.room_info?.pit_list!![toId.toInt() - 1]
val pitBean = mRoomInfoResp?.room_info?.pit_list!![toId.toInt() - 1]
viewList[viewPos].setData(pitBean)
if (toId == "1") {
mSignPitBean = pitBean
@@ -619,8 +650,11 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
tvHugMic.setOnClickListener { v: View? ->
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(
mRoomId, mPitBean?.pit_number, mRoomInfo?.user_info, mRoomInfo,
(activity as RoomActivity).showUserListDialog(
mRoomId,
mPitBean?.pit_number,
mRoomInfoResp?.user_info,
mRoomInfoResp,
childFragmentManager
)
popupWindow!!.dismiss()
@@ -629,11 +663,11 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
private fun getHostUser(): Int {
return if (mRoomInfo?.user_info?.is_room_owner == 1) {
return if (mRoomInfoResp?.user_info?.is_room_owner == 1) {
1
} else if (mRoomInfo?.user_info?.is_management == 1) {
} else if (mRoomInfoResp?.user_info?.is_management == 1) {
2
} else if (mRoomInfo?.user_info?.is_host == 1) {
} else if (mRoomInfoResp?.user_info?.is_host == 1) {
3
} else {
4
@@ -641,7 +675,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
}
private fun isNumberWhether(): Int {
if (mRoomInfo?.user_info?.pit_number == 9) {
if (mRoomInfoResp?.user_info?.pit_number == 9) {
return 1
}
return 0
@@ -715,10 +749,10 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
"确认",
"拒绝",
{ v: View? ->
MvpPre.applyPit(mRoomInfo?.room_info?.room_id!!, "1")
MvpPre.applyPit(mRoomInfoResp?.room_info?.room_id!!, "1")
},
{ v: View? ->
MvpPre.signRefuse(mRoomInfo?.room_info?.room_id!!)
MvpPre.signRefuse(mRoomInfoResp?.room_info?.room_id!!)
}, true, 5
).show()
}

View File

@@ -184,9 +184,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
showPopupMenu(view); // v 是点击的按钮视图
} else if (pitNumber1 == 10) {
if (getActivity() != null && getActivity() instanceof RoomActivity){
if (((RoomActivity) getActivity()).getHostUser() < 4){
if (getActivity() != null && ((RoomActivity) getActivity()).getHostUser() < 4){
if (!isFastDoubleClick("online_dialog", pitNumber1 + "")) {
RoomOnlineDialogFragment.show(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
((RoomActivity)getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
@@ -338,7 +338,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
tvHugMic.setOnClickListener(v -> {
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if(getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
popupWindow.dismiss();
});
}
@@ -713,7 +715,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
} else if (pitNumber1 == 10) {
// 添加防重复点击检查
if (!isFastDoubleClick("online_dialog", pitNumber1 + "")) {
RoomOnlineDialogFragment.show(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
MvpPre.applyPit(roomId, pitNumber1 + "");
@@ -782,7 +786,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
} else if (pitNumber1 == 10) {
// 添加防重复点击检查
if (!isFastDoubleClick("online_dialog", pitNumber1 + "")) {
RoomOnlineDialogFragment.show(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
MvpPre.applyPit(roomId, pitNumber1 + "");

View File

@@ -145,6 +145,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
page = 1;
songList.clear();
MvpPre.singerSongList(roomId, type, page + "", "10");
}
});
@@ -154,6 +155,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
// 根据选择的时间筛选条件更新历史记录列表
// 可以在这里调用接口获取对应时间段的历史记录
page = 1;
songList.clear();
MvpPre.singerSongList(roomId, type, page + "", "10");
}
@@ -181,7 +183,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
@Override
public void singerSongList(SongPlaylist s) {
if (s != null &&s.getLists()!=null && s.getLists().size() > 0 ) {
if (s != null && !s.getLists().isEmpty()) {
// 判断当前是刷新还是加载更多
RefreshState state = mBinding.smartRefreshLayout.getState();
if (state == RefreshState.Refreshing) {
@@ -192,7 +194,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
mBinding.smartRefreshLayout.finishRefresh(true);
} else if (state == RefreshState.Loading) {
// 加载更多,添加数据到列表
if (s.getLists().size() > 0) {
if (!s.getLists().isEmpty()) {
// 只添加新加载的数据,而不是整个列表
songList.addAll(s.getLists());
adapter.addData(s.getLists());
@@ -210,6 +212,8 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
}
} else {
// songList.clear();
adapter.notifyDataSetChanged();
// 数据为空
if (mBinding.smartRefreshLayout.getState() == RefreshState.Refreshing) {
mBinding.smartRefreshLayout.finishRefresh(false);

View File

@@ -17,10 +17,12 @@ import com.xscm.modulemain.activity.room.activity.SearchActivity;
import com.xscm.modulemain.activity.room.contacts.VoiceContacts;
import com.xscm.modulemain.databinding.FragmentVoiceBinding;
import com.xscm.modulemain.activity.room.presenter.VoicePresenter;
import com.xscm.modulemain.dialog.SignInDialog;
import com.xscm.moduleutil.adapter.MyFragmentPagerAdapter;
import com.xscm.moduleutil.base.BaseMvpFragment;
import com.xscm.moduleutil.bean.ActivitiesPermission;
import com.xscm.moduleutil.bean.FirstChargeGiftBean;
import com.xscm.moduleutil.bean.TasksSignStatus;
import com.xscm.moduleutil.dialog.FirstChargeDialog;
import com.xscm.moduleutil.dialog.RechargeDialogFragment;
import com.xscm.modulemain.dialog.YouthModelDialog;
@@ -33,6 +35,8 @@ import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import kotlin.Unit;
import kotlin.jvm.functions.Function0;
public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoiceBinding> implements VoiceContacts.View {
@@ -98,7 +102,7 @@ public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoice
// 记录已经显示过青少年模式弹窗
SpUtil.setBooleanValue("youth_model_shown", true);
dialog.dismiss();
MvpPre.activitiesPermission();
MvpPre.tasksSignStatus();
// 在这里可以继续显示其他弹窗,如首充弹窗
}
@@ -177,6 +181,23 @@ public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoice
}
}
@Override
public void tasksSignStatus(TasksSignStatus tasksSignStatus) {
if (tasksSignStatus.getStatus()==1){
MvpPre.activitiesPermission();
}else {
SignInDialog signInDialog = new SignInDialog(getContext());
signInDialog.setOnCloseListener(new Function0<Unit>() {
@Override
public Unit invoke() {
MvpPre.activitiesPermission();
return null;
}
});
signInDialog.show();
}
}
private void setDialog(){
if(ActivityUtils.getTopActivity() instanceof MainActivity){
((MainActivity)ActivityUtils.getTopActivity()).dialogUp();

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import com.xscm.modulemain.activity.room.contacts.VoiceContacts;
import com.xscm.moduleutil.bean.ActivitiesPermission;
import com.xscm.moduleutil.bean.TasksSignStatus;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.presenter.BasePresenter;
@@ -134,4 +135,22 @@ public class VoicePresenter extends BasePresenter<VoiceContacts.View> implements
}
});
}
@Override
public void tasksSignStatus() {
api.tasksSignStatus(new BaseObserver<TasksSignStatus>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(TasksSignStatus tasksSignStatus) {
if (MvpRef==null)
MvpRef=new WeakReference<>(mView);
MvpRef.get().tasksSignStatus(tasksSignStatus);
}
});
}
}

View File

@@ -1,14 +1,20 @@
package com.xscm.modulemain.activity.user.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.view.View;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.LogUtils;
import com.xscm.modulemain.Application;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.room.activity.RoomActivity;
import com.xscm.modulemain.adapter.TaskBoxAdapter;
import com.xscm.modulemain.adapter.TaskDataAdapter;
import com.xscm.modulemain.adapter.TaskSectionAdapter;
@@ -18,13 +24,20 @@ import com.xscm.modulemain.activity.user.conacts.DailyTasksConacts;
import com.xscm.modulemain.activity.user.presenter.DailyTasksPresenter;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulemain.activity.WebViewActivity;
import com.xscm.modulemain.dialog.SignInDialog;
import com.xscm.modulemain.manager.RoomManager;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.RoomMessageEvent;
import com.xscm.moduleutil.utils.CustomMsgCode;
import com.xscm.moduleutil.base.WebUrlConstants;
import com.xscm.moduleutil.bean.GiftBoxBean;
import com.xscm.moduleutil.bean.GiftName;
import com.xscm.moduleutil.bean.TaskItem;
import com.xscm.moduleutil.listener.MessageListenerSingleton;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.SpUtil;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
@@ -32,6 +45,8 @@ import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import kotlin.Unit;
import kotlin.jvm.functions.Function0;
/**
* @author qx
@@ -46,6 +61,10 @@ public class DailyTasksActivity extends BaseMvpActivity<DailyTasksPresenter, Act
private TaskDataAdapter taskDataAdapter;
private List<GiftBoxBean.TaskDataBean> taskList = new ArrayList<>();
private boolean isJoinRoom = false;
@Override
protected DailyTasksPresenter bindPresenter() {
return new DailyTasksPresenter(this, this);
@@ -78,6 +97,31 @@ public class DailyTasksActivity extends BaseMvpActivity<DailyTasksPresenter, Act
mBinding.rvTask.setLayoutManager(new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false));
mBinding.rvTask.setAdapter(mTaskBoxAdapter);
mBinding.rvTaskToday.setLayoutManager(new GridLayoutManager(this, 1));
mTaskDataAdapter = new TaskSectionAdapter(taskList);
mBinding.rvTaskToday.setAdapter(mTaskDataAdapter);
mTaskDataAdapter.setOnItemClickListener(new TaskSectionAdapter.OnItemClickListener() {
@Override
public void onItemClick(GiftBoxBean.TaskDataBean taskItem, GiftBoxBean.TaskDataBean.DailyTasksBean item) {
LogUtils.e("taskStatus:" + item.toString() + "\n taskItem:" + taskItem.toString());
switch (item.getTask_status()) {
case 1://未开始
taskStatus1(item);
break;
case 2://待领取
MvpPre.dailyTasksReceive(item.getTask_id() + "", item.getStudent_id());
break;
case 3://已完成
if (item.getTask_id() == 1) {
SignInDialog sginDialog = new SignInDialog(DailyTasksActivity.this);
sginDialog.show();
}
break;
}
}
});
mBinding.imGz.setOnClickListener(v -> {
Intent intent = new Intent(this, WebViewActivity.class);
@@ -93,6 +137,16 @@ public class DailyTasksActivity extends BaseMvpActivity<DailyTasksPresenter, Act
}
public void isShowLoading(boolean b) {
if (b) {
mBinding.coolWaitView.setVisibility(View.VISIBLE);
} else {
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE);
});
}
}
@Override
protected int getLayoutId() {
return R.layout.activity_daily_tasks;
@@ -103,58 +157,73 @@ public class DailyTasksActivity extends BaseMvpActivity<DailyTasksPresenter, Act
mBinding.tvTitle.setText("今日累计充值获得金币:" + (giftBoxBean.getUser_gold() != null ? giftBoxBean.getUser_gold() : "0"));
mTaskBoxAdapter.setNewData(giftBoxBean.getGift_box_list());
mBinding.rvTaskToday.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
taskList.clear();
List<TaskItem> sections = new ArrayList<>();
// 每日任务
sections.add(new TaskItem("今日任务", giftBoxBean.getTasks().getDaily_tasks()));
// 特殊任务
sections.add(new TaskItem("特殊任务", giftBoxBean.getTasks().getDaily_tasks_special()));//
// 师徒任务
if (giftBoxBean.getTasks().getTeacher_tasks() != null && giftBoxBean.getTasks().getTeacher_tasks().size() > 0) {
sections.add(new TaskItem("师徒任务", giftBoxBean.getTasks().getTeacher_tasks()));
giftBoxBean.getTasks().stream()
.filter(task -> !task.getTask_list().isEmpty())
.forEach(taskList::add);
mTaskDataAdapter.notifyDataSetChanged();
}
// 平台任务
sections.add(new TaskItem("平台任务", giftBoxBean.getTasks().getUsual_tasks()));
mTaskDataAdapter = new TaskSectionAdapter(sections);
mBinding.rvTaskToday.setAdapter(mTaskDataAdapter);
mTaskDataAdapter.setOnItemClickListener(new TaskSectionAdapter.OnItemClickListener() {
private void taskStatus1(GiftBoxBean.TaskDataBean.DailyTasksBean item) {
switch (item.getTask_id()) {
case 1:
SignInDialog sginDialog = new SignInDialog(this);
sginDialog.setOnCloseListener(new Function0<Unit>() {
@Override
public void onItemClick(TaskItem taskItem, GiftBoxBean.TaskDataBean.DailyTasksBean item) {
if (taskItem.getTitle().equals("今日任务") || taskItem.getTitle().equals("平台任务") || taskItem.getTitle().equals("师徒任务")) {
if (item.getTask_status() == 2) {
MvpPre.dailyTasksReceive(item.getTask_id() + "");
}
} else {
if (item.getTask_status() == 2) {
MvpPre.dailyTasksReceive(item.getTask_id() + "");
} else if (item.getTask_status() == 1) {
mBinding.coolWaitView.setVisibility(View.VISIBLE);
// if (item.getTask_id() == 9) {
RoomManager.getInstance().fetchRoomDataAndEnter(DailyTasksActivity.this, item.getFrom_id(), "", item.getTask_id() + "");
finish();
// ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS).withString("roomId", item.getFrom_id()).withString("taskId", item.getTask_id() + "").navigation();
// } else {
// RoomManager.getInstance().fetchRoomDataAndEnter(DailyTasksActivity.this, item.getFrom_id(), "", item.getTask_id() + "");
// ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS).withString("roomId", item.getFrom_id()).withString("taskId", item.getTask_id() + "").navigation();
// }
}
}
public Unit invoke() {
MvpPre.tasksLihen();
return null;
}
});
sginDialog.show();
break;
default:
switch (item.getJump_type()) {
case 1:
toActivity(RealNameActivity.class);
break;
case 2:
toActivity(CreateAlbumActivity.class);
break;
case 3:
toActivity(BindCardActivity.class);
break;
case 4:
mBinding.coolWaitView.setVisibility(View.VISIBLE);
MvpPre.taskJumpRoom(item, item.getTask_id() + "");
break;
case 5:
//跳转加入公会
Intent intent = new Intent(DailyTasksActivity.this, WebViewActivity.class);
intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_GUILD_URL(), SpUtil.getToken(), ""));
intent.putExtra("title", "公会");
startActivity(intent);
break;
case 6:
toActivity(RechargeActivity.class);
break;
case 0:
break;
}
break;
}
}
@SuppressLint("CheckResult")
@Override
protected void onPause() {
super.onPause();
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE);
});
if (!isFinishing() && isJoinRoom) {
finish();
}
});
}
@Override
public void dailyTasksOpenBox(GiftName giftName) {
@@ -167,4 +236,52 @@ public class DailyTasksActivity extends BaseMvpActivity<DailyTasksPresenter, Act
ToastUtils.show("任务完成");
MvpPre.tasksLihen();
}
@Override
public void taskJumpRoom(GiftBoxBean.TaskDataBean.DailyTasksBean item, String roomId) {
if (TextUtils.isEmpty(roomId) || roomId.equals("0")) {
ToastUtils.show("暂无此类型房间。");
mBinding.coolWaitView.setVisibility(View.GONE);
return;
}
switch (item.getTask_id()) {
case 21:
case 22:
case 23:
RoomMessageEvent.T text = new RoomMessageEvent.T();
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("status", "1");
jsonObject.put("room_id", roomId);
text.setText(jsonObject.toString());
MessageListenerSingleton.getInstance().sendCustomC2CMessage(
CustomMsgCode.INSTANCE.getCODE_TASK_APPRENTICE_JOIN_ROOM(),
item.getStudent_id(), text);
Application.Companion.getInstance().inviteApprenticeTaskTimer();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
try {
if (ActivityUtils.getActivityList().size() > 1) {
if (ActivityUtils.getActivityList().get(ActivityUtils.getActivityList().size() - 2) instanceof RoomActivity) {
if (!TextUtils.isEmpty(CommonAppContext.getInstance().playId) && CommonAppContext.getInstance().playId.equals(roomId)) {
finish();
return;
}
((RoomActivity) ActivityUtils.getActivityList().get(ActivityUtils.getActivityList().size() - 2)).refreshRoomInfo(roomId);
finish();
return;
}
}
RoomManager.getInstance().fetchRoomDataAndEnter(DailyTasksActivity.this, roomId, "", null);
isJoinRoom = true;
} catch (Exception e) {
e.printStackTrace();
LogUtils.e("taskJumpRoom error: " + e.getMessage());
}
}
}

View File

@@ -37,7 +37,7 @@ public class GiftBoxRecordActivity extends BaseMvpActivity<GiftBoxRecordPresente
@Override
protected void initData() {
MvpPre.dailyTasksBoxRecord();
mBinding.topBar.setTitle("每日任务");
mBinding.topBar.setTitle("礼盒记录");
}

View File

@@ -1,5 +1,6 @@
package com.xscm.modulemain.activity.user.activity
import android.annotation.SuppressLint
import android.os.Bundle
import com.alibaba.android.arouter.launcher.ARouter
import com.scwang.smartrefresh.layout.api.RefreshLayout
@@ -85,7 +86,7 @@ class HeartCpActivity : BaseMvpActivity<HeartCpPresenter, ActivityHeartCpBinding
adapter?.setOnItemClickListener { adapter, view, position ->
ARouter.getInstance().build(ARouteConstants.USER_HOME_PAGE)
.withString("userId", mHeartData?.gift_log!![position].from_user_id.toString())
.withString("userId", dataList?.get(position)?.from_user_id.toString())
.navigation();
finish()
}
@@ -112,13 +113,13 @@ class HeartCpActivity : BaseMvpActivity<HeartCpPresenter, ActivityHeartCpBinding
}
@SuppressLint("NotifyDataSetChanged")
override fun getHeartCpData(heartCpBean: HeartCpBean?) {
mBinding.smartRefreshLayout.finishRefresh()
mBinding.smartRefreshLayout.finishLoadMore()
if (heartCpBean == null) {
return
}
mHeartData = heartCpBean
if (userId == heartCpBean.user_id1) {
ImageUtils.loadHeadCC(heartCpBean.user_info1.avatar, mBinding.ivHeadLeft)
@@ -142,15 +143,14 @@ class HeartCpActivity : BaseMvpActivity<HeartCpPresenter, ActivityHeartCpBinding
}
if (page == 1) {
adapter?.setNewData(heartCpBean.gift_log)
}else{
adapter?.addData(heartCpBean.gift_log)
dataList?.clear()
}
val day = TimeUtils.formatDurationDaysOnly(
heartCpBean.createtime * 1000 - System.currentTimeMillis()
dataList?.addAll(heartCpBean.gift_log)
adapter?.notifyDataSetChanged()
val day = TimeUtils.calculateDays(
System.currentTimeMillis(), heartCpBean.createtime * 1000
)
mBinding.tvHeartTime.text = "我们在一起${day}"
mBinding.tvHeartTime.text = "我们在一起${day}"
}
}

View File

@@ -271,7 +271,9 @@ public class MyRoomActivity extends BaseMvpActivity<MyRoomPresenter, RoomActivit
return;
}
MvpPre.check_create_room();
// MvpPre.check_create_room();
startActivity(new Intent(MyRoomActivity.this, CreatedRoomActivity.class));
finish();
}
});
}

View File

@@ -112,7 +112,7 @@ public class NoblePaymentActivity extends BaseMvpActivity<NobleTitlePresenter, A
return;
}
if (selectedItem.getType() == null) {
if (selectedItem==null || selectedItem.getType() == null) {
ToastUtils.show("请选择支付方式");
return;
}

View File

@@ -99,7 +99,8 @@ public class RechargeActivity extends BaseMvpActivity<RechargePresenter, Activit
ViewGroup.LayoutParams layoutParams = mBinding.recyclerView.getLayoutParams();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; // 使用你定义的getWidth方法
layoutParams.height = SystemUtils.getWidth(372); // 示例高度
// layoutParams.height = SystemUtils.getWidth(372); // 示例高度
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; // 示例高度
mBinding.recyclerView.setLayoutParams(layoutParams);
}

View File

@@ -124,41 +124,6 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
mBinding.progressArc.setProgress(0);
mBinding.progressArc.setMax(100); // 设置最大值
mBinding.progressArc.setIndeterminate(false);
// 设置长按录音逻辑
// mBinding.recordButton.setOnTouchListener(new View.OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// switch (event.getAction()) {
// case MotionEvent.ACTION_DOWN:
// if (!isRecording && !isPlaying) {
// // 长按时改变按钮图案为类似试听后的图案
// mBinding.recordButton.setImageResource(R.mipmap.but_tz);
//
// // 如果之前已经录制过内容,则继续录制
// if (hasRecordedBefore && recordingFile != null && recordingFile.exists()) {
// isAppendRecording = true;
// startRecording();
// } else {
// // 首次录音或重录后
// isAppendRecording = false;
// startRecording();
// }
// }
// return true;
// case MotionEvent.ACTION_UP:
// if (isRecording) {
// stopRecording();
// // 手指离开后恢复默认图案
// mBinding.recordButton.setImageResource(R.mipmap.but_ly);
// }
// return true;
// default:
// return false;
// }
// }
// });
mBinding.recordButton.setOnTouchListener(new View.OnTouchListener() {
private Runnable longPressRunnable;
@@ -243,10 +208,10 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
mBinding.playButton.setCompoundDrawablesWithIntrinsicBounds(0, R.mipmap.but_st, 0, 0);
} else {
// 检查录音文件是否存在
if (recordingFile == null || !recordingFile.exists()) {
Toast.makeText(SingerVerificationActivity.this, "没有录制的文件", Toast.LENGTH_SHORT).show();
return;
}
// if (recordingFile == null || !recordingFile.exists()) {
// Toast.makeText(SingerVerificationActivity.this, "没有录制的文件", Toast.LENGTH_SHORT).show();
// return;
// }
// 检查录音时长
if (recordingDuration <= 0) {
@@ -353,10 +318,9 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
mediaRecorder.prepare();
mediaRecorder.start();
// 如果是第一次录音,初始化录音文件
if (!isAppendRecording) {
recordingFile = segmentFile;
}
// 修复不再根据是否追加录音来设置recordingFile
// recordingFile将在停止录音时通过mergeAudioFiles()方法设置
// 这样可以确保每次录音都能正确合并
} catch (IOException e) {
LogUtils.e("SingerVerification", "录音失败: " + e.getMessage());
// 从列表中移除失败的文件
@@ -443,15 +407,27 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
timer = null;
}
// 计算当前录音片段的时长
long currentSegmentDuration = System.currentTimeMillis() - recordingStartTime;
// 检查当前录音片段是否太短小于1秒
if (currentSegmentDuration < 1000 && recordingSegments.size() > 1) {
// 如果当前录音片段太短且不是第一个片段,则移除它
File lastSegment = recordingSegments.get(recordingSegments.size() - 1);
if (lastSegment.exists()) {
lastSegment.delete();
}
recordingSegments.remove(recordingSegments.size() - 1);
LogUtils.d("SingerVerification", "移除过短的录音片段: " + lastSegment.getAbsolutePath());
}
// 处理录音片段
if (recordingSegments.size() > 1) {
// 如果有多个录音片段,合并它们
// 修复:每次停止录音时都合并所有片段,确保录音连续性
if (recordingSegments.size() >= 1) {
// 始终合并所有录音片段,确保连续性
mergeAudioFiles();
// 更新录音时长为所有片段的总时长
updateRecordingDuration();
} else if (recordingSegments.size() == 1) {
// 只有一个录音片段,直接使用
recordingFile = recordingSegments.get(0);
}
// 更新状态
@@ -749,11 +725,9 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
handleMergeError(e);
} finally {
cleanupResources(muxer, buffer);
// 修复:延迟删除原始音频片段,确保合并文件已经完全写入且被使用
// 延迟删除,给用户足够时间试听
new Handler().postDelayed(() -> {
cleanupSegments(processedSegments);
}, 30000); // 延迟30秒删除确保用户有足够时间试听
// 修复:不删除录音片段,以便后续继续追加录音
// 只在用户点击"重新录音"时才删除所有片段
// cleanupSegments(processedSegments);
}
}

View File

@@ -80,7 +80,7 @@ class TotalRevenueActivity : BaseMvpActivity<UserFamilyPresenter, ActivityTotalR
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(object :
OnRefreshLoadMoreListener {
override fun onRefresh(refreshLayout: RefreshLayout) {
page++
page = 1 // 重置页码
MvpPre?.familyEarnings(
userId.toString(),
page,
@@ -90,7 +90,9 @@ class TotalRevenueActivity : BaseMvpActivity<UserFamilyPresenter, ActivityTotalR
}
override fun onLoadMore(refreshLayout: RefreshLayout) {
page = 1 // 重置页码
page++
MvpPre?.familyEarnings(
userId.toString(),
page,
@@ -133,7 +135,6 @@ class TotalRevenueActivity : BaseMvpActivity<UserFamilyPresenter, ActivityTotalR
// 显示没有更多数据的提示
// 设置一个特殊的空视图,表示没有更多数据
// 重要page--,因为这次加载没有新数据
page--
}
// 非第一页有数据
else -> {

View File

@@ -127,7 +127,7 @@ public class UnderageActivity extends BaseMvpActivity<UnderagePresenter, Activit
// 密码正确,关闭页面
// ToastUtils.showShort("密码验证成功");
ARouter.getInstance().build(ARouteConstants.ME).navigation();
// ARouter.getInstance().build(ARouteConstants.ME).navigation();
ActivityUtils.finishActivity(WebViewActivity.class);
finish();
} else {

View File

@@ -1,5 +1,7 @@
package com.xscm.modulemain.activity.user.activity;
import static android.view.View.GONE;
import android.graphics.Color;
import android.view.View;
@@ -30,7 +32,7 @@ public class UserPlaylistActivity extends BaseMvpActivity<SingerVerificationPres
private int page = 0;
private UserPlaylistAdapter mAdapter;
private List<SongPlaylist.SongPlaylistBean> mSongPlaylistBean;
private List<SongPlaylist.SongPlaylistBean> mSongPlaylistBean = new ArrayList<>();
@Override
protected void initView() {
@@ -60,7 +62,7 @@ public class UserPlaylistActivity extends BaseMvpActivity<SingerVerificationPres
mBinding.recycleView.setLayoutManager(new LinearLayoutManager(this));
// 初始化适配器
mAdapter = new UserPlaylistAdapter(this, new ArrayList<>());
mAdapter = new UserPlaylistAdapter(this, mSongPlaylistBean);
mBinding.recycleView.setAdapter(mAdapter);
// 设置滑动操作
// ItemTouchHelper itemTouchHelper = UserPlaylistAdapter.getItemTouchHelper(mAdapter);
@@ -146,31 +148,24 @@ public class UserPlaylistActivity extends BaseMvpActivity<SingerVerificationPres
@Override
public void getSong(SongPlaylist s) {
if (mAdapter != null) {
if (s != null) {
if (!s.getLists().isEmpty()) {
if (page == 1) {
// 第一页,直接设置数据
if (s == null || s.getLists() == null || s.getLists().size() == 0) {
return;
}
mSongPlaylistBean = s.getLists();
mAdapter.setNewData(s.getLists());
} else {
if (s == null || s.getLists() == null || s.getLists().size() == 0) {
return;
mSongPlaylistBean.clear();
}
mSongPlaylistBean.addAll(s.getLists());
// 更多页面,添加数据
mAdapter.addData(s.getLists());
}
mAdapter.notifyDataSetChanged();
// 更新歌单数量
mBinding.tvNum.setText("" + s.getCount() + "首歌");
}else {
if (page == 1) {
mSongPlaylistBean.clear();
}
mAdapter.notifyDataSetChanged();
if(mSongPlaylistBean.size()==0){
mBinding.tvNum.setText("" + mSongPlaylistBean.size() + "首歌");
}
}
// 结束刷新或加载更多
if (mBinding.smartRefreshLayout != null) {
mBinding.smartRefreshLayout.finishRefresh();
mBinding.smartRefreshLayout.finishLoadMore();
}
}

View File

@@ -15,6 +15,8 @@ public class DailyTasksConacts {
void dailyTasksOpenBox(GiftName giftName);
void dailyTasksComplete();
void taskJumpRoom(GiftBoxBean.TaskDataBean.DailyTasksBean item,String taskId);
}
public interface IMePre extends IPresenter {
@@ -23,7 +25,9 @@ public class DailyTasksConacts {
void dailyTasksOpenBox(String gift_box_id);
void dailyTasksReceive(String task_id);
void dailyTasksReceive(String task_id,String student_id);
void taskJumpRoom(GiftBoxBean.TaskDataBean.DailyTasksBean item,String roomId);
}
}

View File

@@ -182,7 +182,7 @@ public class UserHomepageFragment extends BaseMvpFragment<UserHomepagePresenter,
if (!userInfo.getIcon().isEmpty()) {
mBinding.headerInfo.flexEntry.setVisibility(VISIBLE);
for (String url : userInfo.getIcon()) {
if (url.contains("http")) {
if (url != null && url.contains("http")) {
ImageView imageView1 = new ImageView(Application.getInstance());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,

View File

@@ -357,7 +357,7 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
if (images != null && !images.isEmpty()) {
for (String url : images) {
if (url.contains("http")) {
if (url!=null && url.contains("http")) {
ImageView imageView = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_57),

View File

@@ -6,19 +6,25 @@ import com.xscm.modulemain.activity.user.conacts.DailyTasksConacts;
import com.xscm.moduleutil.bean.GiftBoxBean;
import com.xscm.moduleutil.bean.GiftName;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.presenter.BasePresenter;
import java.lang.ref.WeakReference;
import io.reactivex.disposables.Disposable;
public class DailyTasksPresenter extends BasePresenter<DailyTasksConacts.View> implements DailyTasksConacts.IMePre{
DailyTasksConacts.View mView;
public DailyTasksPresenter(DailyTasksConacts.View view, Context context) {
super(view, context);
mView = view;
}
//获取礼盒列表
@Override
public void tasksLihen() {
api.tasksLihen(new BaseObserver<GiftBoxBean>() {
RetrofitClient.getInstance().tasksLihen(new BaseObserver<GiftBoxBean>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
@@ -26,6 +32,9 @@ public class DailyTasksPresenter extends BasePresenter<DailyTasksConacts.View> i
@Override
public void onNext(GiftBoxBean giftBoxBean) {
if (MvpRef == null){
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().setGiftBox(giftBoxBean);
}
});
@@ -33,7 +42,7 @@ public class DailyTasksPresenter extends BasePresenter<DailyTasksConacts.View> i
@Override
public void dailyTasksOpenBox(String gift_box_id) {
api.dailyTasksOpenBox(gift_box_id, new BaseObserver<GiftName>() {
RetrofitClient.getInstance().dailyTasksOpenBox(gift_box_id, new BaseObserver<GiftName>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
@@ -41,14 +50,17 @@ public class DailyTasksPresenter extends BasePresenter<DailyTasksConacts.View> i
@Override
public void onNext(GiftName giftName) {
if (MvpRef == null){
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().dailyTasksOpenBox(giftName);
}
});
}
@Override
public void dailyTasksReceive(String task_id) {
api.dailyTasksReceive(task_id, new BaseObserver<String>() {
public void dailyTasksReceive(String task_id,String student_id) {
RetrofitClient.getInstance().dailyTasksReceive(task_id,student_id, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
@@ -57,11 +69,33 @@ public class DailyTasksPresenter extends BasePresenter<DailyTasksConacts.View> i
@Override
public void onNext(String s) {
if (MvpRef == null){
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().dailyTasksComplete();
}
});
}
@Override
public void taskJumpRoom(GiftBoxBean.TaskDataBean.DailyTasksBean item,String taskId) {
RetrofitClient.getInstance().taskJumpRoomId(taskId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
if (MvpRef == null){
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().taskJumpRoom(item,s);
}
});
}
}

View File

@@ -55,6 +55,7 @@ public class MyBagPresenter extends BasePresenter<MyBagConacts.View> implements
MvpRef=new WeakReference<>(mView);
}
MvpRef.get().packOutcome(myBagDataBeans);
MvpRef.get().finishRefreshLoadMore();
}
});
}

View File

@@ -78,19 +78,49 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
holder.setText(R.id.tv_heartbeat, noCpBean.relation_name)
// 显示关系名称
holder.setText(R.id.tv_cp_lv, noCpBean.relation_name)
// holder.setText(R.id.tv_cp_lv, noCpBean.relation_name)
var meHeadView: MeHeadView
var meHeadView2: MeHeadView
meHeadView = holder.getView(R.id.user_nav1)
meHeadView2 = holder.getView(R.id.user_nav2)
if (noCpBean.relation_list[0].user_id1 == userId.toInt()){
meHeadView.setSex(noCpBean.relation_list[0].sex1,noCpBean.relation_list[0].avatar1,noCpBean.relation_list[0].dress1)
holder.setText(R.id.tv_nickname1, noCpBean.relation_list[0].nickname1)
holder.setText(R.id.tv_nickname2, noCpBean.relation_list[0].nickname2)
meHeadView2.setSex(noCpBean.relation_list[0].sex2,noCpBean.relation_list[0].avatar2,noCpBean.relation_list[0].dress2)
}else{
meHeadView.setSex(noCpBean.relation_list[0].sex2,noCpBean.relation_list[0].avatar2,noCpBean.relation_list[0].dress2)
holder.setText(R.id.tv_nickname1, noCpBean.relation_list[0].nickname2)
holder.setText(R.id.tv_nickname2, noCpBean.relation_list[0].nickname1)
meHeadView2.setSex(noCpBean.relation_list[0].sex1,noCpBean.relation_list[0].avatar1,noCpBean.relation_list[0].dress1)
}
// 设置点击事件
holder.getView<View>(R.id.user_nav1).setOnClickListener {
if(noCpBean.relation_list[0].user_id1 == userId.toInt()){
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id1.toString())
}else{
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id2.toString())
}
// 点击第一个用户头像
}
holder.getView<View>(R.id.user_nav2).setOnClickListener {
// 点击第二个用户头像
// onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id2.toString())
if(noCpBean.relation_list[0].user_id2 == userId.toInt()){
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id2.toString())
}else{
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id1.toString())
}
}
// 显示relation_list内容
// ImageUtils.loadHead(noCpBean.relation_list[0].avatar1, holder.getView(R.id.user_nav1))
holder.setText(R.id.tv_nickname1, noCpBean.relation_list[0].nickname1)
// ImageUtils.loadHead(noCpBean.relation_list[0].avatar2, holder.getView(R.id.user_nav2))
holder.setText(R.id.tv_nickname2, noCpBean.relation_list[0].nickname2)
if (noCpBean.relation_list[0].user_id1== SpUtil.getUserId()||noCpBean.relation_list[0].user_id2== SpUtil.getUserId()) {
holder.setVisible(R.id.icon_cp_zd, true)
holder.setVisible(R.id.icon_cp_dele, true)
@@ -98,16 +128,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
holder.setVisible(R.id.icon_cp_zd, false)
holder.setVisible(R.id.icon_cp_dele, false)
}
// 设置点击事件
holder.getView<View>(R.id.user_nav1).setOnClickListener {
// 点击第一个用户头像
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id1.toString())
}
holder.getView<View>(R.id.user_nav2).setOnClickListener {
// 点击第二个用户头像
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id2.toString())
}
// 设置删除按钮点击事件
holder.getView<View>(R.id.icon_cp_dele).setOnClickListener {
@@ -188,7 +209,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
meHeadView=holder.getView(R.id.user_nav1)
meHeadView2=holder.getView(R.id.user_nav2)
if (relation1.user_id1== SpUtil.getUserId()){
if (relation1.user_id1== userId.toInt()){
meHeadView.setSex(relation1.sex2,relation1.avatar2,relation1.dress2)
holder.setText(R.id.tv_nickname1, relation1.nickname2)
@@ -197,7 +218,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
holder.setText(R.id.tv_nickname1, relation1.nickname1)
}
if (relation2.user_id1== SpUtil.getUserId()){
if (relation2.user_id1==userId.toInt()){
meHeadView2.setSex(relation2.sex2,relation2.avatar2,relation2.dress2)
holder.setText(R.id.tv_nickname2, relation2.nickname2)
}else{
@@ -215,7 +236,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
holder.setText(R.id.tv_gx_time2, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[1].end_time.toLong()* 1000 - System.currentTimeMillis()))
holder.getView<View>(R.id.user_nav1).setOnClickListener {
if (relation1.user_id1== SpUtil.getUserId()){
if (relation1.user_id1== userId.toInt()){
// 点击第一个用户头像
onItemClickListener?.onUserClick(relation1.user_id2.toString())
}else {
@@ -225,7 +246,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
}
holder.getView<View>(R.id.user_nav2).setOnClickListener {
if (relation2.user_id1== SpUtil.getUserId()) {
if (relation2.user_id1== userId.toInt()) {
// 点击第二个用户头像
onItemClickListener?.onUserClick(relation2.user_id2.toString())
}else{
@@ -251,7 +272,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
meHeadView2=holder.getView(R.id.user_nav2)
meHeadView3=holder.getView(R.id.user_nav3)
if (relation1.user_id1== SpUtil.getUserId()){
if (relation1.user_id1== userId.toInt()){
meHeadView.setSex(relation1.sex2,relation1.avatar2,relation1.dress2)
holder.setText(R.id.tv_nickname1, relation1.nickname2)
}else{
@@ -259,7 +280,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
holder.setText(R.id.tv_nickname1, relation1.nickname1)
}
if (relation2.user_id1== SpUtil.getUserId()){
if (relation2.user_id1== userId.toInt()){
meHeadView2.setSex(relation2.sex2,relation2.avatar2,relation2.dress2)
holder.setText(R.id.tv_nickname2, relation2.nickname2)
}else{
@@ -267,7 +288,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
holder.setText(R.id.tv_nickname2, relation2.nickname1)
}
if (relation3.user_id1== SpUtil.getUserId()){
if (relation3.user_id1==userId.toInt()){
meHeadView3.setSex(relation3.sex2,relation3.avatar2,relation3.dress2)
holder.setText(R.id.tv_nickname3, relation3.nickname2)
}else{
@@ -292,7 +313,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
holder.setText(R.id.tv_gx_time3, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[2].end_time.toLong()* 1000 - System.currentTimeMillis()))
holder.getView<View>(R.id.user_nav1).setOnClickListener {
if (relation1.user_id1== SpUtil.getUserId()){
if (relation1.user_id1== userId.toInt()){
// 点击第一个用户头像
onItemClickListener?.onUserClick(relation1.user_id2.toString())
}else {
@@ -302,7 +323,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
}
holder.getView<View>(R.id.user_nav2).setOnClickListener {
if (relation2.user_id1== SpUtil.getUserId()) {
if (relation2.user_id1== userId.toInt()) {
// 点击第二个用户头像
onItemClickListener?.onUserClick(relation2.user_id2.toString())
}else{
@@ -310,7 +331,7 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
}
}
holder.getView<View>(R.id.user_nav3).setOnClickListener {
if (relation3.user_id1== SpUtil.getUserId()) {
if (relation3.user_id1==userId.toInt()) {
// 点击第三个用户头像
onItemClickListener?.onUserClick(relation3.user_id2.toString())
}else{

View File

@@ -245,7 +245,7 @@ public class EaseChatAdapter extends BaseMultiItemQuickAdapter<EMMessageInfo, Ba
LinearLayout ll_images = helper.getView(com.xscm.moduleutil.R.id.line);
ll_images.removeAllViews();
for (String url : images) {
if (url.contains("http")) {
if (url != null && url.contains("http")) {
ImageView imageView = new ImageView(helper.itemView.getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
helper.itemView.getContext().getResources().getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_57),

View File

@@ -129,7 +129,7 @@ public class ExpandColumnAdapter extends BaseQuickAdapter<ExpandColumnBean, Base
List<String> images = item.getIcon(); // 获取图片列表
for (String url : images) {
if (url.contains("http")) {
if (url != null && url.contains("http")) {
ImageView imageView = new ImageView(mContext);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

View File

@@ -224,12 +224,10 @@ public class PlaceholderFragment extends BaseMvpFragment<PlaceholderPresenter,
ImageUtils.loadHeadCC(item.getUser_avatar(), helper.getView(R.id.iv_three_cp1_head));
ImageUtils.loadHeadCC(item.getUser_avatar1(), helper.getView(R.id.iv_three_cp2_head));
// helper.setText(R.id.tv_charm, item.getNumber());
helper.setText(R.id.tv_name, item.getNickname());
helper.setVisible( R.id.tv_cp_name,true).setText(R.id.tv_cp_name, item.getNickname1());
helper.setText(R.id.tv_no, String.valueOf(item.getRank()));
// ((BeautifulNameView) helper.getView(R.id.bnv_rank_list)).setTextColor(!TextUtils.isEmpty(item.getId_color()) ? Color.parseColor(item.getId_color()) : getResources().getColor(R.color.color_FF333333));
// ((BeautifulNameView) helper.getView(R.id.bnv_rank_list)).setText(item.getNickname2());
helper.setText(R.id.tv_charm, "Lv "+item.getTotal());
} else if (index == 1 || index == 2) {
rl.setVisibility(View.GONE);
helper.getView(R.id.riv_avatar).setVisibility(View.VISIBLE);
@@ -534,8 +532,8 @@ public class PlaceholderFragment extends BaseMvpFragment<PlaceholderPresenter,
// ImageView imVip3 = mBinding.includeTopBar.ivVip3;
// ImageView imLevel3 = mBinding.includeTopBar.ivLevel3;
TextView tvId3 = mBinding.includeTopBar.tvId3;
GifAvatarOvalView ivOneCp1Hhead = mBinding.includeTopBar.ivSecondCp1Head;
GifAvatarOvalView ivOneCp2Hhead = mBinding.includeTopBar.ivSecondCp2Head;
GifAvatarOvalView ivOneCp1Hhead = mBinding.includeTopBar.ivThreeCp1Head;
GifAvatarOvalView ivOneCp2Hhead = mBinding.includeTopBar.ivThreeCp2Head;
TextView tv_cp_xing1=mBinding.includeTopBar.tvCpXing3;
TextView tv_cp_name1=mBinding.includeTopBar.tvCpName3;
TextView tv_cp_name2=mBinding.includeTopBar.tvCpName32;

View File

@@ -44,7 +44,7 @@ public class RoomDetailsAdapter extends BaseMultiItemQuickAdapter<BaseMultiItemE
TextView tv2 = helper.getView(R.id.tv_2);
TextView tv3 = helper.getView(R.id.tv_3);
TextView tv_go_to_room = helper.getView(R.id.tv_go_to_room);
ImageUtils.loadImageView(item1.getSender_avatar(), avatarView);
ImageUtils.loadCenterCrop(item1.getSender_avatar(), avatarView);
tvName.setText(item1.getSender_nickname());
tv2.setText(item1.getReceive_nickname());
tv3.setText(item1.getGift_name() + "x" + item1.getNumber());

View File

@@ -116,7 +116,7 @@ public class RoomOnlineAdapter extends BaseMultiItemQuickAdapter<RoomOnlineBean,
List<String> images = item.getIcon(); // 获取图片列表
for (String url : images) {
if (url.contains("http")) {
if (url != null && url.contains("http")) {
ImageView imageView1 = new ImageView(helper.itemView.getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,

View File

@@ -46,7 +46,7 @@ public class RoomSettingAdapter extends BaseMultiItemQuickAdapter<RoomSettingBea
boolean b = isSelected;
switch (type) {
case RoomSettingBean.QXRoomSettingTypeRoomTypeSing:
return com.xscm.moduleutil.R.mipmap.ic_sing;
return com.xscm.moduleutil.R.mipmap.ic_jiaoy;
case RoomSettingBean.QXRoomSettingTypeRoomTypeAuction:
return com.xscm.moduleutil.R.mipmap.ic_auction;
case RoomSettingBean.QXRoomSettingTypeRoomTypeBoy:
@@ -54,7 +54,7 @@ public class RoomSettingAdapter extends BaseMultiItemQuickAdapter<RoomSettingBea
case RoomSettingBean.QXRoomSettingTypeRoomTypeGirl:
return com.xscm.moduleutil.R.mipmap.ic_girl;
case RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy:
return com.xscm.moduleutil.R.mipmap.ic_jiaoy;
return com.xscm.moduleutil.R.mipmap.ic_sing;
case RoomSettingBean.QXRoomSettingTypeRoomTypeHUYU:
return com.xscm.moduleutil.R.mipmap.huyu;
case RoomSettingBean.QXRoomSettingTypeRoomTypeLianG:

View File

@@ -38,7 +38,7 @@ public class SearchUserResultAdapter extends BaseQuickAdapter<UserResultResp, Ba
helper.setText(R.id.dy_name_text, KeyWordUtil.matcherSearchTitle(Color.parseColor("#FFBC00"), item.getNickname(), keyWord));
helper.setText(R.id.tv_id, "ID:" + item.getUser_code());
MeHeadView headView = helper.getView(R.id.dy_head_image);
headView.setData(item.getHead_picture(), "", "");
headView.setSex(item.getSex(),item.getAvatar(), "");
// if (item.getUser_id().equals(SpUtil.getUserId() + "")) {
// helper.setVisible(R.id.gensui, false);
// } else {

View File

@@ -1,6 +1,8 @@
package com.xscm.modulemain.adapter;
import android.annotation.SuppressLint;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
@@ -39,13 +41,15 @@ public class TaskBoxAdapter extends BaseQuickAdapter<GiftBoxBean.GiftBean, BaseV
giftName.setText(item.getName());
giftTitle.setText(item.getTitle());
if (position == 0) {
itemView.setBackgroundColor(mContext.getResources().getColor(com.xscm.moduleutil.R.color.color_FCE4ED)); // 红色
itemView.setBackgroundResource(R.drawable.shape_8);
itemView.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#FFFCE4ED")));
giftName.setTextColor(mContext.getResources().getColor(com.xscm.moduleutil.R.color.color_E24171));
setSpannableText(giftTitle, "最高可获得%d金币", Integer.parseInt(item.getHighest_gain()),com.xscm.moduleutil.R.color.color_E24171);
ImageUtils.loadSetErrorImg(item.getIcon(), helper.getView(R.id.task_box), com.xscm.moduleutil.R.mipmap.task_cj);
} else if (position == 1) {
itemView.setBackgroundResource(R.drawable.shape_8);
itemView.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#FFFDE8AE")));
ImageUtils.loadSetErrorImg(item.getIcon(), helper.getView(R.id.task_box), com.xscm.moduleutil.R.mipmap.task_gj);
itemView.setBackgroundColor(mContext.getResources().getColor(com.xscm.moduleutil.R.color.color_FDE8AE)); // 黄色
giftName.setTextColor(mContext.getResources().getColor(com.xscm.moduleutil.R.color.color_F35F07));
setSpannableText(giftTitle, "最高可获得%d金币", Integer.parseInt(item.getHighest_gain()),com.xscm.moduleutil.R.color.color_F35F07);
@@ -73,11 +77,10 @@ public class TaskBoxAdapter extends BaseQuickAdapter<GiftBoxBean.GiftBean, BaseV
helper.setText(R.id.iv_unlock, item.getStatus_str());
View unlockView = helper.getView(R.id.iv_unlock);
if (item.getStatus().equals("0")){
// helper.setImageDrawable(R.id.iv_unlock, mContext.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.not_unlocked));
unlockView.setClickable(false);
unlockView.setEnabled(false);
// 可选:改变颜色或透明度来视觉反馈
unlockView.setAlpha(0.9f); // 半透明表示不可点击
unlockView.setAlpha(0.2f); // 半透明表示不可点击
}else if (item.getStatus().equals("1")){
unlockView.setClickable(true);
unlockView.setEnabled(true);
@@ -85,18 +88,10 @@ public class TaskBoxAdapter extends BaseQuickAdapter<GiftBoxBean.GiftBean, BaseV
}else if (item.getStatus().equals("2")){
unlockView.setClickable(false);
unlockView.setEnabled(false);
}
else {
// helper.setImageDrawable(R.id.iv_unlock, mContext.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.unlocked));
unlockView.setClickable(false);
unlockView.setEnabled(false);
// 可选:改变颜色或透明度来视觉反馈
unlockView.setAlpha(0.8f); // 半透明表示不可点击
unlockView.setAlpha(1.0f); // 恢复正常显示
}
helper.getView(R.id.iv_unlock).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {

View File

@@ -33,7 +33,7 @@ public class TaskDataAdapter extends BaseQuickAdapter<GiftBoxBean.TaskDataBean.D
TextView textView1= helper.getView(R.id.task_jb);
if (item.getTask_status()==1){
textView.setText("未完成");
textView.setText(item.getTask_type_str());
}else if (item.getTask_status()==2){
textView.setText("");
textView.setBackgroundResource(com.xscm.moduleutil.R.mipmap.task_lq);
@@ -52,17 +52,12 @@ public class TaskDataAdapter extends BaseQuickAdapter<GiftBoxBean.TaskDataBean.D
// textView.setBackgroundResource(com.xscm.moduleutil.R.mipmap.task_ylq);
// }
if (item.getReward_type()==1){
textView1.setText("金币");
}else if (item.getReward_type()==2){
textView1.setText("钻石");
}
ImageUtils.loadHeadCC(item.getIcon(), helper.getView(R.id.task_pic));
helper.setText(R.id.task_name, item.getTask_name())
.setText(R.id.task_jb_number, "+"+item.getGold_reward());
ImageUtils.loadCenterCrop(item.getIcon(), helper.getView(R.id.task_pic));
helper.setText(R.id.task_name, item.getTask_name());
helper.setText(R.id.task_jb_number, item.getReward_str());
helper.getView(R.id.task_type).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mItemClickLitener!= null){

View File

@@ -17,14 +17,15 @@ import java.util.List;
public class TaskSectionAdapter extends RecyclerView.Adapter<TaskSectionAdapter.SectionViewHolder> {
private List<TaskItem> sections;
private List<GiftBoxBean.TaskDataBean> sections;
public TaskSectionAdapter(List<TaskItem> sections) {
public TaskSectionAdapter(List<GiftBoxBean.TaskDataBean> sections) {
this.sections = sections;
}
// 定义点击事件接口
public interface OnItemClickListener {
void onItemClick(TaskItem taskItem, GiftBoxBean.TaskDataBean.DailyTasksBean item);
void onItemClick(GiftBoxBean.TaskDataBean taskItem, GiftBoxBean.TaskDataBean.DailyTasksBean item);
}
private OnItemClickListener listener;
@@ -32,6 +33,7 @@ public class TaskSectionAdapter extends RecyclerView.Adapter<TaskSectionAdapter.
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
@NonNull
@Override
public SectionViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -41,26 +43,19 @@ public class TaskSectionAdapter extends RecyclerView.Adapter<TaskSectionAdapter.
@Override
public void onBindViewHolder(@NonNull SectionViewHolder holder, int position) {
TaskItem section = sections.get(position);
holder.title.setText(section.title);
GiftBoxBean.TaskDataBean section = sections.get(position);
holder.title.setText(section.getTask_type_name());
TaskDataAdapter adapter = new TaskDataAdapter();
holder.recyclerView.setLayoutManager(new LinearLayoutManager(holder.itemView.getContext()));
holder.recyclerView.setAdapter(adapter);
adapter.setNewData(section.tasks);
// if (position==2){
// holder.view.setVisibility(View.VISIBLE);
// }else {
// holder.view.setVisibility(View.GONE);
// }
adapter.setNewData(section.getTask_list());
adapter.setItemClickLitener(new TaskDataAdapter.ItemClickLitener() {
@Override
public void onItemClick(View view, int position, GiftBoxBean.TaskDataBean.DailyTasksBean item) {
adapter.setItemClickLitener((view, position1, item) -> {
if (listener != null) {
listener.onItemClick(section, item);
}
}
});
}

View File

@@ -622,7 +622,7 @@ public class RoomGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPres
// return;
// }
// } else {
if (roonGiftModel == null|| roonGiftModel.getGift_id() == null) {
if (roonGiftModel == null|| roonGiftModel.getGift_id() == null || !roonGiftModel.isChecked() ) {
ToastUtils.show("请选择礼物");
return;
}

View File

@@ -33,6 +33,7 @@ import com.xscm.moduleutil.utils.ImageUtils;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
/**
* @author qx
* @data 2025/6/21
@@ -51,11 +52,13 @@ public class RoomHostAddFragment extends BaseMvpDialogFragment<RoomHostPresenter
fragment.setArguments(args);
return fragment;
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
mRoomId = arguments.getString("roomId");
}
// TODO: 2025/3/7 固定dialog显示的位置和大小
@Override
protected void initDialogStyle(Window window) {
@@ -129,7 +132,7 @@ public class RoomHostAddFragment extends BaseMvpDialogFragment<RoomHostPresenter
llContainer.removeAllViews(); // 清空旧的 ImageView
if (!item.getIcon().isEmpty() || item.getIcon().size() > 0) {
for (String url : item.getIcon()) {
if (url.contains("http")) {
if (url != null && url.contains("http")) {
ImageView imageView = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_57),
@@ -154,7 +157,6 @@ public class RoomHostAddFragment extends BaseMvpDialogFragment<RoomHostPresenter
layout.setShadowOffsetX(1);
helper.getView(R.id.iv_add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -232,7 +234,4 @@ public class RoomHostAddFragment extends BaseMvpDialogFragment<RoomHostPresenter
}
}

View File

@@ -29,6 +29,7 @@ import com.xscm.moduleutil.bean.room.RoomUserBean;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@@ -47,18 +48,23 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
private RoomUserBean hostUser;
protected RoomInfoResp roomInfoResp;
private List<RoomOnlineBean> onlineBeanList = new ArrayList<>();
private RoomOnline mOnlineBean;
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getActivity());
}
public static RoomOnlineDialogFragment show(String id, String pit_number, RoomUserBean hostUser, RoomInfoResp roomInfoResp, FragmentManager fragmentManager) {
public static RoomOnlineDialogFragment show(String id, String pit_number, RoomOnline mOnlineBean, RoomUserBean hostUser, RoomInfoResp roomInfoResp, FragmentManager fragmentManager) {
RoomOnlineDialogFragment dialogFragment = new RoomOnlineDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
args.putString("pit_number", pit_number);
args.putSerializable("hostUser", hostUser); // 可选:传递参数
args.putSerializable("roomInfoResp", roomInfoResp);
args.putSerializable("mOnlineBean", mOnlineBean);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RoomOnlineDialogFragment");
return dialogFragment;
@@ -66,7 +72,7 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
@Override
protected void initData() {
MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
// MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
}
@Override
@@ -88,6 +94,7 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
super.onAttach(context);
roomId = getArguments().getString("roomId");
pit_number = getArguments().getString("pit_number");
mOnlineBean = (RoomOnline) getArguments().getSerializable("mOnlineBean");
hostUser = (RoomUserBean) getArguments().getSerializable("hostUser");
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp");
}
@@ -118,9 +125,11 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
}
});
List<RoomOnlineBean> roomOnlineBeanList = processOnlineData(mOnlineBean);
onlineBeanList.addAll(roomOnlineBeanList);
updateUserCount(mOnlineBean.getCount());
mBinding.rvComment.setLayoutManager(new LinearLayoutManager(getActivity()));
roomOnlineAdapter = new RoomOnlineAdapter(new ArrayList<RoomOnlineBean>());
roomOnlineAdapter = new RoomOnlineAdapter(onlineBeanList);
mBinding.rvComment.setAdapter(roomOnlineAdapter);
roomOnlineAdapter.setListener(new RoomOnlineAdapter.OnJoinButtonClickListener() {
@@ -216,41 +225,15 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
return;
}
getActivity().runOnUiThread(() -> {
finishRefreshOrLoad();
if (onlineBean == null) {
handleEmptyData();
return;
}
List<RoomOnlineBean> roomOnlineBeanList = processOnlineData(onlineBean);
updateAdapterData(roomOnlineBeanList);
updateUserCount(onlineBean.getCount());
});
}
private boolean isValidContext() {
return getActivity() != null && mBinding != null;
}
private void finishRefreshOrLoad() {
if (mBinding.srl == null) return;
if (page <= 1) {
mBinding.srl.finishRefresh();
} else {
mBinding.srl.finishLoadMore();
}
}
private void handleEmptyData() {
if (page <= 1) {
roomOnlineAdapter.setNewData(new ArrayList<>());
} else if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
private List<RoomOnlineBean> processOnlineData(RoomOnline onlineBean) {
List<RoomOnlineBean> result = new ArrayList<>();
@@ -296,13 +279,11 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
}
private void updateAdapterData(List<RoomOnlineBean> newData) {
if (page <= 1) {
roomOnlineAdapter.setNewData(newData);
} else if (!newData.isEmpty()) {
roomOnlineAdapter.addData(newData);
} else if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
if (page == 1) {
onlineBeanList.clear();
}
onlineBeanList.addAll(newData);
roomOnlineAdapter.notifyDataSetChanged();
}
private void updateUserCount(int count) {
@@ -315,11 +296,7 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
}
}
// @Override
// public void getRoomOnline(List<RoomOnlineBean> onlineBean) {
// roomOnlineAdapter.setNewData(onlineBean);
// mBinding.tvNum.setText("在线用户("+onlineBean.size()+")人");
// }
@Override
public void onResume() {
super.onResume();

View File

@@ -119,6 +119,7 @@ public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresente
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
LogUtils.e("roomId:" + room_id+",userId:"+user_id);
MvpPre.getRoomUserInfo(room_id, user_id);
}

View File

@@ -0,0 +1,247 @@
package com.xscm.modulemain.dialog
import android.content.Context
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import com.blankj.utilcode.util.ScreenUtils
import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogSignBinding
import com.xscm.moduleutil.bean.SignInData
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import com.xscm.moduleutil.utils.ImageLoader
import com.xscm.moduleutil.widget.dialog.BaseDialog
import io.reactivex.disposables.Disposable
/**
* 项目名称:羽声语音
* 时间2025/12/9 18:21
* 用途:签到
*/
class SignInDialog(context: Context) : BaseDialog<DialogSignBinding>(context) {
var signInDataLists: List<SignInData>? = ArrayList<SignInData>()
private var onCloseCallback: (() -> Unit)? = null
fun setOnCloseListener(callback: () -> Unit) = apply {
onCloseCallback = callback
}
init {
// 设置对话框从底部弹出
window?.setGravity(Gravity.CENTER)
// 设置对话框的宽度为屏幕宽度
// 2025年12月12日15:56:12 实验这里去掉然后给布局中设置paddingHorizontal效果和这里设置固定宽度是一样的
// window?.setLayout(
// (ScreenUtils.getScreenWidth() * 331f / 375).toInt(),
// ViewGroup.LayoutParams.WRAP_CONTENT
// )
// 添加动画效果
window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt)
setCancelable(false)
setCanceledOnTouchOutside(false)
}
override fun getLayoutId(): Int {
return R.layout.dialog_sign
}
override fun initView() {
mBinding.ivClose.setOnClickListener {
onCloseCallback?.invoke()
dismiss()
}
mBinding.btnSign.setOnClickListener {
RetrofitClient.getInstance().dailyTasksSign(object : BaseObserver<String>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
var signInSuccessDialog=SignInSuccessDialog(context)
signInSuccessDialog.viewData(signInData)
signInSuccessDialog.setOnCloseListener {
onCloseCallback?.invoke()
}
signInSuccessDialog.show()
dismiss()
}
})
}
}
override fun initData() {
RetrofitClient.getInstance().signIn(object : BaseObserver<List<SignInData>>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: List<SignInData>) {
if (t.isNotEmpty()) {
signInDataLists = t
for (i in signInDataLists!!) {
setUpView(i)
}
}else{
onCloseCallback?.invoke()
dismiss()
}
}
})
}
var signInData = SignInData()
fun setUpView(signInData: SignInData) {
if (signInData.is_today == 1) {
this.signInData = signInData
if (signInData.sign_in_status == 1) {
mBinding.btnSign.text = "已签到"
mBinding.btnSign.isEnabled = false
mBinding.btnSign.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r53_f3f3f3)
}
}
if (signInData.day == 1) {
mBinding.day1.tvDay.text = signInData.day.toString()
mBinding.day1.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day1.ivCollected.visibility = View.VISIBLE
mBinding.day1.root.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_sigin_status)
ImageLoader.loadImage(
context,
mBinding.day1.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day1.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day1.ivSign
)
}
} else if (signInData.day == 2) {
mBinding.day2.tvDay.text = signInData.day.toString()
mBinding.day2.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day2.ivCollected.visibility = View.VISIBLE
mBinding.day2.root.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_sigin_status)
ImageLoader.loadImage(
context,
mBinding.day2.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day2.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day2.ivSign
)
}
} else if (signInData.day == 3) {
mBinding.day3.tvDay.text = signInData.day.toString()
mBinding.day3.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day3.ivCollected.visibility = View.VISIBLE
mBinding.day3.root.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_sigin_status)
ImageLoader.loadImage(
context,
mBinding.day3.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day3.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day3.ivSign
)
}
} else if (signInData.day == 4) {
mBinding.day4.tvDay.text = signInData.day.toString()
mBinding.day4.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day4.ivCollected.visibility = View.VISIBLE
mBinding.day4.root.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_sigin_status)
ImageLoader.loadImage(
context,
mBinding.day4.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day4.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day4.ivSign
)
}
} else if (signInData.day == 5) {
mBinding.day5.tvDay.text = signInData.day.toString()
mBinding.day5.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day5.ivCollected.visibility = View.VISIBLE
mBinding.day5.root.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_sigin_status)
ImageLoader.loadImage(
context,
mBinding.day5.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day5.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day5.ivSign
)
}
} else if (signInData.day == 6) {
mBinding.day6.tvDay.text = signInData.day.toString()
mBinding.day6.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day6.ivCollected.visibility = View.VISIBLE
mBinding.day6.root.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_sigin_status)
ImageLoader.loadImage(
context,
mBinding.day6.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day6.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day6.ivSign
)
}
} else if (signInData.day == 7) {
mBinding.day7.tvDay.text = signInData.day.toString()
mBinding.day7.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day7.ivCollected.visibility = View.VISIBLE
mBinding.day7.root.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_sigin_status)
ImageLoader.loadImage(
context,
mBinding.day7.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day7.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day7.ivSign
)
}
}
}
}

View File

@@ -0,0 +1,57 @@
package com.xscm.modulemain.dialog
import android.content.Context
import android.view.Gravity
import android.view.ViewGroup
import com.blankj.utilcode.util.ScreenUtils
import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogSignSuccesBinding
import com.xscm.moduleutil.bean.SignInData
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.widget.dialog.BaseDialog
/**
* 项目名称:羽声语音
* 时间2025/12/12 9:37
* 用途:签到成功后展示页面
*/
class SignInSuccessDialog(context: Context) : BaseDialog<DialogSignSuccesBinding>(context) {
private var onCloseCallback: (() -> Unit)? = null
fun setOnCloseListener(callback: () -> Unit) = apply {
onCloseCallback = callback
}
init {
// 设置对话框从底部弹出
window?.setGravity(Gravity.CENTER)
// 设置对话框的宽度为屏幕宽度
window?.setLayout(
(ScreenUtils.getScreenWidth() * 315f / 375).toInt(),
ViewGroup.LayoutParams.WRAP_CONTENT
)
// 添加动画效果
window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt)
setCancelable(false)
setCanceledOnTouchOutside(false)
}
override fun getLayoutId(): Int {
return R.layout.dialog_sign_succes
}
override fun initView() {
mBinding.btnSign.setOnClickListener {
onCloseCallback?.invoke()
dismiss()
}
}
override fun initData() {
}
fun viewData(signInData: SignInData) {
ImageUtils.loadHead(signInData.base_image, mBinding.imV)
mBinding.tvSignPrice.text ="签到成功 "+ signInData.gift_name+""+signInData.num
}
}

View File

@@ -16,6 +16,7 @@ import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.modulemain.activity.main.activity.MainActivity;
import com.xscm.modulemain.activity.room.activity.RoomActivity;
import com.xscm.modulemain.activity.user.activity.DailyTasksActivity;
import com.xscm.modulemain.activity.user.activity.MyRoomActivity;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.room.RoomInfoResp;
@@ -155,6 +156,10 @@ public class RoomManager {
if (resp != null) {
if (ActivityUtils.getTopActivity() instanceof MainActivity){
((MainActivity) ActivityUtils.getTopActivity()).isShowLoading(false);
}else if (ActivityUtils.getTopActivity() instanceof MyRoomActivity){
((MyRoomActivity) ActivityUtils.getTopActivity()).isShowLoading(false);
}else if (ActivityUtils.getTopActivity() instanceof DailyTasksActivity){
((DailyTasksActivity) ActivityUtils.getTopActivity()).isShowLoading(false);
}
if (!resp.getRoom_id().isEmpty()){
if(CommonAppContext.getInstance().playId==null){
@@ -194,6 +199,8 @@ public class RoomManager {
((MainActivity) ActivityUtils.getTopActivity()).isShowLoading(false);
}else if (ActivityUtils.getTopActivity() instanceof MyRoomActivity){
((MyRoomActivity) ActivityUtils.getTopActivity()).isShowLoading(false);
} else if (ActivityUtils.getTopActivity() instanceof DailyTasksActivity){
((DailyTasksActivity) ActivityUtils.getTopActivity()).isShowLoading(false);
}
}
}

View File

@@ -0,0 +1,82 @@
package com.xscm.modulemain.utils
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.Executors
import java.util.concurrent.ScheduledFuture
import java.util.concurrent.TimeUnit
/**
* 单例定时器管理类
* 特性:
* 1. 单例模式,全局唯一实例
* 2. 支持多任务管理通过taskId区分
* 3. 时间到触发回调,支持取消指定/所有定时器
* 4. 线程安全,适配多线程场景
*/
object TimerManager {
// 线程安全的ScheduledExecutorService核心线程数1足够处理定时任务
private val scheduler = Executors.newSingleThreadScheduledExecutor()
// 存储定时任务的Future用于取消任务ConcurrentHashMap保证线程安全
private val taskMap = ConcurrentHashMap<String, ScheduledFuture<*>>()
/**
* 启动一个定时任务
* @param taskId 任务唯一标识(用于后续取消)
* @param delay 延迟时间比如5表示5秒/5分钟取决于unit
* @param unit 时间单位TimeUnit.SECONDS/TimeUnit.MILLISECONDS等
* @param onTimeUp 时间到的回调(默认在后台线程执行)
*/
fun scheduleTimer(
taskId: String,
delay: Long,
unit: TimeUnit,
onTimeUp: () -> Unit
) {
// 先取消同名任务(避免重复创建)
if (taskMap.containsKey(taskId)) {
cancelTimer(taskId)
}
// 提交定时任务
val future = scheduler.schedule({
try {
onTimeUp.invoke() // 执行回调
taskMap.remove(taskId) // 执行完自动移除任务记录
} catch (e: Exception) {
// 捕获回调异常,避免影响定时器线程
println("Timer task $taskId callback error: ${e.message}")
}
}, delay, unit)
// 记录任务Future
taskMap[taskId] = future
}
/**
* 取消指定的定时任务
* @param taskId 任务唯一标识
* @return 是否取消成功true=取消成功/任务已执行false=任务不存在)
*/
fun cancelTimer(taskId: String): Boolean {
val future = taskMap.remove(taskId) ?: return false
// mayInterruptIfRunning是否中断正在执行的任务这里设为false避免强制中断
return future.cancel(false)
}
/**
* 取消所有定时任务
*/
fun cancelAllTimers() {
taskMap.values.forEach { it.cancel(false) }
taskMap.clear()
}
/**
* 销毁定时器(应用退出时调用,释放资源)
*/
fun destroy() {
cancelAllTimers()
scheduler.shutdown() // 关闭线程池
}
}

Some files were not shown because too many files have changed in this diff Show More