1:修改BUG

This commit is contained in:
2025-12-05 14:35:34 +08:00
parent 3a193da90d
commit 8640c7366a
19 changed files with 218 additions and 82 deletions

View File

@@ -6,7 +6,7 @@ import java.io.Serializable;
import lombok.Data; import lombok.Data;
@Data @Data
public class RoomPitBean implements Serializable { public class RoomPitBean implements Serializable ,Cloneable{
/** /**
@@ -81,4 +81,13 @@ public class RoomPitBean implements Serializable {
private boolean occupied; private boolean occupied;
private boolean imageType;//是否是演唱者 private boolean imageType;//是否是演唱者
public RoomPitBean clone(){
try {
return (RoomPitBean)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
} }

View File

@@ -1,7 +1,6 @@
package com.xscm.moduleutil.rtc; package com.xscm.moduleutil.rtc;
import static com.blankj.utilcode.util.SnackbarUtils.getView;
import static io.agora.rtc2.Constants.NETWORK_TYPE_DISCONNECTED; import static io.agora.rtc2.Constants.NETWORK_TYPE_DISCONNECTED;
import static io.agora.rtc2.Constants.NETWORK_TYPE_LAN; import static io.agora.rtc2.Constants.NETWORK_TYPE_LAN;
import static io.agora.rtc2.Constants.NETWORK_TYPE_MOBILE_2G; import static io.agora.rtc2.Constants.NETWORK_TYPE_MOBILE_2G;
@@ -12,28 +11,20 @@ import static io.agora.rtc2.Constants.NETWORK_TYPE_UNKNOWN;
import static io.agora.rtc2.Constants.NETWORK_TYPE_WIFI; import static io.agora.rtc2.Constants.NETWORK_TYPE_WIFI;
import static io.agora.rtc2.video.VideoEncoderConfiguration.*; import static io.agora.rtc2.video.VideoEncoderConfiguration.*;
import static io.agora.rtc2.video.VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15; import static io.agora.rtc2.video.VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15;
import static io.agora.rtc2.video.VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_30;
import static io.agora.rtc2.video.VideoEncoderConfiguration.ORIENTATION_MODE.*; import static io.agora.rtc2.video.VideoEncoderConfiguration.ORIENTATION_MODE.*;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.hardware.SensorManager;
import android.media.projection.MediaProjection; import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.Display; import android.view.Display;
import android.view.OrientationEventListener;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.view.WindowManager; import android.view.WindowManager;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -60,7 +51,6 @@ import org.greenrobot.eventbus.EventBus;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -386,6 +376,13 @@ public class AgoraManager {
private IRtcEngineEventHandler getDefaultEventHandler() { private IRtcEngineEventHandler getDefaultEventHandler() {
return new IRtcEngineEventHandler() { return new IRtcEngineEventHandler() {
@Override
public void onAudioEffectFinished(int soundId) {
super.onAudioEffectFinished(soundId);
LogUtils.e("onAudioEffectFinished", "soundId------>" + soundId);
}
@Override @Override
public void onRemoteAudioStateChanged(int uid, int state, int reason, int elapsed) { public void onRemoteAudioStateChanged(int uid, int state, int reason, int elapsed) {
super.onRemoteAudioStateChanged(uid, state, reason, elapsed); super.onRemoteAudioStateChanged(uid, state, reason, elapsed);
@@ -471,6 +468,7 @@ public class AgoraManager {
public void onSongSimpleInfoResult(String requestId, long songCode, String simpleInfo, int reason) { public void onSongSimpleInfoResult(String requestId, long songCode, String simpleInfo, int reason) {
} }
}); });

View File

@@ -258,4 +258,43 @@ public class TimeUtils {
return "1天"; // 或者 return "0天"; return "1天"; // 或者 return "0天";
} }
/**
* 根据生日字符串计算年龄
* @param birthDay 生日字符串,格式为 "yyyy-MM-dd"
* @return 年龄
*/
public static int getAgeByBirthDay(String birthDay) {
if (birthDay == null || birthDay.isEmpty()) {
return 0;
}
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birthDate = sdf.parse(birthDay);
Calendar cal = Calendar.getInstance();
int currentYear = cal.get(Calendar.YEAR);
int currentMonth = cal.get(Calendar.MONTH);
int currentDay = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDate);
int birthYear = cal.get(Calendar.YEAR);
int birthMonth = cal.get(Calendar.MONTH);
int birthDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
int age = currentYear - birthYear;
// 如果当前月份小于生日月份或者月份相同但当前日期小于生日日期则年龄减1
if (currentMonth < birthMonth ||
(currentMonth == birthMonth && currentDay < birthDayOfMonth)) {
age--;
}
return age < 0 ? 0 : age;
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
} }

View File

