1:修改时间选择框,根据需要,展示时分秒和不显示时分秒

2:修改展示设备id,在头部信息中,使用第三方的获取设备唯一id
3:优化群聊成员列表展示
4:修改房间封面,上传图片的时候,需要裁剪
5:添加营业时间展示
6:pk修改开始的时候,选择时间去掉1分钟
7:修改声网,添加声卡开关
This commit is contained in:
2026-01-20 19:20:06 +08:00
parent bf609a3964
commit 163340a691
41 changed files with 919 additions and 277 deletions

View File

@@ -137,7 +137,7 @@ public class CommonAppContext extends MultiDexApplication implements Application
@Getter
public UnreadCountEvent unreadCountEvent;
public static int selectRelease = 1;
public static int selectRelease = -1;
public int is_open = 0;//主题的开关

View File

@@ -8,7 +8,7 @@ package com.xscm.moduleutil.bean
class GroupBean {
var guild_id: String = ""
var guild_cover: String = ""
var is_deacon: Int = 0 //是否是群主 1是 ,其他的不是
var is_deacon: Int = 0 //是否是群主 1是 ,其他的不是 2:管理员 3普通成员
var user_list: List<GroupUserBean> = ArrayList()
var name: String = ""
@@ -27,6 +27,7 @@ class GroupBean {
var role_str: String = ""
var in_room_id: Int = 0 //是否在房间内 1在 0不在
var is_mute: Int = 0 //是否被禁言 1是 0不是
var group_role : Int = 0 //群角色 1群主 2管理员 3普通成员
}

View File

@@ -19,4 +19,6 @@ public class PkRoomInfo implements Serializable {
private String pk_part;;//2等待开始、3进行中、4惩罚阶段
private String pk_end_times;
private int receive_pk_user_id = -2;//接受pk的用户id
private String close_users="";//关闭pk麦克风的用户id
}

View File

@@ -65,6 +65,10 @@ public class RoomSettingBean implements MultiItemEntity {
public static final int QXRoomSettingTypeRoomTimeSpace = 34;//时空之巅
public static final int QXRoomSettingTypeRoomTimeRedSound = 35;//红包声音
public static final int QXRoomSettingTypeRoomBusinessTime = 37;//营业时间
public static final int ITEM_TYPE_DEFAULT = 0;
public static final int ITEM_TYPE_WITH_ICON = 1;

View File

@@ -360,7 +360,7 @@ public interface ApiServer {
@GET(Constants.GET_CUSTOM_GIFT_LIST)
Call<BaseModel<List<RoonGiftModel>>> getCustomGiftList(@Query("user_id") String user_id);
@GET(Constants.GET_NEW_GIFT_LIST)
@GET(Constants.GET_NEW_GIFT_LIST) //拍卖位选择拍卖礼物type=3 label =99
Call<BaseModel<List<RoonGiftModel>>> getNewGiftList(@Query("label") int label, @Query("type") String type );
@GET(Constants.SET_CUSTOM_GIFT)
@@ -528,6 +528,10 @@ public interface ApiServer {
@POST(Constants.postRoomSwToken)
Call<BaseModel<PkSwTokenBean>> postRoomSwToken(@Field("room_id") String roomId);
@FormUrlEncoded
@POST(Constants.POST_CLOSE_PK_MIC)
Call<BaseModel<String>> closePkMic(@Field("pk_id") String pk_id,@Field("type") String type,@Field("user_id") String user_id);
@FormUrlEncoded
@POST(Constants.SET_USER_DECORATE)
Call<BaseModel<String>> setUserDecorate(@Field("udid") String udid);
@@ -749,6 +753,10 @@ public interface ApiServer {
@GET(Constants.GET_BLIND_BOX_STATUS)
Call<BaseModel<List<BlindBoxStatus>>> blindBoxStatus();
@FormUrlEncoded
@POST(Constants.SET_ROOM_BUSINESS_TIME)
Call<BaseModel<String>> setRoomBusinessTime(@Field("room_id") String roomId,@Field("start_time") String startTime,@Field("end_time") String endTime);
@FormUrlEncoded
@POST(Constants.POST_END_SONG)
Call<BaseModel<String>> endSong(@Field("room_id") String roomId);
@@ -770,7 +778,7 @@ public interface ApiServer {
Call<BaseModel<List<RoomCharmRankBean>>> getCharmRank(@Field("room_id") String roomId);
@FormUrlEncoded
@POST(Constants.POST_ROOM_RELATION_LIST)
@POST(Constants.POST_ROOM_RELATION_LIST) //1真爱拍 2亲密拍 3星球互娱
Call<BaseModel<List<RoomRelationBean>>> roomRelationList(@Field("type") String type);
@FormUrlEncoded

View File

@@ -749,7 +749,7 @@ public class RetrofitClient {
@Override
public void onResponse(Call<BaseModel<GroupUserListBean>> call, Response<BaseModel<GroupUserListBean>> response) {
if (response.code() == 200) {
if (response.code() == 200) {
BaseModel<GroupUserListBean> baseModel = response.body();
if (baseModel.getCode() == 1)
observer.onNext(baseModel.getData());
@@ -3363,7 +3363,6 @@ public class RetrofitClient {
setCode301(indexRecommendRoomBaseModel.getMsg());
}
} else {
ToastUtils.showLong("首页房间推荐异常", response.code());
LogUtils.e("首页房间推荐", response.message());
}
}
@@ -4654,6 +4653,33 @@ public class RetrofitClient {
});
}
public void setRoomBusinessTime(String roomId,String start_time,String end_time, BaseObserver<String> observer) {
sApiServer.setRoomBusinessTime(roomId,start_time,end_time).enqueue(new Callback<BaseModel<String>>() {
@Override
public void onResponse(Call<BaseModel<String>> call, Response<BaseModel<String>> response) {
if (response.code() == 200) {
BaseModel<String> baseModel = response.body();
if (baseModel.getCode() == 1)
ToastUtils.showLong(baseModel.getMsg());
else if (baseModel.getCode() == 301) {
setCode301(baseModel.getMsg());
}else if (baseModel.getCode() == 0) {
ToastUtils.showLong(baseModel.getMsg());
}
}else {
ToastUtils.showLong("设置营业时间失败,", response.code());
LogUtils.e("setRoomBusinessTime", response.message());
}
}
@Override
public void onFailure(Call<BaseModel<String>> call, Throwable t) {
LogUtils.e("setRoomBusinessTime", t.fillInStackTrace());
}
});
}
public void endSong(String room_id, BaseObserver<String> observer) {
sApiServer.endSong(room_id).enqueue(new Callback<BaseModel<String>>() {
@Override
@@ -5343,6 +5369,33 @@ public class RetrofitClient {
});
}
public void closePkMic(String pk_id ,String type ,String user_id,BaseObserver<String> observer) {
sApiServer.closePkMic(pk_id,type,user_id).enqueue(new Callback<BaseModel<String>>() {
@Override
public void onResponse(Call<BaseModel<String>> call, Response<BaseModel<String>> response) {
if (response.code() == 200) {
BaseModel<String> baseModel = response.body();
if (baseModel.getCode() == 1) {
observer.onNext(baseModel.getMsg());
} else if (baseModel.getCode() == 301) {
setCode301(baseModel.getMsg());
} else if (baseModel.getCode() == 0) {
ToastUtils.showShort(baseModel.getMsg());
}
} else {
ToastUtils.showLong("数据错误", response.code());
LogUtils.e("closePkMic", response.message());
}
}
@Override
public void onFailure(Call<BaseModel<String>> call, Throwable t) {
LogUtils.e("closePkMic", t.fillInStackTrace());
}
});
}
public void removeBlackList(String user_id, BaseObserver<String> observer) {
sApiServer.removeBlackList(user_id).enqueue(new Callback<BaseModel<String>>() {
@Override

View File

@@ -94,7 +94,7 @@ import io.reactivex.disposables.Disposable;
public class AgoraManager {
private static volatile AgoraManager instance;
public RtcEngineEx rtcEngine;
public RtcEngineEx rtcEngine;
// private RtcEngineEx rtcEngineEx;
private Context context;
private boolean isLocalAudioEnabled = true; // 默认开启麦克风
@@ -230,6 +230,9 @@ public class AgoraManager {
"}" +
"}");
rtcEngine.setParameters("{\"che.video.mobile_1080p\":true}");
setEnable();
} catch (Exception e) {
LogUtils.w("AgoraManager", "Failed to set parameters", e);
}
@@ -242,6 +245,7 @@ public class AgoraManager {
}
}
}
public static int calculateScreenAngle(int orientation) {
if (orientation >= 315 || orientation < 45) {
return 0; // 竖屏0度
@@ -253,6 +257,7 @@ public class AgoraManager {
return 270; // 横屏左270度
}
}
/**
* 加入语音聊天房间
*/
@@ -281,6 +286,7 @@ public class AgoraManager {
// 在频道中发布屏幕采集的音频
options.publishScreenCaptureAudio = true;
ClientRole(isCamerJs);
// options.publishMediaPlayerId = 0;
rtcEngine.joinChannel(token, mRoomId, uid, options);
@@ -289,6 +295,18 @@ public class AgoraManager {
}
public void setEnable(){
if (SpUtil.getSkService()==1){
rtcEngine.setParameters("{\"che.audio.aec.enable\":false}"); // 关闭回音消除
rtcEngine.setParameters("{\"che.audio.ans.enable\":false}"); // 关闭降噪
rtcEngine.setParameters("{\"che.audio.agc.enable\":false}"); // 关闭增益控制
}else {
rtcEngine.setParameters("{\"che.audio.aec.enable\":true}"); // 开启回音消除
rtcEngine.setParameters("{\"che.audio.ans.enable\":true}"); // 开启降噪
rtcEngine.setParameters("{\"che.audio.agc.enable\":true}"); // 开启增益控制
}
}
/**
* 清理资源但保留实例
*/
@@ -342,14 +360,14 @@ public class AgoraManager {
}
handlers.clear();
}
if (disposableA != null && !disposableA.isDisposed()){
if (disposableA != null && !disposableA.isDisposed()) {
disposableA.dispose();
}
if (disposableB != null && !disposableB.isDisposed()){
disposableB.dispose();
if (disposableB != null && !disposableB.isDisposed()) {
disposableB.dispose();
}
if (disposableC != null && !disposableC.isDisposed()){
disposableC.dispose();
if (disposableC != null && !disposableC.isDisposed()) {
disposableC.dispose();
}
// 关闭线程池
if (executorService != null && !executorService.isShutdown()) {
@@ -412,7 +430,7 @@ public class AgoraManager {
@Override
public void onRemoteAudioStateChanged(int uid, int state, int reason, int elapsed) {
super.onRemoteAudioStateChanged(uid, state, reason, elapsed);
if (state == 0){
if (state == 0) {
// LogUtils.e("onRemoteAudioStateChanged", "uid------>" + uid, "state------>" + state, "reason------>" + reason, "elapsed------>" + elapsed);
for (SoundLevelUpdateListener listener : soundLevelUpdateListeners) {
if (listener != null) {
@@ -485,7 +503,7 @@ public class AgoraManager {
@Override
public void onLyricResult(String requestId, long songCode, String lyricUrl, int reason) {
if (lyricUrl != null) {
LogUtils.e("roomInfoEvent",lyricUrl);
LogUtils.e("roomInfoEvent", lyricUrl);
getLyricsInstance(lyricUrl);
}
}
@@ -563,7 +581,7 @@ public class AgoraManager {
Map<String, Integer> localMap = new HashMap<>();
for (AudioVolumeInfo info : speakers) {
String userId = (info.uid == 0)
? SpUtil.getUserId()+""
? SpUtil.getUserId() + ""
: String.valueOf(info.uid);
localMap.put(userId, info.volume);
}
@@ -575,6 +593,7 @@ public class AgoraManager {
// 2⃣ 只把“不可变快照”丢给 UI
uiHandler.post(() -> dispatchVolume(localMap));
}
private void dispatchVolume(Map<String, Integer> volumeSnapshot) {
if (soundLevelUpdateListeners.isEmpty()) return;
@@ -587,6 +606,7 @@ public class AgoraManager {
}
}
}
@Override
public void onLocalVideoStateChanged(Constants.VideoSourceType source, int state, int reason) {
super.onLocalVideoStateChanged(source, state, reason);
@@ -658,6 +678,7 @@ public class AgoraManager {
}
};
}
/**
* 创建并返回 IMediaPlayerObserver 实例
*/
@@ -755,6 +776,7 @@ public class AgoraManager {
}
};
}
public void potexao(String page) {
ClientRole(true);
rtcEngine.playEffect(1, page, 0, 1, 0, 100, true);
@@ -770,7 +792,7 @@ public class AgoraManager {
}
}
public void joinChannelEx(String token, String channelId, int uid,String pkUserIds) {
public void joinChannelEx(String token, String channelId, int uid, String pkUserIds) {
if (rtcEngine == null) {
init(CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId());
}
@@ -810,17 +832,17 @@ public class AgoraManager {
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
DisplayMetrics outMetrics=new DisplayMetrics();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
// // 设置屏幕采集的参数
screenCaptureParameters.captureVideo = true;
screenCaptureParameters.videoCaptureParameters.width = outMetrics.widthPixels;
screenCaptureParameters.videoCaptureParameters.height = outMetrics.heightPixels;
screenCaptureParameters.videoCaptureParameters.width = outMetrics.widthPixels;
screenCaptureParameters.videoCaptureParameters.height = outMetrics.heightPixels;
screenCaptureParameters.videoCaptureParameters.framerate = 15;
screenCaptureParameters.captureAudio = true;
screenCaptureParameters.audioCaptureParameters.captureSignalVolume =50;
screenCaptureParameters.videoCaptureParameters.contentHint=1 ;
screenCaptureParameters.audioCaptureParameters.captureSignalVolume = 50;
screenCaptureParameters.videoCaptureParameters.contentHint = 1;
rtcEngine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
VD_1280x720,
FRAME_RATE_FPS_15,
@@ -833,12 +855,12 @@ public class AgoraManager {
}
public void setExternalMediaProjection(MediaProjection[] mediaProjection){
public void setExternalMediaProjection(MediaProjection[] mediaProjection) {
rtcEngine.setExternalMediaProjection(mediaProjection[0]);
}
public void isPost(){
if (rtcEngine != null){
public void isPost() {
if (rtcEngine != null) {
ScreenCaptureParameters screenCaptureParameters = new ScreenCaptureParameters();
// 设置新的屏幕共享参数
@@ -917,6 +939,7 @@ public class AgoraManager {
}
}
}
//关闭对方的所有推流
public void muteAllRemoteAudioStreamsEx(boolean enabled) {
if (rtcEngine == null) {
@@ -932,10 +955,11 @@ public class AgoraManager {
// rtcEngine.muteAllRemoteAudioStreamsEx(enabled, connection);
}
}
//打开对方支持的推流
public void muteAllRemoteAudioStreamsExUserId(boolean enabled){
if (rtcEngine != null){
rtcEngine.muteRemoteAudioStreamEx(pkUserId,enabled,connection);
public void muteAllRemoteAudioStreamsExUserId(boolean enabled) {
if (rtcEngine != null) {
rtcEngine.muteRemoteAudioStreamEx(pkUserId, enabled, connection);
}
}
@@ -1011,7 +1035,7 @@ public class AgoraManager {
// }
// }
public void addSoundLevelListener(SoundLevelUpdateListener listener) {
LogUtils.e("AgoraManager", "addSoundLevelListener: " + listener +"============"+soundLevelUpdateListeners.size());
LogUtils.e("AgoraManager", "addSoundLevelListener: " + listener + "============" + soundLevelUpdateListeners.size());
if (soundLevelUpdateListeners != null) {
soundLevelUpdateListeners.add(listener);
}
@@ -1028,19 +1052,19 @@ public class AgoraManager {
soundLevelUpdateListeners.clear();
}
/**
* This method searches for music based on a given keyword and page number.
* It initializes the music content center if it's not already created.
*
* @param keyword The keyword to search for music
* @param page The page number of the search results
*/
/**
* This method searches for music based on a given keyword and page number.
* It initializes the music content center if it's not already created.
*
* @param keyword The keyword to search for music
* @param page The page number of the search results
*/
public void searchMusic(String keyword, int page) {
// Check if musicContentCenter is initialized, if not create it
// Check if musicContentCenter is initialized, if not create it
if (musicContentCenter == null) {
musicContentCenter = IAgoraMusicContentCenter.create(rtcEngine);
}
// Perform the music search with the keyword, page number and page size (20)
// Perform the music search with the keyword, page number and page size (20)
musicContentCenter.searchMusic(keyword, page, 20);
}
@@ -1112,8 +1136,8 @@ public class AgoraManager {
String result = musicContentCenter.preload(mSongCode);
// 使用后台线程池处理预加载检查避免阻塞UI线程
disposableC = Observable.timer(3000, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
isPreload(mSongCode, type);
});
isPreload(mSongCode, type);
});
} else {
try {
musicPlayer.open(mSongCode, 0);
@@ -1262,15 +1286,17 @@ public class AgoraManager {
public void setPlayoutVolume(int volume) {
if (musicPlayer != null) {
musicPlayer.adjustPlayoutVolume(volume);//调节本地播放音量。 参数是0-100
musicPlayer.adjustPublishSignalVolume(volume*2);//调节远端用户听到的音量。 参数是0-400
musicPlayer.adjustPublishSignalVolume(volume * 2);//调节远端用户听到的音量。 参数是0-400
}
}
/**
* 伴奏音量
*
* @param volume
*/
public void setAdjustPublishSignalVolume(int volume){
public void setAdjustPublishSignalVolume(int volume) {
musicPlayer.adjustPublishSignalVolume(volume);//调节远端用户听到的音量。 参数是0-400
}
@@ -1362,7 +1388,7 @@ public class AgoraManager {
.build();
if (StatusUtil.isCompleted(task)) {
MusicFileBean musicFileBean = new MusicFileBean();
LogUtils.e("roomInfoEvent",convertFileToByteArray(task.getFile()));
LogUtils.e("roomInfoEvent", convertFileToByteArray(task.getFile()));
musicFileBean.setFileData(convertFileToByteArray(task.getFile()));
EventBus.getDefault().post(musicFileBean);
} else {
@@ -1391,7 +1417,7 @@ public class AgoraManager {
@Override
public void taskEnd(@NonNull DownloadTask task, @NonNull EndCause cause, @Nullable Exception realCause, @NonNull Listener1Assist.Listener1Model model) {
Logger.e("taskEnd", model);
LogUtils.e("roomInfoEvent",convertFileToByteArray(task.getFile()));
LogUtils.e("roomInfoEvent", convertFileToByteArray(task.getFile()));
MusicFileBean musicFileBean = new MusicFileBean();
musicFileBean.setFileData(convertFileToByteArray(task.getFile()));
EventBus.getDefault().post(musicFileBean);

View File

@@ -354,6 +354,15 @@ public class SpUtil {
return SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getInt(SPConstants.TASK_SERVICE);
}
public static int setSkService(int taskService){
SPUtils.getInstance(SPConstants.PREFERENCE_NAME).put("skService", taskService);
return taskService;
}
public static int getSkService(){
return SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getInt("skService");
}
//获取SharedPreferences音乐轮播方式
public static int getPlayPattern() {
return SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getInt(SPConstants.PLAY_MODE, 1);

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.os.Build;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.DeviceUtils;
import com.blankj.utilcode.util.MetaDataUtils;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.utils.config.ConfigUtils;
@@ -77,7 +78,8 @@ public class SystemUtils {
}
public static String getShortClientID(Context context) {
String cid = getClientID("xqipaoandroid");
// String cid = getClientID("xqipaoandroid");
String cid = DeviceUtils.getUniqueDeviceId();
return Md5Utils.get(cid + getUUID(context));
}

View File

@@ -317,6 +317,7 @@ public class Constants {
public static final String POST_APPLY_SONG = "/api/RoomSong/apply_song";//申请点歌
public static final String POST_AGREE_SONG = "/api/RoomSong/agree_song";//同意、拒绝点歌
public static final String GET_BLIND_BOX_STATUS = "/api/BlindBoxTurntable/blind_box_status";//盲盒转盘状态
public static final String SET_ROOM_BUSINESS_TIME = "/api/Room/set_room_business_time";//设置房间的营业时间
public static final String POST_SONG_LIST = "/api/RoomSong/song_list";//获取已点歌曲
public static final String POST_SONG = "/api/RoomSong/song";//点歌
public static final String POST_UP_SONG = "/api/RoomSong/up_song";//移动歌曲
@@ -411,6 +412,7 @@ public class Constants {
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 postRoomSwToken = "/api/Room/update_user_sw_token";//获取用户声网token
public static final String POST_CLOSE_PK_MIC = "/api/RoomPk/close_pk_mic";//PK闭麦
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";//点击开始按钮 交友房

View File

@@ -20,6 +20,9 @@ import java.util.Date;
public class DoubleTimePickerBottomSheet extends BottomSheetDialogFragment {
private OnTimeRangeSelectedListener listener;
private boolean showTime = true; // 默认显示时分秒
private boolean showDate = true; // 默认显示日期
private boolean showSeconds = true; // 默认显示秒
public interface OnTimeRangeSelectedListener {
void onTimeRangeSelected(Date startDate, Date endDate);
@@ -28,6 +31,54 @@ public class DoubleTimePickerBottomSheet extends BottomSheetDialogFragment {
public void setOnTimeRangeSelectedListener(OnTimeRangeSelectedListener listener) {
this.listener = listener;
}
/**
* 设置是否显示时分秒
* @param showTime true显示年月日时分秒false只显示年月日
*/
public void setShowTime(boolean showTime) {
this.showTime = showTime;
}
/**
* 设置是否显示日期
* @param showDate true显示日期false只显示时间
*/
public void setShowDate(boolean showDate) {
this.showDate = showDate;
}
/**
* 设置是否显示秒
* @param showSeconds true显示秒false不显示秒
*/
public void setShowSeconds(boolean showSeconds) {
this.showSeconds = showSeconds;
}
/**
* 创建实例
* @param showTime true显示年月日时分秒false只显示年月日
* @return DoubleTimePickerBottomSheet实例
*/
public static DoubleTimePickerBottomSheet newInstance(boolean showTime) {
DoubleTimePickerBottomSheet fragment = new DoubleTimePickerBottomSheet();
fragment.setShowTime(showTime);
return fragment;
}
/**
* 创建实例
* @param showTime true显示年月日时分秒false只显示年月日
* @param showDate true显示日期false只显示时间
* @return DoubleTimePickerBottomSheet实例
*/
public static DoubleTimePickerBottomSheet newInstance(boolean showTime, boolean showDate) {
DoubleTimePickerBottomSheet fragment = new DoubleTimePickerBottomSheet();
fragment.setShowTime(showTime);
fragment.setShowDate(showDate);
return fragment;
}
@NonNull
@Override
@@ -52,17 +103,77 @@ public class DoubleTimePickerBottomSheet extends BottomSheetDialogFragment {
WheelTimePicker wheelStartTime = view.findViewById(R.id.wheel_start_time);
WheelDatePicker wheelEndDate = view.findViewById(R.id.wheel_end_date);
WheelTimePicker wheelEndTime = view.findViewById(R.id.wheel_end_time);
// 根据showDate和showTime参数控制日期和时间选择器的显示和布局
if (showDate && showTime) {
// 显示日期和时间时,使用默认布局
wheelStartDate.setVisibility(View.VISIBLE);
wheelStartTime.setVisibility(View.VISIBLE);
wheelEndDate.setVisibility(View.VISIBLE);
wheelEndTime.setVisibility(View.VISIBLE);
// 重置日期选择器的布局参数为默认值
ViewGroup.LayoutParams startDateParams = wheelStartDate.getLayoutParams();
startDateParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
wheelStartDate.setLayoutParams(startDateParams);
ViewGroup.LayoutParams endDateParams = wheelEndDate.getLayoutParams();
endDateParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
wheelEndDate.setLayoutParams(endDateParams);
} else if (showDate && !showTime) {
// 只显示日期时,隐藏时间选择器并让日期选择器铺满宽度
wheelStartTime.setVisibility(View.GONE);
wheelEndTime.setVisibility(View.GONE);
// 设置日期选择器铺满宽度
ViewGroup.LayoutParams startDateParams = wheelStartDate.getLayoutParams();
startDateParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
wheelStartDate.setLayoutParams(startDateParams);
ViewGroup.LayoutParams endDateParams = wheelEndDate.getLayoutParams();
endDateParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
wheelEndDate.setLayoutParams(endDateParams);
} else if (!showDate && showTime) {
// 只显示时间时,隐藏日期选择器并让时间选择器铺满宽度
wheelStartDate.setVisibility(View.GONE);
wheelStartTime.setVisibility(View.VISIBLE);
wheelEndDate.setVisibility(View.GONE);
wheelEndTime.setVisibility(View.VISIBLE);
// 设置时间选择器铺满宽度
ViewGroup.LayoutParams startTimeParams = wheelStartTime.getLayoutParams();
startTimeParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
wheelStartTime.setLayoutParams(startTimeParams);
ViewGroup.LayoutParams endTimeParams = wheelEndTime.getLayoutParams();
endTimeParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
wheelEndTime.setLayoutParams(endTimeParams);
}
// 默认设置当前时间
Calendar startCal = Calendar.getInstance();
wheelStartDate.init(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DAY_OF_MONTH));
wheelStartTime.init(startCal.get(Calendar.HOUR_OF_DAY), startCal.get(Calendar.MINUTE),startCal.get(Calendar.SECOND));
if (showDate) {
wheelStartDate.init(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DAY_OF_MONTH));
}
if (showTime) {
wheelStartTime.init(startCal.get(Calendar.HOUR_OF_DAY), startCal.get(Calendar.MINUTE), showSeconds ? startCal.get(Calendar.SECOND) : 0);
wheelStartTime.setShowSeconds(showSeconds);
}
// 设置默认结束时间略晚于开始时间
Calendar endCal = (Calendar) startCal.clone();
endCal.add(Calendar.HOUR, 1);
wheelEndDate.init(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DAY_OF_MONTH));
wheelEndTime.init(endCal.get(Calendar.HOUR_OF_DAY), endCal.get(Calendar.MINUTE),endCal.get(Calendar.SECOND));
if (showTime) {
endCal.add(Calendar.HOUR, 1);
} else {
endCal.add(Calendar.DAY_OF_MONTH, 1);
}
if (showDate) {
wheelEndDate.init(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DAY_OF_MONTH));
}
if (showTime) {
wheelEndTime.init(endCal.get(Calendar.HOUR_OF_DAY), endCal.get(Calendar.MINUTE), showSeconds ? endCal.get(Calendar.SECOND) : 0);
wheelEndTime.setShowSeconds(showSeconds);
}
// 取消按钮
view.findViewById(R.id.btn_cancel).setOnClickListener(v -> dismiss());
@@ -70,16 +181,36 @@ public class DoubleTimePickerBottomSheet extends BottomSheetDialogFragment {
// 确定按钮
view.findViewById(R.id.btn_sure).setOnClickListener(v -> {
Calendar start = Calendar.getInstance();
start.set(wheelStartDate.getYear(), wheelStartDate.getMonth(), wheelStartDate.getDay(),
wheelStartTime.getHour(), wheelStartTime.getMinute(), wheelStartTime.getSecond());
Calendar end = Calendar.getInstance();
end.set(wheelEndDate.getYear(), wheelEndDate.getMonth(), wheelEndDate.getDay(),
wheelEndTime.getHour(), wheelEndTime.getMinute(), wheelEndTime.getSecond());
if (end.getTime().before(start.getTime())) {
Toast.makeText(requireContext(), "结束时间不能早于开始时间", Toast.LENGTH_SHORT).show();
return;
if (showDate && showTime) {
// 显示日期和时间
start.set(wheelStartDate.getYear(), wheelStartDate.getMonth(), wheelStartDate.getDay(),
wheelStartTime.getHour(), wheelStartTime.getMinute(), wheelStartTime.getSecond());
end.set(wheelEndDate.getYear(), wheelEndDate.getMonth(), wheelEndDate.getDay(),
wheelEndTime.getHour(), wheelEndTime.getMinute(), wheelEndTime.getSecond());
} else if (showDate && !showTime) {
// 只显示日期
start.set(wheelStartDate.getYear(), wheelStartDate.getMonth(), wheelStartDate.getDay(),
0, 0, 0);
end.set(wheelEndDate.getYear(), wheelEndDate.getMonth(), wheelEndDate.getDay(),
23, 59, 59);
} else if (!showDate && showTime) {
// 只显示时间,使用当前日期
int currentYear = start.get(Calendar.YEAR);
int currentMonth = start.get(Calendar.MONTH);
int currentDay = start.get(Calendar.DAY_OF_MONTH);
start.set(currentYear, currentMonth, currentDay,
wheelStartTime.getHour(), wheelStartTime.getMinute(), wheelStartTime.getSecond());
end.set(currentYear, currentMonth, currentDay,
wheelEndTime.getHour(), wheelEndTime.getMinute(), wheelEndTime.getSecond());
}
if ((showDate && showTime) || (showDate && !showTime) ) {
if (end.getTime().before(start.getTime())) {
Toast.makeText(requireContext(), "结束时间不能早于开始时间", Toast.LENGTH_SHORT).show();
return;
}
}
if (listener != null) {

View File

@@ -8,6 +8,7 @@ import android.widget.NumberPicker;
public class WheelTimePicker extends LinearLayout {
private NumberPicker hourPicker, minutePicker, secondPicker;
private boolean showSeconds = true; // 默认显示秒
public WheelTimePicker(Context context) {
this(context, null);
@@ -33,6 +34,9 @@ public class WheelTimePicker extends LinearLayout {
addView(hourPicker);
addView(minutePicker);
addView(secondPicker);
// 根据showSeconds参数决定是否显示秒选择器
secondPicker.setVisibility(showSeconds ? VISIBLE : GONE);
// 设置小时范围
hourPicker.setMinValue(0);
@@ -64,4 +68,15 @@ public class WheelTimePicker extends LinearLayout {
public int getSecond() {
return secondPicker.getValue();
}
/**
* 设置是否显示秒
* @param showSeconds true显示秒false不显示秒
*/
public void setShowSeconds(boolean showSeconds) {
this.showSeconds = showSeconds;
if (secondPicker != null) {
secondPicker.setVisibility(showSeconds ? VISIBLE : GONE);
}
}
}

View File

@@ -216,7 +216,7 @@ public class RewardGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPr
mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), giftLabelBeans, fragmentList, ""));
mBinding.slidingTabLayout.setViewPager(mBinding.viewPager);
mBinding.slidingTabLayout.setCurrentTab(0);
refreshCurrentGiftFragment(giftLabelBeans.get(0).getId(), 2, "");
refreshCurrentGiftFragment(giftLabelBeans.get(0).getId(), 2, "5");
mBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@@ -226,7 +226,7 @@ public class RewardGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPr
@Override
public void onPageSelected(int position) {
// 当页面切换时,控制 tv_bb_qs 按钮的显示
refreshCurrentGiftFragment(giftLabelBeans.get(position).getId(), 2, "");
refreshCurrentGiftFragment(giftLabelBeans.get(position).getId(), 2, "5");
}
@Override
@@ -236,9 +236,9 @@ public class RewardGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPr
});
}
private void refreshCurrentGiftFragment(String id, int type, String roomId) {
private void refreshCurrentGiftFragment(String id, int status, String type) {
if (getCurrentGiftFragment() != null) {
getCurrentGiftFragment().loadDataIfNeeded(id, type, roomId);
getCurrentGiftFragment().loadDataIfNeeded(id, status, type);
}
}

View File

@@ -2,12 +2,16 @@ package com.xscm.modulemain.activity
import android.content.Intent
import android.view.View
import android.widget.CompoundButton
import androidx.recyclerview.widget.LinearLayoutManager
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.ToastUtils
import com.tencent.imsdk.v2.V2TIMCallback
import com.tencent.imsdk.v2.V2TIMConversation
import com.tencent.imsdk.v2.V2TIMGroupInfoResult
import com.tencent.imsdk.v2.V2TIMGroupManager
import com.tencent.imsdk.v2.V2TIMManager
import com.tencent.imsdk.v2.V2TIMMessage
import com.tencent.imsdk.v2.V2TIMValueCallback
import com.xscm.modulemain.BaseMvpActivity
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.msg.NewsContacts
@@ -19,6 +23,7 @@ import com.xscm.moduleutil.bean.GroupUserListBean
import com.xscm.moduleutil.bean.NewsMessageList
import com.xscm.moduleutil.utils.ImageUtils
/**
* @Author
* @Time 2026/1/2 14:57
@@ -31,7 +36,7 @@ class GroupChatSettingsActivity :
var groupAdapter: GroupAdapter? = GroupAdapter()
val v2TIMGroupManager: V2TIMGroupManager?= V2TIMManager.getGroupManager()
var groupId: String = ""
var isOwner : Boolean = false
var isOwner : Int = 0
var groupBean : GroupBean= GroupBean()
@@ -88,6 +93,45 @@ class GroupChatSettingsActivity :
})
}
mBinding?.switDoNotDisturb?.setOnCheckedChangeListener { compoundButton, b ->
V2TIMManager.getMessageManager().setGroupReceiveMessageOpt(
groupId,
if (b) V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE else V2TIMMessage.V2TIM_RECEIVE_MESSAGE,
object : V2TIMCallback {
override fun onSuccess() {
// 修改群消息接收选项成功
ToastUtils.showLong(if (b) "已开启消息免打扰" else "已关闭消息免打扰")
}
override fun onError(code: Int, desc: String?) {
// 修改群消息接收选项失败
ToastUtils.showLong("免打扰功能开启失败",code,desc)
}
})
}
val groupIDs: MutableList<String?> = ArrayList<String?>()
groupIDs.add(groupId)
V2TIMManager.getGroupManager().getGroupsInfo(
groupIDs,
object : V2TIMValueCallback<MutableList<V2TIMGroupInfoResult?>?> {
override fun onSuccess(t: MutableList<V2TIMGroupInfoResult?>?) {
if (t != null && !t.isEmpty()) {
val result = t[0]
if (result?.resultCode == 0) {
val groupInfo = result.groupInfo
mBinding?.switDoNotDisturb?.isChecked = groupInfo.recvOpt == V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE
}
}
}
override fun onError(code: Int, desc: String?) {
}
})
}
override fun getLayoutId(): Int {
@@ -111,18 +155,18 @@ class GroupChatSettingsActivity :
this.groupBean=groupBean
mBinding?.groupName?.text = groupBean.name
ImageUtils.loadHead(groupBean.guild_cover, mBinding?.imGroup)
if (groupBean.is_deacon == 1) {
isOwner=true
if (groupBean.is_deacon == 1 || groupBean.is_deacon == 2) {
mBinding?.llGroup?.visibility = View.VISIBLE
mBinding?.switJy?.isChecked = groupBean.mute_all_member == 1
mBinding?.etG?.isEnabled = true
mBinding?.evGroupName?.isEnabled = true
} else {
isOwner=false
}
else {
mBinding?.llGroup?.visibility = View.GONE
mBinding?.etG?.isEnabled = false
mBinding?.evGroupName?.isEnabled = false
}
isOwner=groupBean.is_deacon
mBinding?.etG?.text?.append(groupBean.notification)
mBinding?.evGroupName?.text?.append(groupBean.name)
@@ -143,4 +187,5 @@ class GroupChatSettingsActivity :
super.doDone()
groupId = intent.getStringExtra("groupId").toString()
}
}
}

View File

@@ -5,12 +5,14 @@ import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.ToastUtils
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
import com.tencent.imsdk.v2.V2TIMCallback
import com.tencent.imsdk.v2.V2TIMGroupManager
import com.tencent.imsdk.v2.V2TIMGroupMemberFullInfo
import com.tencent.imsdk.v2.V2TIMManager
import com.xscm.modulemain.BaseMvpActivity
import com.xscm.modulemain.R
@@ -37,7 +39,7 @@ class GroupUserListActivity : BaseMvpActivity<NewsPresenter, ActivityGroupUserLi
val v2TIMGroupManager: V2TIMGroupManager? = V2TIMManager.getGroupManager()
var groupId: String? = null
var isOwner: Boolean = false
var isOwner: Int = 0
var page: Int = 1
var search: String = ""
var groupUserBean: List<GroupBean.GroupUserBean> = ArrayList()
@@ -50,7 +52,7 @@ class GroupUserListActivity : BaseMvpActivity<NewsPresenter, ActivityGroupUserLi
override fun doDone() {
super.doDone()
groupId = intent.getStringExtra("groupId").toString()
isOwner = intent.getBooleanExtra("isOwner", false)
isOwner = intent.getIntExtra("isOwner", 0)
}
override fun initData() {
@@ -76,16 +78,46 @@ class GroupUserListActivity : BaseMvpActivity<NewsPresenter, ActivityGroupUserLi
item?.is_mute = 1
}
groupUserListAdapter.notifyDataSetChanged()
ToastUtils.showLong("操作成功")
}
override fun onError(code: Int, desc: String?) {
ToastUtils.showLong(desc)
LogUtils.e("禁言失败:$code $desc")
}
})
} else {
onCommentLongClick(item)
}
}
override fun onItemGroupMemberClick(
item: GroupBean.GroupUserBean?,
b: Boolean
) {
if (item?.group_role == 4){
ToastUtils.showLong("当前用户数据错误,请联系管理员")
return
}
v2TIMGroupManager?.setGroupMemberRole(
groupId,
"u" + item?.user_id.toString(),
if (b) V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_MEMBER else V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_ADMIN,
object : V2TIMCallback {
override fun onSuccess() {
if (b) {
item?.group_role = 2 //管理员
} else {
item?.group_role = 3 //普通成员
}
groupUserListAdapter.notifyDataSetChanged()
LogUtils.e("群成员设置角色成功")
}
override fun onError(code: Int, desc: String?) {
LogUtils.e("群成员设置角色失败:$code $desc")
}
})
}
})
mBinding.tvCancel.setOnClickListener { view ->
@@ -107,7 +139,7 @@ class GroupUserListActivity : BaseMvpActivity<NewsPresenter, ActivityGroupUserLi
}
})
if (isOwner) {
if (isOwner == 1 || isOwner == 2) {
mBinding.llSearch.visibility = View.VISIBLE
} else {
mBinding.llSearch.visibility = View.GONE
@@ -218,10 +250,11 @@ class GroupUserListActivity : BaseMvpActivity<NewsPresenter, ActivityGroupUserLi
item?.is_mute = 1
}
groupUserListAdapter.notifyDataSetChanged()
ToastUtils.showLong("操作成功")
}
override fun onError(code: Int, desc: String?) {
ToastUtils.showLong(desc)
LogUtils.e("muteGroupMember", "muteGroupMember code=$code desc=$desc")
}
})
}

View File

@@ -631,7 +631,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
mBinding!!.roomTop.root.isClickable = false
setView(mRoomInfoResp)
MvpPre?.getRoomOnline(roomId, "1", "10")
// MvpPre?.getRoomOnline(roomId, "1", "10")
}
private var bgEffectView: View? = null
@@ -3076,6 +3076,21 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
AgoraManager.getInstance().muteLocalAudioStream(false)
AgoraManager.getInstance().ClientRole(true)
CommonAppContext.getInstance().isMai = true
var userId : String =""
mRoomInfoResp?.room_info?.pit_list?.size?.let {
if (it < 9) {
return
}
userId = mRoomInfoResp?.room_info?.pit_list!![8].user_id
}
// 方案1使用安全调用和let操作符
mRoomInfoResp?.pk_info?.close_users?.let { users ->
if (users.contains(userId)) {
AgoraManagerEx.getInstance().muteLocalAudioStreamEx(true)
}
}
} else {
mBinding!!.ivMic.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone_off)
AgoraManager.getInstance()

View File

@@ -29,5 +29,7 @@ public class RoomSettingContacts {
void agreeSong(String roomId, String type);
void blindBoxStatus();
void setRoomBusinessTime(String roomId,String startTime,String endTime);
}
}

View File

@@ -25,6 +25,8 @@ public class SingSongContacts {
void userOnlineStatus(List<UserOnlineStatusBean> list);
void postAgora(PkSwTokenBean pkSwTokenBean);
void closePkMic();
}
public interface IEmotionRoomPre extends IPresenter {
@@ -39,5 +41,7 @@ public class SingSongContacts {
void endPk(String pk_id,String type,String user_id);
void userOnlineStatus(String userId, String roomid);
void closePkMic(String pk_id,String type,String user_id);
}
}

View File

@@ -281,12 +281,12 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
}
}
if (userIds.length() > 0 && roomId != null) {
if (MvpPre == null) {
MvpPre = new FriendshipRoomPresenter(this, getActivity());
}
MvpPre.userOnlineStatus(userIds.toString(), roomId);
}
// if (userIds.length() > 0 && roomId != null) {
// if (MvpPre == null) {
// MvpPre = new FriendshipRoomPresenter(this, getActivity());
// }
// MvpPre.userOnlineStatus(userIds.toString(), roomId);
// }
}
/**

View File

@@ -286,9 +286,9 @@ public class RoomAuctionFragment extends BaseMvpFragment<RoomAuctionPresenterTow
userIds.append(auctionUserBean.getUser_id());
}
if (userIds.length() > 0 && roomInfoResp.getRoom_info().getRoom_id() != null) {
MvpPre.userOnlineStatus(userIds.toString(), roomInfoResp.getRoom_info().getRoom_id());
}
// if (userIds.length() > 0 && roomInfoResp.getRoom_info().getRoom_id() != null) {
// MvpPre.userOnlineStatus(userIds.toString(), roomInfoResp.getRoom_info().getRoom_id());
// }
}
@Override

View File

@@ -267,9 +267,9 @@ public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoom
userIds.append(roomPitBean.getUser_id());
}
if (userIds.length() > 0 && roomInfoResp.getRoom_info().getRoom_id() != null) {
MvpPre.userOnlineStatus(userIds.toString(), roomInfoResp.getRoom_info().getRoom_id());
}
// if (userIds.length() > 0 && roomInfoResp.getRoom_info().getRoom_id() != null) {
// MvpPre.userOnlineStatus(userIds.toString(), roomInfoResp.getRoom_info().getRoom_id());
// }
}

View File

@@ -191,6 +191,7 @@ class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
if (mRoomInfoResp?.sign_info?.sign_id != "-1") {
mSignId = mRoomInfoResp?.sign_info?.sign_id
LogUtils.e("初始的时候mSignId = $mSignId")
if (mRoomInfoResp?.sign_info?.sign_status == 1) {
startTimer(mRoomInfoResp?.sign_info?.end_time!!)
if (mUserInfo?.user_id?.toString().equals(mSignPitBean?.user_id)) {
@@ -396,6 +397,7 @@ class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
mBinding.ivApplyForMai.isClickable = true
mSignId = messageEvent?.text?.sign_id
LogUtils.e("场次开始的时候mSignId = $mSignId")
val endTime = messageEvent?.text?.end_time
val signDay = messageEvent?.text?.sign_day
val currBodyValue = messageEvent?.text?.current_body_value
@@ -423,6 +425,7 @@ class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
fun event1091(messageEvent: RoomMessageEvent?) {
val fromUserInfo = messageEvent?.text?.fromUserInfo
val signId = messageEvent?.text?.sign_id
LogUtils.e("出价后的场次mSignId = $mSignId")
if (fromUserInfo != null && mSignId == signId) {
val pitBean = RoomPitBean()
pitBean.pit_number = indexList[2]

View File

@@ -129,7 +129,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
this.roomInfoResp = roomInfoResp;
}
public void upRoomInfo(RoomInfoResp roomInfoResp){
public void upRoomInfo(RoomInfoResp roomInfoResp) {
this.roomInfoResp = roomInfoResp;
upDataView();
}
@@ -158,7 +158,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
@Override
public void onMeilingClick(@NonNull RoomSingSongWheatView view, int pitNumber) {
if (ClickUtils.isFastDoubleClick(view)){
if (ClickUtils.isFastDoubleClick(view)) {
return;
}
if (view.pitBean != null && !view.pitBean.getUser_id().isEmpty() && !view.pitBean.getUser_id().equals("0")) {
@@ -174,7 +174,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
@Override
public void onWheatClick(@NonNull RoomSingSongWheatView view, int pitNumber1) {
if (ClickUtils.isFastDoubleClick(view)){
if (ClickUtils.isFastDoubleClick(view)) {
return;
}
@@ -188,16 +188,16 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
pitNumber = pitBean.getPit_number();
roomPitBean = pitBean;
// showPopupMenu(view); // v 是点击的按钮视图
if(getActivity() != null && getActivity() instanceof RoomActivity) {
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
} else if (pitNumber1 == 10) {
if (getActivity() != null && getActivity() instanceof RoomActivity){
if (getActivity() != null && ((RoomActivity) getActivity()).getHostUser() < 4){
if (getActivity() != null && getActivity() instanceof RoomActivity) {
if (getActivity() != null && ((RoomActivity) getActivity()).getHostUser() < 4) {
if (!isFastDoubleClick("online_dialog", pitNumber1 + "")) {
((RoomActivity)getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}else {
} else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
}
}
@@ -346,7 +346,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
tvHugMic.setOnClickListener(v -> {
// 处理抱麦逻辑
if(getActivity() != null && getActivity() instanceof RoomActivity) {
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
popupWindow.dismiss();
@@ -416,7 +416,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
if (MvpPre == null) {
MvpPre = new SingSongPresenter(this, getContext());
}
MvpPre.userOnlineStatus(userIds.toString(), roomId);
// MvpPre.userOnlineStatus(userIds.toString(), roomId);
}
}
@@ -576,35 +576,8 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
} else {
MvpPre.endPk(roomInfoRespPk.getPk_info().getPk_id(), "3", SpUtil.getUserId() + "");
}
} else if (id == R.id.im_mkf) {
if (pkMicIsOn) {
mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone);
is_mute = 0;
pkMicIsOn = false;
AgoraManagerEx.getInstance().muteAllRemoteAudioStreamsEx(false);
} else {
mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone_off);
is_mute = 1;
pkMicIsOn = true;
AgoraManagerEx.getInstance().muteAllRemoteAudioStreamsEx(true);
}
RoomMessageEvent.text text = new RoomMessageEvent.text();
text.setIs_mute(is_mute);
String s = com.blankj.utilcode.util.GsonUtils.toJson(text);
RoomMessageEvent.T t = new RoomMessageEvent.T();
t.setText(s);
if (roomInfoRespPk != null && roomInfoRespPk.getPk_info() != null) {
RoomMessageEvent roomMessageEvent = new RoomMessageEvent(125, roomInfoResp.getRoom_info().getRoom_id(), t);
String json = com.blankj.utilcode.util.GsonUtils.toJson(roomMessageEvent);
// 转换为 byte[]
byte[] binaryData = json.getBytes(StandardCharsets.UTF_8);
// 创建自定义消息
MessageListenerSingleton.getInstance().sendCustomC2CMessage125(
roomInfoRespPk.getRoom_info().getPit_list().get(8).getUser_id(),
binaryData
);
}
} else if (id == R.id.im_mkf) {//关闭、打开对方麦克风
MvpPre.closePkMic(roomInfoRespPk.getPk_info().getPk_id(), pkMicIsOn ? "2" : "1", roomInfoRespPk.getRoom_info().getPit_list().get(8).getUser_id() + "");
}
}
@@ -693,6 +666,37 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
.joinChannelEx(pkSwTokenBean.getAgora_token(), roomInfoRespPk.getRoom_info().getRoom_id(), pkUserId);
}
@Override
public void closePkMic() {
if (pkMicIsOn) {
mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone);
is_mute = 0;
pkMicIsOn = false;
AgoraManagerEx.getInstance().muteAllRemoteAudioStreamsEx(false);
} else {
mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone_off);
is_mute = 1;
pkMicIsOn = true;
AgoraManagerEx.getInstance().muteAllRemoteAudioStreamsEx(true);
}
RoomMessageEvent.text text = new RoomMessageEvent.text();
text.setIs_mute(is_mute);
String s = com.blankj.utilcode.util.GsonUtils.toJson(text);
RoomMessageEvent.T t = new RoomMessageEvent.T();
t.setText(s);
if (roomInfoRespPk != null && roomInfoRespPk.getPk_info() != null) {
RoomMessageEvent roomMessageEvent = new RoomMessageEvent(125, roomInfoResp.getRoom_info().getRoom_id(), t);
String json = com.blankj.utilcode.util.GsonUtils.toJson(roomMessageEvent);
// 转换为 byte[]
byte[] binaryData = json.getBytes(StandardCharsets.UTF_8);
// 创建自定义消息
MessageListenerSingleton.getInstance().sendCustomC2CMessage125(
roomInfoRespPk.getRoom_info().getPit_list().get(8).getUser_id(),
binaryData
);
}
}
private void pkView() {
flexboxLayout.setVisibility(View.GONE);
mBinding.cl.setVisibility(VISIBLE);
@@ -720,7 +724,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
pitNumber = pitBean.getPit_number();
roomPitBean = pitBean;
// showPopupMenu(view); // v 是点击的按钮视图
if(getActivity() != null && getActivity() instanceof RoomActivity) {
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
} else if (pitNumber1 == 10) {
@@ -763,6 +767,22 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
mBinding.imMkf.setVisibility(GONE);
} else {
mBinding.imMkf.setVisibility(VISIBLE);
if (roomInfoResp.getPk_info()!=null && roomInfoResp.getPk_info().getClose_users()!=null) {
if (roomInfoResp.getPk_info().getClose_users().contains(roomInfoResp.getRoom_info().getPit_list().get(8).getUser_id())) {
is_mute = 1;
pkMicIsOn = true;
AgoraManagerEx.getInstance().muteAllRemoteAudioStreamsEx(true);
} else {
is_mute = 0;
pkMicIsOn = false;
AgoraManagerEx.getInstance().muteAllRemoteAudioStreamsEx(false);
}
if (roomInfoResp.getPk_info().getClose_users().contains(roomInfoRespPk.getRoom_info().getPit_list().get(8).getUser_id())) {
mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone_off);
} else {
mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone);
}
}
}
}
FlexboxLayout flexboxLayout2 = mBinding.flexboxLayout2;
@@ -794,7 +814,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
pitNumber = pitBean.getPit_number();
roomPitBean = pitBean;
// showPopupMenu(view); // v 是点击的按钮视图
if(getActivity() != null && getActivity() instanceof RoomActivity) {
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
} else if (pitNumber1 == 10) {
@@ -926,7 +946,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
countDownTime(Long.parseLong(roomInfoRespPk.getPk_info().getPk_end_times() != null ? roomInfoRespPk.getPk_info().getPk_end_times() : "0"), 2);
}
mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone);
// mBinding.imMkf.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone);
}
@@ -1028,13 +1048,13 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
public void event1021(RoomMessageEvent message) {
if (roomInfoRespPk != null && roomInfoRespPk.getPk_info() != null) {
for (RoomPitBean pitBean : roomInfoResp.getRoom_info().getPit_list()){
for (RoomPitBean pitBean : roomInfoResp.getRoom_info().getPit_list()) {
pitBean.setCharm("0");
if (pitBean.getUser_id()!=null && !pitBean.getUser_id().isEmpty() && !pitBean.getUser_id().equals("0")) {
if (pitBean.getUser_id() != null && !pitBean.getUser_id().isEmpty() && !pitBean.getUser_id().equals("0")) {
wheatLayoutManager1.updateSingleCharm(pitBean, Integer.parseInt(pitBean.getPit_number()), 1);
}
}
}else {
} else {
for (RoomPitBean pitBean : roomInfoResp.getRoom_info().getPit_list()) {
pitBean.setCharm("0");
wheatLayoutSingManager.updateSingleWheat(pitBean, Integer.parseInt(pitBean.getPit_number()));
@@ -1104,13 +1124,13 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
/// 推送的下麦1003
public void event1003(RoomMessageEvent message) {
int pitNumber = Integer.parseInt(message.getText().getPit_number()) ;
RoomPitBean pitBean = roomInfoResp.getRoom_info().getPit_list().get(pitNumber- 1);
int pitNumber = Integer.parseInt(message.getText().getPit_number());
RoomPitBean pitBean = roomInfoResp.getRoom_info().getPit_list().get(pitNumber - 1);
if (roomInfoRespPk == null || roomInfoRespPk.getPk_info() == null) {
wheatLayoutSingManager.updateSingleWheat(pitBean, pitNumber);
} else {
if (message.getText().getIs_pk() == null) {
wheatLayoutManager1.updateSingleWheat(pitBean,pitNumber, 1);
wheatLayoutManager1.updateSingleWheat(pitBean, pitNumber, 1);
} else {
wheatLayoutManager2.updateSingleWheat(pitBean, pitNumber, 2);
}
@@ -1123,8 +1143,8 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
/// 1004
public void event1004(RoomMessageEvent message) {
int pitNumber = Integer.parseInt(message.getText().getPit_number()) ;
RoomPitBean pitBean = roomInfoResp.getRoom_info().getPit_list().get(pitNumber- 1);
int pitNumber = Integer.parseInt(message.getText().getPit_number());
RoomPitBean pitBean = roomInfoResp.getRoom_info().getPit_list().get(pitNumber - 1);
if (roomInfoRespPk == null || roomInfoRespPk.getPk_info() == null) {
wheatLayoutSingManager.updateSingleWheat(pitBean, pitNumber);
} else {

View File

@@ -113,4 +113,19 @@ public class RoomSettingPresenter extends BasePresenter<RoomSettingContacts.View
});
}
@Override
public void setRoomBusinessTime(String roomId, String startTime, String endTime) {
api.setRoomBusinessTime(roomId, startTime, endTime, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
}
});
}
}

View File

@@ -160,6 +160,24 @@ public class SingSongPresenter extends BaseRoomPresenter<SingSongContacts.View>
});
}
@Override
public void closePkMic(String pk_id, String type, String user_id) {
RetrofitClient.getInstance().closePkMic(pk_id, type, user_id, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
if (MvpRef==null)
MvpRef=new WeakReference<>(mView);
MvpRef.get().closePkMic();
}
});
}
public void postRoomSwToken(String roomId,int uid,int invite_pk_user_id) {
RetrofitClient.getInstance().postRoomSwToken(roomId, new BaseObserver<PkSwTokenBean>() {
@Override

View File

@@ -1,6 +1,10 @@
package com.xscm.modulemain.activity.user.activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -10,12 +14,19 @@ import android.text.TextWatcher;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.luck.picture.lib.engine.CropFileEngine;
import com.xscm.modulemain.R;
import com.xscm.modulemain.databinding.ActivityCreatedRoomBinding;
import com.example.zhouwei.library.CustomPopWindow;
@@ -34,8 +45,12 @@ import com.xscm.moduleutil.utils.GlideEngine;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.PermissionDescriptionHelper;
import com.xscm.moduleutil.widget.Constants;
import com.xscm.moduleutil.widget.picker.PictureSelectorUtil;
import com.yalantis.ucrop.UCrop;
import com.yalantis.ucrop.UCropImageEngine;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
@@ -256,17 +271,65 @@ public class CreatedRoomActivity extends BaseMvpActivity<CreatedRoomPresenter, A
// .setPictureStyle(MyPictureParameterStyle.Companion.selectPicture())
// .forResult(requestCode); //结果回调onActivityResult code
// TODO: 2026/1/20 不带裁剪的方法
// PictureSelector.create(this)
// .openGallery(mimeType)
// .isGif(false)
// .setImageEngine(GlideEngine.createGlideEngine())
// .setPermissionDescriptionListener(PermissionDescriptionHelper.createListener())
// .setMaxSelectNum(1)
// .isPreviewImage(true)
// .isDisplayCamera(false)
// .setOutputCameraDir(Constants.FILE_PATH)
// .isOriginalSkipCompress(true)
// .forResult(requestCode); //结果回调onActivityResult code
PictureSelectorUtil pictureSelectorUtil = new PictureSelectorUtil();
PictureSelector.create(this)
.openGallery(mimeType)
.isGif(false)
.setImageEngine(GlideEngine.createGlideEngine())
.setPermissionDescriptionListener(PermissionDescriptionHelper.createListener())
.setMaxSelectNum(1)
.isPreviewImage(true)
.isPreviewImage(false)
.isDisplayCamera(false)
.setOutputCameraDir(Constants.FILE_PATH)
.isOriginalSkipCompress(true)
.forResult(requestCode); //结果回调onActivityResult code
.setImageEngine(GlideEngine.createGlideEngine()) // 选择器展示不出图片则添加
.setPermissionDescriptionListener(PermissionDescriptionHelper.createListener())
.setCropEngine(new CropFileEngine() {
@Override
public void onStartCrop(Fragment fragment, Uri srcUri, Uri destinationUri, ArrayList<String> dataSource, int requestCode) {
UCrop.Options options = pictureSelectorUtil.buildOptions();
UCrop uCrop = UCrop.of(srcUri, destinationUri, dataSource);
uCrop.withOptions(options);
uCrop.setImageEngine(new UCropImageEngine() {
@Override
public void loadImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).override(180, 180).into(imageView);
}
@Override
public void loadImage(Context context, Uri url, int maxWidth, int maxHeight, OnCallbackListener<Bitmap> call) {
Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight).into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @org.jetbrains.annotations.Nullable Transition<? super Bitmap> transition) {
if (call != null) {
call.onCall(resource);
}
}
@Override
public void onLoadCleared(@org.jetbrains.annotations.Nullable Drawable placeholder) {
if (call != null) {
call.onCall(null);
}
}
});
}
});
uCrop.start(fragment.requireActivity(), fragment, requestCode);
}
})
.forResult(requestCode);
}

View File

@@ -70,6 +70,7 @@ public class RoomDetailsActivity extends BaseMvpActivity<RoomDetailsPresenter, A
MvpPre.getCharmList(roomId, stime, etime, currentPage + "", type);
});
dialog.setShowTime(false);
dialog.show(getSupportFragmentManager(), "DoubleTimePicker");
});
}

View File

@@ -35,6 +35,7 @@ import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.dialog.RealNameDialog;
import com.xscm.moduleutil.rtc.AgoraManager;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.SpUtil;
@@ -98,6 +99,7 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
mBinding.llQh.setVisibility(View.VISIBLE);
}
mBinding.switQh.setChecked(SpUtil.getTaskService()==1);
mBinding.switSk.setChecked(SpUtil.getSkService()==1);
}
@Override
@@ -124,6 +126,7 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
mBinding.tvShare.setOnClickListener(this::onClick);
mBinding.llSendLog.setOnClickListener(this::onClick);
mBinding.switQh.setOnClickListener(this::onClick);
mBinding.switSk.setOnClickListener(this::onClick);
}
@SuppressLint("CheckResult")
@@ -309,7 +312,15 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
}
// MvpPre.clearLoginInfo();
}else if (id == R.id.swit_sk){
if (mBinding.switSk.isChecked()) {
SpUtil.setSkService(1);
} else {
SpUtil.setSkService(0);
}
AgoraManager.getInstance().setEnable();
}
// 通过 ID 获取资源名称
String viewName = "";
try {

View File

@@ -73,7 +73,7 @@ class TotalRevenueActivity : BaseMvpActivity<UserFamilyPresenter, ActivityTotalR
)
})
val fragmentManager = supportFragmentManager
dialog.setShowTime(false)
dialog.show(fragmentManager, "DoubleTimePickerBottomSheet")
})

View File

@@ -11,9 +11,14 @@ import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.PageViewModel;
import com.xscm.modulemain.activity.user.conacts.GiftWallConacts;
import com.xscm.modulemain.activity.user.presenter.GiftWallPresenter;
import com.xscm.modulemain.adapter.GiftWallAdapter;
import com.xscm.modulemain.databinding.DialogPlaceholderBinding;
import com.xscm.modulemain.databinding.FragmentGiftWallBinding;
import com.xscm.moduleutil.base.BaseMvpDialogFragment;
import com.xscm.moduleutil.bean.GiftUserWallBean;
import org.jetbrains.annotations.NotNull;
@@ -22,16 +27,14 @@ import java.util.ArrayList;
import java.util.List;
/**
* A placeholder fragment containing a simple view.
*/
public class PlaceholderFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
* @Author qx
* @Time 2026/1/20 9:53
* @Description 礼物墙展示用户送礼的dialog
*/
public class PlaceholderFragment extends BaseMvpDialogFragment<GiftWallPresenter, DialogPlaceholderBinding> implements GiftWallConacts.View{
private PageViewModel pageViewModel;
private FragmentGiftWallBinding binding;
private GiftWallAdapter mGiftWallAdapter;
public static PlaceholderFragment newInstance(int index) {
PlaceholderFragment fragment = new PlaceholderFragment();
@@ -47,7 +50,6 @@ public class PlaceholderFragment extends Fragment {
pageViewModel = new ViewModelProvider(this).get(PageViewModel.class);
int index = 1;
if (getArguments() != null) {
index = getArguments().getInt(ARG_SECTION_NUMBER);
// 获取传递的礼物列表数据
List<GiftUserWallBean.GiftWallBean> giftList =
@@ -64,37 +66,37 @@ public class PlaceholderFragment extends Fragment {
}
pageViewModel.setIndex(index);
mGiftWallAdapter= new GiftWallAdapter(new ArrayList<>());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
protected GiftWallPresenter bindPresenter() {
return new GiftWallPresenter(this,getActivity());
}
@Override
protected void initData() {
}
@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
protected void initView() {
binding = FragmentGiftWallBinding.inflate(inflater, container, false);
View root = binding.getRoot();
// 设置 GridView
GridView gridView = binding.gridView;
gridView.setAdapter(mGiftWallAdapter);
// 观察数据变化并更新 GridView
pageViewModel.getDataList().observe(getViewLifecycleOwner(), dataList -> {
if (dataList != null) {
mGiftWallAdapter.updateData(dataList);
}
});
return root;
}
@Override
protected int getLayoutId() {
return R.layout.dialog_placeholder;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
@Override
public void setGiftWall(GiftUserWallBean data) {
}
}

View File

@@ -22,8 +22,10 @@ import java.util.ArrayList;
import java.util.List;
/**
* A placeholder fragment containing a simple view.
*/
* @Author qx
* @Time 2026/1/20 9:53
* @Description 礼物墙展示的fragment
*/
public class PlaceholderGiftFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
@@ -65,6 +67,14 @@ public class PlaceholderGiftFragment extends Fragment {
pageViewModel.setIndex(index);
mGiftWallAdapter= new GiftWallAdapter(new ArrayList<>());
mGiftWallAdapter.setOnUserClickListener(new GiftWallAdapter.OnUserClickListener() {
@Override
public void onUserClick(GiftUserWallBean.GiftWallBean emotion) {
}
});
}
@Override

View File

@@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.xscm.modulemain.R;
import com.xscm.moduleutil.bean.CombinedGiftBean;
import com.xscm.moduleutil.bean.GiftUserWallBean;
import com.xscm.moduleutil.bean.room.EmotionDeatils;
import com.xscm.moduleutil.utils.ImageLoader;
import com.xscm.moduleutil.utils.ImageUtils;
@@ -28,6 +29,17 @@ import java.util.List;
public class GiftWallAdapter extends BaseAdapter {
private List<GiftUserWallBean.GiftWallBean> mDataList;
private OnUserClickListener mOnUserClickListener;
// 定义接口
public interface OnUserClickListener {
void onUserClick(GiftUserWallBean.GiftWallBean emotion);
}
// 转换后的 Java 代码
public void setOnUserClickListener(OnUserClickListener listener) {
this.mOnUserClickListener= listener;
}
public GiftWallAdapter(List<GiftUserWallBean.GiftWallBean> dataList) {
this.mDataList = dataList;
}
@@ -77,6 +89,18 @@ public class GiftWallAdapter extends BaseAdapter {
holder.textView.setText(item.getGift_name());
// ImageUtils.loadHeadCC(item.getBase_image(), holder.iv_gift_image);
holder.tv_price33.setText(item.getGift_price());
// 为整个礼物项添加点击事件
holder.cl_gift_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (item.is_liang()) {
if (mOnUserClickListener != null) {
mOnUserClickListener.onUserClick(item);
}
}
}
});
TextView tv_number = holder.gift_num;
@@ -113,8 +137,8 @@ public class GiftWallAdapter extends BaseAdapter {
TopUsersAdapter topUsersAdapter = new TopUsersAdapter(displayUsers);
recyclerView.setAdapter(topUsersAdapter);
holder.tv_gift_values.setText("" + item.getTop_users().size() + "");
}
}
} else {

View File

@@ -1,25 +1,25 @@
package com.xscm.modulemain.adapter
import android.graphics.Color
import android.widget.TextView
import android.app.AlertDialog
import android.content.DialogInterface
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.xscm.modulemain.R
import com.xscm.moduleutil.bean.BlackUserBean
import com.xscm.moduleutil.bean.GroupBean
import com.xscm.moduleutil.color.ThemeableDrawableUtils
import com.xscm.moduleutil.utils.MeHeadView
/**
* 项目名称:羽声语音
* 时间2026/1/3 14:17
* 用途:
* 用途:群成员列表 长按根据角色不同展示不同的权限
*/
class GroupUserListAdapter : BaseQuickAdapter<GroupBean.GroupUserBean, BaseViewHolder>(R.layout.item_group_user) {
class GroupUserListAdapter :
BaseQuickAdapter<GroupBean.GroupUserBean, BaseViewHolder>(R.layout.item_group_user) {
interface OnItemClickListener {
fun onItemClick(ismute: Int, item: GroupBean.GroupUserBean?)
}
fun onItemGroupMemberClick(item: GroupBean.GroupUserBean?, b: Boolean)
}
private var onItemClickListener: OnItemClickListener? = null
@@ -27,11 +27,12 @@ class GroupUserListAdapter : BaseQuickAdapter<GroupBean.GroupUserBean, BaseViewH
fun setOnItemClickListener(listener: OnItemClickListener?) {
this.onItemClickListener = listener
}
var isOwner = false
var isOwner = 0
var ismute: Int = 0
// 在适配器中添加设置方法
fun updateOwnerStatus(isOwner: Boolean) {
fun updateOwnerStatus(isOwner: Int) {
this.isOwner = isOwner
notifyDataSetChanged() // 如果需要刷新视图
}
@@ -41,31 +42,65 @@ class GroupUserListAdapter : BaseQuickAdapter<GroupBean.GroupUserBean, BaseViewH
helper: BaseViewHolder,
item: GroupBean.GroupUserBean?
) {
helper.getView<MeHeadView>(R.id.im_user).setData(item?.avatar, "","")
helper.getView<MeHeadView>(R.id.im_user).setData(item?.avatar, "", "")
helper.setText(R.id.tv_nick_name, item?.nickname)
if (isOwner == 1 || isOwner == 2) {
helper.setVisible(R.id.im_g, false)
// ThemeableDrawableUtils.setThemeableRoundedBackground(
// helper.getView<TextView>(R.id.im_g),
// Color.parseColor("#333333"),
// 34
// )
// helper.getView<TextView>(R.id.im_g).setTextColor(Color.WHITE)
// if (item?.is_mute == 1) {
// helper.getView<TextView>(R.id.im_g).text = "解禁"
// ismute = 1
// } else {
// helper.getView<TextView>(R.id.im_g).text = "禁言"
// ismute = 0
// }
// helper.getView<TextView>(R.id.im_g).setOnClickListener {
// if (onItemClickListener != null) {
// onItemClickListener?.onItemClick(ismute, item)
// }
// }
if (isOwner){
helper.setVisible(R.id.im_g, true)
ThemeableDrawableUtils.setThemeableRoundedBackground(
helper.getView<TextView>(R.id.im_g),
Color.parseColor("#333333"),
34
)
helper.getView<TextView>(R.id.im_g).setTextColor(Color.WHITE)
if (item?.is_mute==1){
helper.getView<TextView>(R.id.im_g).text = "解禁"
ismute=1
}else{
helper.getView<TextView>(R.id.im_g).text = "禁言"
ismute=0
helper.itemView.setOnLongClickListener {
showOptionsDialog(
item?.is_mute!!,
item,
if (item.group_role == 2) true else false
)
return@setOnLongClickListener true
}
helper.getView<TextView>(R.id.im_g).setOnClickListener {
if (onItemClickListener != null) {
onItemClickListener?.onItemClick(ismute,item)
}
}
}else{
} else {
helper.setVisible(R.id.im_g, false)
}
}
/**
* 显示选项对话框
*/
private fun showOptionsDialog(ismute: Int, item: GroupBean.GroupUserBean?, b: Boolean) {
val options = arrayOf<String?>(
if (ismute == 1) "解禁" else "禁言",
if (b) "设置成普通成员" else "设置成管理员"
)
if (isOwner != 1){
options[1] = ""
}
val builder = AlertDialog.Builder(mContext)
builder.setTitle("选择操作")
.setItems(
options,
DialogInterface.OnClickListener { dialog: DialogInterface?, which: Int ->
when (which) {
0 -> onItemClickListener?.onItemClick(ismute, item)
1 -> onItemClickListener?.onItemGroupMemberClick(item, b)
}
})
.show()
}
}

View File

@@ -19,7 +19,7 @@ public class HorizontalListAdapter extends RecyclerView.Adapter<HorizontalListAd
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(int itemPos,RoomSettingBean item,HorizontalListAdapter itemAdapter);
void onItemClick(int itemPos, RoomSettingBean item, HorizontalListAdapter itemAdapter);
}
public HorizontalListAdapter(List<RoomSettingBean> data) {
@@ -43,7 +43,7 @@ public class HorizontalListAdapter extends RecyclerView.Adapter<HorizontalListAd
super.onBindViewHolder(holder, position, payloads);
if (payloads.isEmpty()) {
for (Object payload : payloads) {
if(((Integer)payload) == 1){
if (((Integer) payload) == 1) {
RoomSettingBean item = mData.get(position);
if (item.isStatus()) {
holder.tvName.setText(getName(item.getType(), item.isSelect(), item.getName()));
@@ -63,7 +63,7 @@ public class HorizontalListAdapter extends RecyclerView.Adapter<HorizontalListAd
}
holder.itemView.setOnClickListener(v -> {
if (mListener != null) {
mListener.onItemClick(position,item,HorizontalListAdapter.this);
mListener.onItemClick(position, item, HorizontalListAdapter.this);
}
});
}
@@ -135,6 +135,9 @@ public class HorizontalListAdapter extends RecyclerView.Adapter<HorizontalListAd
return com.xscm.moduleutil.R.mipmap.ic_bg_music;
case RoomSettingBean.QXRoomSettingTypeRoomBgImage:
return com.xscm.moduleutil.R.mipmap.ic_bg_image;
case RoomSettingBean.QXRoomSettingTypeRoomBusinessTime: // 营业时间
return com.xscm.moduleutil.R.mipmap.icon_room_time;
// 更多操作
case RoomSettingBean.QXRoomSettingTypeRoomShare:
return com.xscm.moduleutil.R.mipmap.ic_share;

View File

@@ -120,7 +120,6 @@ public class PkTimeDialogFragment extends BaseMvpDialogFragment<PkTimePresenter,
public static List<RoomAutionTimeBean> getDefaultTimeOptions() {
List<RoomAutionTimeBean> list = new ArrayList<>();
list.add(new RoomAutionTimeBean(1));
list.add(new RoomAutionTimeBean(5));
list.add(new RoomAutionTimeBean(10));
list.add(new RoomAutionTimeBean(15));

View File

@@ -130,7 +130,7 @@ public class RoomConcernDialogFragment extends BaseMvpDialogFragment<RoomClosePr
@Override
public void initData() {
MvpPre.roomRelationList("2");
MvpPre.roomRelationList("3");
// MvpPre.getConcernList();
}

View File

@@ -775,7 +775,7 @@ public class RoomGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPres
mBinding.viewPager.setOffscreenPageLimit(0);
mBinding.slidingTabLayout.setViewPager(mBinding.viewPager);
mBinding.slidingTabLayout.setCurrentTab(1);
refreshCurrentGiftFragment(giftLabelBeans.get(1).getId(), 1, roomId);
refreshCurrentGiftFragment(giftLabelBeans.get(1).getId(), 1, "1");
mBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@@ -786,7 +786,7 @@ public class RoomGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPres
public void onPageSelected(int position) {
// 当页面切换时,控制 tv_bb_qs 按钮的显示
updateTvBbQsVisibility(position);
refreshCurrentGiftFragment(giftLabelBeans.get(position).getId(), 1, roomId);
refreshCurrentGiftFragment(giftLabelBeans.get(position).getId(), 1, "1");
}
@Override
@@ -799,9 +799,9 @@ public class RoomGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPres
}
// 调用示例
private void refreshCurrentGiftFragment(String id, int type, String roomId) {
private void refreshCurrentGiftFragment(String id, int status, String type) {
if (getCurrentGiftFragment() != null) {
getCurrentGiftFragment().loadDataIfNeeded(id, type, roomId);
getCurrentGiftFragment().loadDataIfNeeded(id, status, type);
}
}

View File

@@ -1,5 +1,6 @@
package com.xscm.modulemain.dialog;
import static com.xscm.moduleutil.bean.room.RoomSettingBean.QXRoomSettingTypeRoomBusinessTime;
import static com.xscm.moduleutil.bean.room.RoomSettingBean.QXRoomSettingTypeRoomOrderMic;
import static com.xscm.moduleutil.bean.room.RoomSettingBean.QXRoomSettingTypeRoomTimeRedSound;
import static com.xscm.moduleutil.bean.room.RoomSettingBean.QXRoomSettingTypeRoomTimeSpace;
@@ -44,14 +45,18 @@ import com.xscm.moduleutil.bean.room.RoomInfoResp;
import com.xscm.moduleutil.bean.room.RoomSettingBean;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.widget.DoubleTimePickerBottomSheet;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
/**
@@ -174,6 +179,7 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
toolsChildren.add(new RoomSettingBean("排麦模式", "ic_order_mic", null, null, QXRoomSettingTypeRoomOrderMic, read, isSelected, false, roomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1")));
toolsChildren.add(new RoomSettingBean("背景音乐", "ic_bg_music", null, null, RoomSettingBean.QXRoomSettingTypeRoomBgMusic, read, isSelected, false, false));
toolsChildren.add(new RoomSettingBean("背景图片", "ic_bg_image", null, null, RoomSettingBean.QXRoomSettingTypeRoomBgImage, read, isSelected, false, false));
toolsChildren.add(new RoomSettingBean("营业时间", "ic_bg_image", null, null, QXRoomSettingTypeRoomBusinessTime, read, isSelected, false, false));
toolsParent.setChildren(toolsChildren);
parentList.add(toolsParent);
@@ -397,10 +403,9 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
// }
else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeSIGNCONTRACT) {
queren("10");
}else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypePUBROOM) {
} else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypePUBROOM) {
queren("11");
}
else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomSetting) {
} else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomSetting) {
if (roomInfoResp != null) {
ARouter.getInstance().build(ARouteConstants.CREATED_ROOM).withSerializable("roomInfoResp", roomInfoResp).navigation();
} else {
@@ -486,6 +491,36 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
bean.setSelect(true);
}
itemAdapter.notifyItemChanged(itemPos);
} else if (bean.getType() == QXRoomSettingTypeRoomBusinessTime) {//营业时间
DoubleTimePickerBottomSheet dialog = new DoubleTimePickerBottomSheet();
dialog.setOnTimeRangeSelectedListener((startDate, endDate) -> {
// 处理选择的时间范围
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
// 获取开始时间的Calendar实例
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
// 将秒设置为00
startCalendar.set(Calendar.SECOND, 0);
// 获取结束时间的Calendar实例
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endDate);
// 将秒设置为59
endCalendar.set(Calendar.SECOND, 59);
// 格式化时间
String startTime = sdf.format(startCalendar.getTime());
String endTime = sdf.format(endCalendar.getTime());
Log.d("SelectedTime", "开始时间:" + startTime);
Log.d("SelectedTime", "结束时间:" + endTime);
MvpPre.setRoomBusinessTime(roomId, startTime, endTime);
// MvpPre.getCharmList(roomId, stime, etime, currentPage + "", type);
});
dialog.setShowDate(false);
dialog.setShowTime(true);
dialog.setShowSeconds(false);
dialog.show(getChildFragmentManager(), "DoubleTimePicker");
}
}
@@ -725,7 +760,7 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
type == RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy || type == RoomSettingBean.QXRoomSettingTypeRoomSetting ||
type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress ||
type == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG || type == RoomSettingBean.QXRoomSettingTypeRoomTypeSIGNCONTRACT ||
type == RoomSettingBean.QXRoomSettingTypeRoomTypePUBROOM ||
type == RoomSettingBean.QXRoomSettingTypeRoomTypePUBROOM || type == QXRoomSettingTypeRoomBusinessTime ||
type == RoomSettingBean.QXRoomSettingTypeRoomClearMessage || type == QXRoomSettingTypeRoomOrderMic || type == RoomSettingBean.QXRoomSettingTypeRoomFloatingScreen
|| type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomBgImage || type == -1) {

View File

@@ -123,14 +123,41 @@
android:textSize="@dimen/sp_15" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_do_not_disturb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_15"
app:layout_constraintTop_toBottomOf="@+id/rl_group_announcement">
<TextView
android:id="@+id/tv_do_not_disturb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginTop="@dimen/dp_15"
android:text="消息免打扰"
android:textColor="@color/black"
android:textSize="@dimen/sp_15"
android:textStyle="bold" />
<Switch
android:id="@+id/swit_do_not_disturb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
tools:ignore="UseSwitchCompatOrMaterialXml" />
</RelativeLayout>
<LinearLayout
android:id="@+id/ll_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_10"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@+id/rl_group_announcement">
app:layout_constraintTop_toBottomOf="@+id/rl_do_not_disturb">
<RelativeLayout
android:layout_width="match_parent"

View File

@@ -15,68 +15,67 @@
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ll_search"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_44"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@+id/top_bar">
<LinearLayout
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_32"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_6"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_6"
android:layout_weight="1"
android:background="@drawable/shape_search_in"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_close"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_18"
android:layout_marginLeft="@dimen/dp_11"
android:layout_marginRight="@dimen/dp_7"
android:src="@drawable/index_level_search" />
<EditText
android:id="@+id/edit_query"
android:layout_width="@dimen/dp_0"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:hint="请输入ID/用户搜索"
android:maxLength="10"
android:singleLine="true"
android:textColor="#333333"
android:textColorHint="@color/color_FF999999"
android:textSize="@dimen/sp_12" />
</LinearLayout>
<TextView
android:id="@+id/tv_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="@dimen/dp_20"
android:text="搜索"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/ll_search">
app:layout_constraintTop_toBottomOf="@id/top_bar">
<LinearLayout
android:id="@+id/ll_search"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_44"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_32"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_6"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_6"
android:layout_weight="1"
android:background="@drawable/shape_search_in"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_close"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_18"
android:layout_marginLeft="@dimen/dp_11"
android:layout_marginRight="@dimen/dp_7"
android:src="@drawable/index_level_search" />
<EditText
android:id="@+id/edit_query"
android:layout_width="@dimen/dp_0"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:hint="请输入ID/用户搜索"
android:maxLength="10"
android:singleLine="true"
android:textColor="#333333"
android:textColorHint="@color/color_FF999999"
android:textSize="@dimen/sp_12" />
</LinearLayout>
<TextView
android:id="@+id/tv_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="@dimen/dp_20"
android:text="搜索"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/smart_refresh_layout"
@@ -90,8 +89,8 @@
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/dp_40"
android:clipToPadding="false"/>
android:clipToPadding="false"
android:paddingBottom="@dimen/dp_40" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>

View File

@@ -307,6 +307,31 @@
<ImageView style="@style/My_Info_Item_Arrow_Style" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_alignParentBottom="true"
android:background="@color/color_e2e2e2" />
<LinearLayout
android:id="@+id/ll_sk"
style="@style/My_Info_Item_LL_Style"
android:background="@drawable/bg_r15_white"
android:visibility="visible">
<TextView
style="@style/My_Info_Item_Title_Style"
android:text="是否使用声卡" />
<Switch
android:id="@+id/swit_sk"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:gravity="right"
tools:ignore="UseSwitchCompatOrMaterialXml" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"