@@ -3337,6 +3337,18 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
mBinding!!.headName.text = mRoomInfoResp?.room_info?.head_line?.nickname mBinding!!.headName.text = mRoomInfoResp?.room_info?.head_line?.nickname
mBinding!!.headCone.text = mRoomInfoResp?.room_info?.head_line?.content mBinding!!.headCone.text = mRoomInfoResp?.room_info?.head_line?.content
mBinding!!.headAvate.setOnClickListener { view ->
RoomUserInfoFragment.show(
roomId,
mRoomInfoResp?.room_info?.head_line?.user_id,
"",
getHostUser(),
false,
2,
isNumberWhether(),
supportFragmentManager)
}
mBinding!!.ivQuanQiang.setOnClickListener { v: View? -> mBinding!!.ivQuanQiang.setOnClickListener { v: View? ->
val fragment = PublishCommentDialogFragment.show( val fragment = PublishCommentDialogFragment.show(
roomId, roomId,

View File

@@ -15,9 +15,11 @@ import com.xscm.modulemain.activity.room.fragment.SongRequestFragment;
public class RequestSongPagerAdapter extends FragmentStateAdapter { public class RequestSongPagerAdapter extends FragmentStateAdapter {
private static final int TAB_COUNT = 3; // 三个标签页 private static final int TAB_COUNT = 3; // 三个标签页
private String zcUserId;
public RequestSongPagerAdapter(@NonNull FragmentActivity fragmentActivity) { public RequestSongPagerAdapter(String zcUserId,@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity); super(fragmentActivity);
this.zcUserId = zcUserId;
} }
@NonNull @NonNull
@@ -27,7 +29,7 @@ public class RequestSongPagerAdapter extends FragmentStateAdapter {
case 0: case 0:
return new SongRequestFragment(); // 点歌页面 return new SongRequestFragment(); // 点歌页面
case 1: case 1:
return new RequestedSongsFragment(); // 已点歌曲页面 return RequestedSongsFragment.newInstance(zcUserId); // 已点歌曲页面
case 2: case 2:
return new SongHistoryFragment(); // 历史记录页面 return new SongHistoryFragment(); // 历史记录页面
default: default:

View File

@@ -30,15 +30,14 @@ public class RequestedSongsAdapter extends BaseQuickAdapter<SongPlaylist.SongPla
private OnItemClickListener onItemClickListener; private OnItemClickListener onItemClickListener;
public RequestedSongsAdapter() {
public RequestedSongsAdapter(String zcUserId) {
super(R.layout.item_requested_song); super(R.layout.item_requested_song);
this.zcUserId=zcUserId;
} }
private String zcUserId=""; private String zcUserId="";
public void setZcUserId(String zcUserId) {
this.zcUserId=zcUserId;
}
public interface OnItemClickListener { public interface OnItemClickListener {
void onPlayClick(SongPlaylist.SongPlaylistBean song, int position); void onPlayClick(SongPlaylist.SongPlaylistBean song, int position);
@@ -68,19 +67,31 @@ public class RequestedSongsAdapter extends BaseQuickAdapter<SongPlaylist.SongPla
helper.setText(R.id.tv_request_status, "置顶"); helper.setText(R.id.tv_request_status, "置顶");
helper.setTextColor(R.id.tv_request_status, 0xFFFFFFFF); helper.setTextColor(R.id.tv_request_status, 0xFFFFFFFF);
helper.setBackgroundRes(R.id.tv_request_status, com.xscm.moduleutil.R.drawable.bg_r34_3abc6d); helper.setBackgroundRes(R.id.tv_request_status, com.xscm.moduleutil.R.drawable.bg_r34_3abc6d);
try {
if (zcUserId.equals(SpUtil.getUserId()+"")){
helper.getView(R.id.tv_request_status).setVisibility(View.VISIBLE);
}else {
helper.getView(R.id.tv_request_status).setVisibility(View.GONE);
}
}catch (Exception e){
helper.getView(R.id.tv_request_status).setVisibility(View.GONE);
LogUtils.e("RequestedSongsAdapter",e.getMessage());
}
} }
try {
if (((RoomActivity)ActivityUtils.getTopActivity()).getMRoomInfoResp().getRoom_info().getPit_list().get(8).getUser_id() // try {
.equals(SpUtil.getUserId()+"")){ // if (((RoomActivity)ActivityUtils.getTopActivity()).getMRoomInfoResp().getRoom_info().getPit_list().get(8).getUser_id()
helper.getView(R.id.tv_request_status).setVisibility(View.VISIBLE); // .equals(SpUtil.getUserId()+"")){
}else { // helper.getView(R.id.tv_request_status).setVisibility(View.VISIBLE);
helper.getView(R.id.tv_request_status).setVisibility(View.GONE); // }else {
} // helper.getView(R.id.tv_request_status).setVisibility(View.GONE);
}catch (Exception e){ // }
helper.getView(R.id.tv_request_status).setVisibility(View.GONE); // }catch (Exception e){
LogUtils.e("RequestedSongsAdapter",e.getMessage()); // helper.getView(R.id.tv_request_status).setVisibility(View.GONE);
} // LogUtils.e("RequestedSongsAdapter",e.getMessage());
// }
// 设置tvRequestStatus的点击事件只有置顶状态才能点击 // 设置tvRequestStatus的点击事件只有置顶状态才能点击

View File

@@ -30,6 +30,7 @@ public class RequestSongFragment extends BaseMvpDialogFragment<RequestSongPresen
private int historySongsCount = 0; // 历史记录数量 private int historySongsCount = 0; // 历史记录数量
private String roomId; private String roomId;
private String zcUserId;
public RequestSongFragment() { public RequestSongFragment() {
// Required empty public constructor // Required empty public constructor
@@ -40,9 +41,11 @@ public class RequestSongFragment extends BaseMvpDialogFragment<RequestSongPresen
* @return * @return
*/ */
// TODO: Rename and change types and number of parameters // TODO: Rename and change types and number of parameters
public static RequestSongFragment show(FragmentManager fragmentManager) { public static RequestSongFragment show(String zcUserId,FragmentManager fragmentManager) {
RequestSongFragment fragment = new RequestSongFragment(); RequestSongFragment fragment = new RequestSongFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString("zcUserId", zcUserId);
fragment.setArguments(args);
fragment.show(fragmentManager, "RequestSongFragment"); fragment.show(fragmentManager, "RequestSongFragment");
return fragment; return fragment;
} }
@@ -64,8 +67,9 @@ public class RequestSongFragment extends BaseMvpDialogFragment<RequestSongPresen
} }
private void initViewPager() { private void initViewPager() {
zcUserId= getArguments().getString("zcUserId");
// 创建适配器 // 创建适配器
pagerAdapter = new RequestSongPagerAdapter(getActivity()); pagerAdapter = new RequestSongPagerAdapter(zcUserId,getActivity());
// 设置适配器 // 设置适配器
mBinding.viewPager.setAdapter(pagerAdapter); mBinding.viewPager.setAdapter(pagerAdapter);

View File

@@ -1,5 +1,6 @@
package com.xscm.modulemain.activity.room.fragment; package com.xscm.modulemain.activity.room.fragment;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -19,6 +20,7 @@ import com.xscm.modulemain.activity.room.adapter.RequestedSongsAdapter;
import com.xscm.modulemain.activity.room.contacts.RequestSongContacts; import com.xscm.modulemain.activity.room.contacts.RequestSongContacts;
import com.xscm.modulemain.activity.room.presenter.RequestSongPresenter; import com.xscm.modulemain.activity.room.presenter.RequestSongPresenter;
import com.xscm.modulemain.databinding.FragmentRequestedSongsBinding; import com.xscm.modulemain.databinding.FragmentRequestedSongsBinding;
import com.xscm.moduleutil.adapter.GiftTwoDetailsFragment;
import com.xscm.moduleutil.base.BaseMvpFragment; import com.xscm.moduleutil.base.BaseMvpFragment;
import com.xscm.moduleutil.bean.SingerSongCount; import com.xscm.moduleutil.bean.SingerSongCount;
import com.xscm.moduleutil.bean.SongPlaylist; import com.xscm.moduleutil.bean.SongPlaylist;
@@ -37,6 +39,26 @@ public class RequestedSongsFragment extends BaseMvpFragment<RequestSongPresenter
private int page = 1; private int page = 1;
private RequestedSongsAdapter adapter; private RequestedSongsAdapter adapter;
private List<SongPlaylist.SongPlaylistBean> songList = new ArrayList<>(); private List<SongPlaylist.SongPlaylistBean> songList = new ArrayList<>();
private String zcUserId;
public RequestedSongsFragment(){
}
public static RequestedSongsFragment newInstance(String zcUserId) {
Bundle args = new Bundle();
args.putString("zcUserId", zcUserId);
RequestedSongsFragment fragment = new RequestedSongsFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
zcUserId= getArguments().getString("zcUserId");
}
@Override @Override
protected RequestSongPresenter bindPresenter() { protected RequestSongPresenter bindPresenter() {
@@ -68,7 +90,7 @@ public class RequestedSongsFragment extends BaseMvpFragment<RequestSongPresenter
private void initRecyclerView() { private void initRecyclerView() {
// 初始化RecyclerView // 初始化RecyclerView
adapter = new RequestedSongsAdapter(); adapter = new RequestedSongsAdapter(zcUserId);
mBinding.rvMyRequestedSongs.setLayoutManager(new LinearLayoutManager(getContext())); mBinding.rvMyRequestedSongs.setLayoutManager(new LinearLayoutManager(getContext()));
mBinding.rvMyRequestedSongs.setAdapter(adapter); mBinding.rvMyRequestedSongs.setAdapter(adapter);

View File

@@ -166,8 +166,11 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
if (ClickUtils.isFastDoubleClick(v)) { if (ClickUtils.isFastDoubleClick(v)) {
return; return;
} }
LogUtils.e("cc",mBinding.wvZc.getUserId());
RoomPitBean roomPitBean1=mBinding.wvZc.pitBean;
LogUtils.e("roomPitBean1",roomPitBean1);
// 保存RequestSongFragment的引用以便后续调用其方法 // 保存RequestSongFragment的引用以便后续调用其方法
requestSongFragment = RequestSongFragment.show(getChildFragmentManager()); requestSongFragment = RequestSongFragment.show(roomPitBean1.getUser_id(),getChildFragmentManager());
} }
}); });
@@ -211,6 +214,20 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
} }
} }
}); });
mBinding.ciGsAva.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ClickUtils.isFastDoubleClick(v)) {
return;
}
if (roomInfoResp.getSinger_info()!=null && roomInfoResp.getSinger_info().getNext_song_info()!=null) {
if (roomInfoResp.getSinger_info().getNext_song_info().getSinger_user_id() != 0)
RoomUserInfoFragment.show(roomId, roomInfoResp.getSinger_info().getNext_song_info().getSinger_user_id() + "", "0", getHostUser(), false, 1, isNumberWhether(), getChildFragmentManager());
}
}
});
} }
@@ -633,9 +650,13 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
if (toPit.equals("9")) { if (toPit.equals("9")) {
RoomPitBean fromBean = adapter.getData().get(fromIndex); RoomPitBean fromBean = adapter.getData().get(fromIndex);
fromBean.setPit_number(toPit); fromBean.setPit_number(toPit);
mBinding.wvZc.setRoomWheatNumber("9"); fromBean.clone();
mBinding.wvZc.setData(fromBean); //这里需要是重新的指向地址,不然会出现,虽然页面展示的是,但是在点击的时候,找不到对应的数据
roomInfoResp.getRoom_info().getPit_list().set(8, fromBean); RoomPitBean pitBean = fromBean.clone();
mBinding.wvZc.setData(pitBean);
roomInfoResp.getRoom_info().getPit_list().set(8, pitBean);
if (fromBean.getUser_id().equals(SpUtil.getUserId() + "")) { if (fromBean.getUser_id().equals(SpUtil.getUserId() + "")) {
myPitNumber = 9; myPitNumber = 9;
@@ -650,7 +671,7 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
temp.setCharm(""); temp.setCharm("");
temp.setDress(""); temp.setDress("");
temp.setImageType(false); temp.setImageType(false);
temp.setPit_number(fromPit);
roomInfoResp.getRoom_info().getPit_list().set(fromIndex, temp); roomInfoResp.getRoom_info().getPit_list().set(fromIndex, temp);
roomPitBeans.set(fromIndex, temp); roomPitBeans.set(fromIndex, temp);
adapter.notifyItemChanged(fromIndex); adapter.notifyItemChanged(fromIndex);
@@ -666,6 +687,7 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
adapter.notifyItemChanged(fromIndex); adapter.notifyItemChanged(fromIndex);
adapter.notifyItemChanged(toIndex); adapter.notifyItemChanged(toIndex);
} }
LogUtils.e("huanmai2",mBinding.wvZc.pitBean);
setMike(); setMike();
} }

View File

@@ -27,6 +27,7 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.blankj.utilcode.util.ActivityUtils; import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.LogUtils;
import com.xscm.modulemain.BaseMvpActivity; import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulemain.R; import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.conacts.SingerVerificationContract; import com.xscm.modulemain.activity.user.conacts.SingerVerificationContract;
@@ -345,7 +346,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
recordingFile = segmentFile; recordingFile = segmentFile;
} }
} catch (IOException e) { } catch (IOException e) {
Log.e("SingerVerification", "录音失败: " + e.getMessage()); LogUtils.e("SingerVerification", "录音失败: " + e.getMessage());
// 从列表中移除失败的文件 // 从列表中移除失败的文件
recordingSegments.remove(segmentFile); recordingSegments.remove(segmentFile);
throw e; throw e;
@@ -394,7 +395,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
}, 1000, 1000); }, 1000, 1000);
} catch (IOException e) { } catch (IOException e) {
Log.e("SingerVerification", "录音失败: " + e.getMessage()); LogUtils.e("SingerVerification", "录音失败: " + e.getMessage());
Toast.makeText(this, "录音失败: 请重试", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "录音失败: 请重试", Toast.LENGTH_SHORT).show();
// 重置录音状态,允许重新录制 // 重置录音状态,允许重新录制
isRecording = false; isRecording = false;
@@ -447,7 +448,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
updateUI(); updateUI();
} }
} catch (Exception e) { } catch (Exception e) {
Log.e("SingerVerification", "停止录音失败: " + e.getMessage()); LogUtils.e("SingerVerification", "停止录音失败: " + e.getMessage());
// Toast.makeText(this, "停止录音失败: ", Toast.LENGTH_SHORT).show(); // Toast.makeText(this, "停止录音失败: ", Toast.LENGTH_SHORT).show();
// 发生异常时重置状态,允许重新录制 // 发生异常时重置状态,允许重新录制
@@ -526,7 +527,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override @Override
public boolean onError(MediaPlayer mp, int what, int extra) { public boolean onError(MediaPlayer mp, int what, int extra) {
Log.e("SingerVerification", "MediaPlayer错误: what=" + what + ", extra=" + extra); LogUtils.e("SingerVerification", "MediaPlayer错误: what=" + what + ", extra=" + extra);
isPlaying = false; isPlaying = false;
updateUI(); updateUI();
return true; // 错误已处理 return true; // 错误已处理
@@ -538,7 +539,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
mediaPlayer.start(); mediaPlayer.start();
updateUI(); updateUI();
} catch (IOException e) { } catch (IOException e) {
Log.e("SingerVerification", "播放失败: " + e.getMessage()); LogUtils.e("SingerVerification", "播放失败: " + e.getMessage());
Toast.makeText(this, "播放失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "播放失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
isPlaying = false; isPlaying = false;
updateUI(); updateUI();
@@ -558,7 +559,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
mediaPlayer = null; mediaPlayer = null;
} }
} catch (Exception e) { } catch (Exception e) {
Log.e("SingerVerification", "停止播放失败: " + e.getMessage()); LogUtils.e("SingerVerification", "停止播放失败: " + e.getMessage());
} finally { } finally {
// 无论是否出错,都重置状态 // 无论是否出错,都重置状态
isPlaying = false; isPlaying = false;
@@ -617,16 +618,16 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
if (recordingSegments.size() > 1) { if (recordingSegments.size() > 1) {
// 如果还没有合并文件,先进行合并 // 如果还没有合并文件,先进行合并
if (mergedRecordingFile == null || !mergedRecordingFile.exists()) { if (mergedRecordingFile == null || !mergedRecordingFile.exists()) {
Log.d("SingerVerification", "提交前合并音频片段,共 " + recordingSegments.size() + " 个片段"); LogUtils.d("SingerVerification", "提交前合并音频片段,共 " + recordingSegments.size() + " 个片段");
mergeAudioFiles(); mergeAudioFiles();
} else { } else {
Log.d("SingerVerification", "使用已合并的音频文件: " + mergedRecordingFile.getAbsolutePath()); LogUtils.d("SingerVerification", "使用已合并的音频文件: " + mergedRecordingFile.getAbsolutePath());
recordingFile = mergedRecordingFile; recordingFile = mergedRecordingFile;
} }
} else if (recordingSegments.size() == 1) { } else if (recordingSegments.size() == 1) {
// 只有一个片段,直接使用 // 只有一个片段,直接使用
recordingFile = recordingSegments.get(0); recordingFile = recordingSegments.get(0);
Log.d("SingerVerification", "使用单个录音片段: " + recordingFile.getAbsolutePath()); LogUtils.d("SingerVerification", "使用单个录音片段: " + recordingFile.getAbsolutePath());
} }
if (recordingFile == null || !recordingFile.exists()) { if (recordingFile == null || !recordingFile.exists()) {
@@ -640,7 +641,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
return; return;
} }
Log.d("SingerVerification", "提交认证,使用文件: " + recordingFile.getAbsolutePath() + LogUtils.d("SingerVerification", "提交认证,使用文件: " + recordingFile.getAbsolutePath() +
", 大小: " + recordingFile.length() + " bytes"); ", 大小: " + recordingFile.length() + " bytes");
MvpPre.uploadFile(recordingFile, 3); MvpPre.uploadFile(recordingFile, 3);
} }
@@ -720,7 +721,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
int segmentCount = 0; int segmentCount = 0;
for (File segment : processedSegments) { for (File segment : processedSegments) {
Log.d("SingerVerification", "开始处理第 " + (segmentCount + 1) + " 个片段: " + segment.getAbsolutePath()); LogUtils.d("SingerVerification", "开始处理第 " + (segmentCount + 1) + " 个片段: " + segment.getAbsolutePath());
long segmentDuration = processAudioSegment(muxer, segment, audioTrackIndex, long segmentDuration = processAudioSegment(muxer, segment, audioTrackIndex,
buffer, bufferInfo, currentPresentationTimeUs); buffer, bufferInfo, currentPresentationTimeUs);
@@ -728,15 +729,15 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
if (segmentDuration > 0) { if (segmentDuration > 0) {
// 修复:累计当前时间戳,而不是替换 // 修复:累计当前时间戳,而不是替换
currentPresentationTimeUs += segmentDuration; currentPresentationTimeUs += segmentDuration;
Log.d("SingerVerification", "片段 " + (segmentCount + 1) + " 处理完成,片段时长: " + segmentDuration + " us, 累计时间: " + currentPresentationTimeUs + " us"); LogUtils.d("SingerVerification", "片段 " + (segmentCount + 1) + " 处理完成,片段时长: " + segmentDuration + " us, 累计时间: " + currentPresentationTimeUs + " us");
} else { } else {
Log.w("SingerVerification", "片段 " + (segmentCount + 1) + " 处理失败或为空"); LogUtils.w("SingerVerification", "片段 " + (segmentCount + 1) + " 处理失败或为空");
} }
segmentCount++; segmentCount++;
} }
Log.d("SingerVerification", "所有片段处理完成,总时长: " + currentPresentationTimeUs + " us共处理 " + segmentCount + " 个片段"); LogUtils.d("SingerVerification", "所有片段处理完成,总时长: " + currentPresentationTimeUs + " us共处理 " + segmentCount + " 个片段");
// 更新最终录音文件 // 更新最终录音文件
updateRecordingFile(); updateRecordingFile();
@@ -781,14 +782,14 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
extractor.setDataSource(segment.getAbsolutePath()); extractor.setDataSource(segment.getAbsolutePath());
int audioTrackIndex = findAudioTrack(extractor); int audioTrackIndex = findAudioTrack(extractor);
if (audioTrackIndex < 0) { if (audioTrackIndex < 0) {
Log.w("SingerVerification", "未找到音频轨道: " + segment.getAbsolutePath()); LogUtils.w("SingerVerification", "未找到音频轨道: " + segment.getAbsolutePath());
return 0; return 0;
} }
extractor.selectTrack(audioTrackIndex); extractor.selectTrack(audioTrackIndex);
MediaFormat format = extractor.getTrackFormat(audioTrackIndex); MediaFormat format = extractor.getTrackFormat(audioTrackIndex);
long estimatedDuration = format.getLong(MediaFormat.KEY_DURATION); long estimatedDuration = format.getLong(MediaFormat.KEY_DURATION);
Log.d("SingerVerification", "处理片段: " + segment.getAbsolutePath() + LogUtils.d("SingerVerification", "处理片段: " + segment.getAbsolutePath() +
", 估计时长: " + estimatedDuration + "us, 基准时间: " + baseTimeUs + "us"); ", 估计时长: " + estimatedDuration + "us, 基准时间: " + baseTimeUs + "us");
int sampleCount = 0; int sampleCount = 0;
@@ -852,7 +853,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
actualDuration = estimatedDuration; actualDuration = estimatedDuration;
} }
Log.d("SingerVerification", "片段处理完成,实际时长: " + actualDuration + "us, 样本数: " + sampleCount); LogUtils.d("SingerVerification", "片段处理完成,实际时长: " + actualDuration + "us, 样本数: " + sampleCount);
return actualDuration; return actualDuration;
} finally { } finally {
@@ -875,10 +876,10 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
// 确保合并文件存在且不为空 // 确保合并文件存在且不为空
if (mergedRecordingFile != null && mergedRecordingFile.exists() && mergedRecordingFile.length() > 0) { if (mergedRecordingFile != null && mergedRecordingFile.exists() && mergedRecordingFile.length() > 0) {
recordingFile = mergedRecordingFile; recordingFile = mergedRecordingFile;
Log.d("SingerVerification", "音频文件合并完成,文件大小: " + mergedRecordingFile.length() + " bytes"); LogUtils.d("SingerVerification", "音频文件合并完成,文件大小: " + mergedRecordingFile.length() + " bytes");
Log.d("SingerVerification", "设置当前播放文件为合并文件: " + mergedRecordingFile.getAbsolutePath()); LogUtils.d("SingerVerification", "设置当前播放文件为合并文件: " + mergedRecordingFile.getAbsolutePath());
} else { } else {
Log.e("SingerVerification", "合并文件不存在或为空,使用第一个录音片段"); LogUtils.e("SingerVerification", "合并文件不存在或为空,使用第一个录音片段");
if (!recordingSegments.isEmpty()) { if (!recordingSegments.isEmpty()) {
recordingFile = recordingSegments.get(0); recordingFile = recordingSegments.get(0);
} }
@@ -886,12 +887,12 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
// 修复:不立即清空录音片段列表,延迟清空以确保合并文件可以被正确使用 // 修复:不立即清空录音片段列表,延迟清空以确保合并文件可以被正确使用
// 将在延迟删除片段时清空列表 // 将在延迟删除片段时清空列表
Log.d("SingerVerification", "保留录音片段列表,将在延迟删除时清空"); LogUtils.d("SingerVerification", "保留录音片段列表,将在延迟删除时清空");
} }
private void handleMergeError(Exception e) { private void handleMergeError(Exception e) {
Log.e("SingerVerification", "处理音频文件失败: " + e.getMessage(), e); LogUtils.e("SingerVerification", "处理音频文件失败: " + e.getMessage(), e);
Toast.makeText(this, "处理音频文件失败,使用第一段录音", Toast.LENGTH_SHORT).show(); // Toast.makeText(this, "处理音频文件失败,使用第一段录音", Toast.LENGTH_SHORT).show();
if (!recordingSegments.isEmpty()) { if (!recordingSegments.isEmpty()) {
recordingFile = recordingSegments.get(0); recordingFile = recordingSegments.get(0);
} }
@@ -904,7 +905,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
muxer.release(); muxer.release();
} }
} catch (Exception e) { } catch (Exception e) {
Log.e("SingerVerification", "释放MediaMuxer失败", e); LogUtils.e("SingerVerification", "释放MediaMuxer失败", e);
} }
} }
@@ -916,19 +917,19 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
if (segment.exists()) { if (segment.exists()) {
boolean deleted = segment.delete(); boolean deleted = segment.delete();
if (!deleted) { if (!deleted) {
Log.w("SingerVerification", "删除音频片段失败: " + segment.getAbsolutePath()); LogUtils.w("SingerVerification", "删除音频片段失败: " + segment.getAbsolutePath());
} else { } else {
Log.d("SingerVerification", "成功删除音频片段: " + segment.getAbsolutePath()); LogUtils.d("SingerVerification", "成功删除音频片段: " + segment.getAbsolutePath());
} }
} }
} catch (Exception e) { } catch (Exception e) {
Log.e("SingerVerification", "删除音频片段失败: " + segment.getAbsolutePath(), e); LogUtils.e("SingerVerification", "删除音频片段失败: " + segment.getAbsolutePath(), e);
} }
} }
// 修复:删除所有片段后,清空录音片段列表 // 修复:删除所有片段后,清空录音片段列表
recordingSegments.clear(); recordingSegments.clear();
Log.d("SingerVerification", "已清空录音片段列表"); LogUtils.d("SingerVerification", "已清空录音片段列表");
}, 2000); // 延迟2秒删除确保合并文件已经完全写入 }, 2000); // 延迟2秒删除确保合并文件已经完全写入
} }
@@ -938,7 +939,7 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
*/ */
private void updateRecordingDuration() { private void updateRecordingDuration() {
if (recordingFile == null || !recordingFile.exists()) { if (recordingFile == null || !recordingFile.exists()) {
Log.e("SingerVerification", "录音文件不存在,无法更新时长"); LogUtils.e("SingerVerification", "录音文件不存在,无法更新时长");
return; return;
} }
@@ -950,10 +951,10 @@ public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificati
recordingDuration = mp.getDuration(); recordingDuration = mp.getDuration();
mp.release(); mp.release();
Log.d("SingerVerification", "更新录音时长为: " + recordingDuration + "ms"); LogUtils.d("SingerVerification", "更新录音时长为: " + recordingDuration + "ms");
updateUI(); updateUI();
} catch (Exception e) { } catch (Exception e) {
Log.e("SingerVerification", "获取录音时长失败: " + e.getMessage()); LogUtils.e("SingerVerification", "获取录音时长失败: " + e.getMessage());
} }
} }

View File

@@ -106,7 +106,7 @@ public class MyRoomListFragment extends BaseMvpFragment<MyRoomPresenter, RoomFra
} }
helper.setText(R.id.tv_name, item.getRoom_name()); helper.setText(R.id.tv_name, item.getRoom_name());
helper.setText(R.id.tv_sy, item.getToday_income() != null ? item.getToday_income() + "" : "0"); helper.setText(R.id.tv_sy, item.getToday_profit() != null ? item.getToday_profit() + "" : "0");
helper.setText(R.id.tv_user_id, "ID: " + item.getRoom_number()); helper.setText(R.id.tv_user_id, "ID: " + item.getRoom_number());
if (type == MyRoomListFragment.TYPE_CREATE) { if (type == MyRoomListFragment.TYPE_CREATE) {
helper.setText(R.id.tv_bl, "今日收益"); helper.setText(R.id.tv_bl, "今日收益");

View File

@@ -322,7 +322,14 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
this.userInfo = data; this.userInfo = data;
mBinding.rivUserHead.setData(data.getAvatar(), data.getDress(), data.getNobility_image()); mBinding.rivUserHead.setData(data.getAvatar(), data.getDress(), data.getNobility_image());
mBinding.tvNickName.setText(data.getNickname()); mBinding.tvNickName.setText(data.getNickname());
mBinding.tvNickName.setTextColor((data.getNickname_color() != null && !data.getNickname_color().equals("")) ? Color.parseColor(data.getNickname_color()) : Color.parseColor("#ffffff")); if (!userInfo.getNickname_color().isEmpty()) {
mBinding.tvNickName.setStartColor(Color.parseColor(data.getNickname_color()));
mBinding.tvNickName.setShineColor(Color.parseColor(data.getNickname_color()));
mBinding.tvNickName.setEndColor(Color.parseColor(data.getNickname_color()));
mBinding.tvNickName.setShine(true);
mBinding.tvNickName.setShineType(0);
}
// mBinding.tvNickName.setTextColor((data.getNickname_color() != null && !data.getNickname_color().equals("")) ? Color.parseColor(data.getNickname_color()) : Color.parseColor("#ffffff"));
String sex = data.getSex() == 1 ? "" : ""; String sex = data.getSex() == 1 ? "" : "";
mBinding.beautifulView.setText(sex + " | ID:" + data.getUser_code()); mBinding.beautifulView.setText(sex + " | ID:" + data.getUser_code());
mBinding.tvFollow.setText(data.getFollow_num() + ""); mBinding.tvFollow.setText(data.getFollow_num() + "");

View File

@@ -210,8 +210,8 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
// ImageUtils.loadHead(relation2.avatar1, holder.getView(R.id.user_nav2)) // ImageUtils.loadHead(relation2.avatar1, holder.getView(R.id.user_nav2))
// holder.setText(R.id.tv_nickname2, relation2.nickname1) // holder.setText(R.id.tv_nickname2, relation2.nickname1)
holder.setText(R.id.tv_gx_time, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[0].end_time.toLong())) holder.setText(R.id.tv_gx_time, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[0].end_time.toLong()* 1000 - System.currentTimeMillis()))
holder.setText(R.id.tv_gx_time2, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[1].end_time.toLong())) 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 { holder.getView<View>(R.id.user_nav1).setOnClickListener {
if (relation1.user_id1== SpUtil.getUserId()){ if (relation1.user_id1== SpUtil.getUserId()){
@@ -286,9 +286,9 @@ class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuic
// ImageUtils.loadHead(relation3.avatar1, holder.getView(R.id.user_nav3)) // ImageUtils.loadHead(relation3.avatar1, holder.getView(R.id.user_nav3))
// holder.setText(R.id.tv_nickname3, relation3.nickname1) // holder.setText(R.id.tv_nickname3, relation3.nickname1)
holder.setText(R.id.tv_gx_time, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[0].end_time.toLong())) holder.setText(R.id.tv_gx_time, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[0].end_time.toLong()* 1000 - System.currentTimeMillis()))
holder.setText(R.id.tv_gx_time2, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[1].end_time.toLong())) holder.setText(R.id.tv_gx_time2, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[1].end_time.toLong()* 1000 - System.currentTimeMillis()))
holder.setText(R.id.tv_gx_time3, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[2].end_time.toLong())) 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 { holder.getView<View>(R.id.user_nav1).setOnClickListener {
if (relation1.user_id1== SpUtil.getUserId()){ if (relation1.user_id1== SpUtil.getUserId()){

View File

@@ -13,11 +13,13 @@ import com.xscm.moduleutil.bean.ExpandColumnBean;
import com.xscm.moduleutil.utils.ImageUtils; import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.MeHeadView; import com.xscm.moduleutil.utils.MeHeadView;
import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.utils.TimeUtils;
import com.xscm.moduleutil.widget.MyGridView; import com.xscm.moduleutil.widget.MyGridView;
import com.xscm.moduleutil.widget.ShineTextView; import com.xscm.moduleutil.widget.ShineTextView;
import com.xscm.moduleutil.widget.img.FullScreenUtil; import com.xscm.moduleutil.widget.img.FullScreenUtil;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
public class ExpandColumnAdapter extends BaseQuickAdapter<ExpandColumnBean, BaseViewHolder> { public class ExpandColumnAdapter extends BaseQuickAdapter<ExpandColumnBean, BaseViewHolder> {
public ExpandColumnAdapter() { public ExpandColumnAdapter() {
@@ -52,7 +54,7 @@ public class ExpandColumnAdapter extends BaseQuickAdapter<ExpandColumnBean, Base
ImageView iv_sex=helper.getView(R.id.iv_user_sex); ImageView iv_sex=helper.getView(R.id.iv_user_sex);
//先让单图,多图,音频的布局显示 //先让单图,多图,音频的布局显示
helper.getView(R.id.dy_image_recyc).setVisibility(View.VISIBLE); helper.getView(R.id.dy_image_recyc).setVisibility(View.VISIBLE);
helper.setText(R.id.tv_agree,(item.getAgree()!=null?item.getAgree():"0")+""); helper.setText(R.id.tv_agree,TimeUtils.getAgeByBirthDay(item.getBirthday())+"");
//昵称 //昵称
helper.setText(com.xscm.moduleutil.R.id.dy_name_text, item.getNickname()); helper.setText(com.xscm.moduleutil.R.id.dy_name_text, item.getNickname());
ShineTextView tvName = helper.getView(com.xscm.moduleutil.R.id.dy_name_text); ShineTextView tvName = helper.getView(com.xscm.moduleutil.R.id.dy_name_text);

View File

@@ -45,7 +45,7 @@ public class RelationshipAdapter extends BaseQuickAdapter<RelationshipBean, com.
} }
helper.setText(R.id.tv_cp_num, TimeUtils.formatDuration2(Long.parseLong(item.getEnd_time()))); helper.setText(R.id.tv_cp_num, TimeUtils.formatDuration2(Long.parseLong(item.getEnd_time()) * 1000 - System.currentTimeMillis()));
if (item.getUser_id1()== SpUtil.getUserId() || item.getUser_id2() == SpUtil.getUserId()){ if (item.getUser_id1()== SpUtil.getUserId() || item.getUser_id2() == SpUtil.getUserId()){
helper.getView(R.id.icon_cp_zd).setVisibility(View.VISIBLE); helper.getView(R.id.icon_cp_zd).setVisibility(View.VISIBLE);
helper.getView(R.id.icon_cp_dele).setVisibility(View.VISIBLE); helper.getView(R.id.icon_cp_dele).setVisibility(View.VISIBLE);

View File

@@ -151,6 +151,9 @@ public class RedBagSendDialog extends BaseDialog<DialogRedBagSendBinding> {
} }
} }
}); });
mBinding.rgXz.check(R.id.bt_pt);
redType = 1;
mBinding.lKl.setVisibility(GONE);
mBinding.rgXz.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { mBinding.rgXz.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override @Override
@@ -164,6 +167,8 @@ public class RedBagSendDialog extends BaseDialog<DialogRedBagSendBinding> {
} }
} }
}); });
mBinding.rgDjs.check(R.id.rb_lk);
redTime = 0;
mBinding.rgDjs.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { mBinding.rgDjs.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override @Override

View File

@@ -83,10 +83,10 @@ public class RoomManager {
// 显示加载提示 // 显示加载提示
// 这里可以根据需要添加加载对话框 // 这里可以根据需要添加加载对话框
if (CommonAppContext.getInstance().isRoomJoininj) { // if (CommonAppContext.getInstance().isRoomJoininj) {
return; // return;
} // }
CommonAppContext.getInstance().isRoomJoininj = true; // CommonAppContext.getInstance().isRoomJoininj = true;
// 检查是否有有效的缓存数据 // 检查是否有有效的缓存数据
RoomInfoResp roomInfo = getCachedRoomData(roomId); RoomInfoResp roomInfo = getCachedRoomData(roomId);
//加入房间 //加入房间

View File

@@ -64,6 +64,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_12" android:layout_marginTop="@dimen/dp_12"
android:paddingStart="@dimen/dp_16" android:paddingStart="@dimen/dp_16"
android:paddingBottom="@dimen/dp_100"
android:paddingEnd="@dimen/dp_16" /> android:paddingEnd="@dimen/dp_16" />

View File

@@ -48,7 +48,8 @@
android:layout_height="@dimen/dp_62" android:layout_height="@dimen/dp_62"
android:layout_marginStart="@dimen/dp_16" android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12" android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_16"> android:layout_marginEnd="@dimen/dp_16"
android:visibility="gone">
<ImageView <ImageView
android:id="@+id/im_gg" android:id="@+id/im_gg"