点唱房功能

This commit is contained in:
2025-11-18 19:39:16 +08:00
parent 45923ae858
commit 88a94c7c10
160 changed files with 6801 additions and 355 deletions

View File

@@ -44,6 +44,7 @@ public class NobleDetailsActivity extends BaseMvpActivity<NobleTitlePresenter, A
GridNobleAdapter mGiftWallAdapter;
private String lid="";
private String xlid="";
@Override
@@ -181,6 +182,8 @@ public class NobleDetailsActivity extends BaseMvpActivity<NobleTitlePresenter, A
mBinding.imLjkt.setImageResource(com.xscm.moduleutil.R.mipmap.noble_h_kt);
mBinding.imLjkt.setClickable( false);
}
xlid=nobilitLists.getLid()+"";
}
private void applyGradientToTextView(TextView textView) {
ViewTreeObserver vto = textView.getViewTreeObserver();

View File

@@ -72,13 +72,13 @@ public class NobleTitleActivity extends BaseMvpActivity<NobleTitlePresenter, Act
Intent intent = new Intent(this, NobleDetailsActivity.class);
Bundle bundle = new Bundle();
bundle.putString("lid",lid);
intent.putExtras( bundle);
intent.putExtras(bundle);
startActivity(intent);
}else if (id== R.id.im_me_noble_xf) {
Intent intent = new Intent(this, NoblePaymentActivity.class);
Bundle bundle = new Bundle();
bundle.putString("lid",lid);
intent.putExtras( bundle);
intent.putExtras(bundle);
startActivity(intent);
}
}

View File

@@ -0,0 +1,471 @@
package com.xscm.modulemain.activity.user.activity;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.conacts.SingerVerificationContract;
import com.xscm.modulemain.activity.user.presenter.SingerVerificationPresenter;
import com.xscm.modulemain.databinding.ActivitySingerVerificationBinding;
import com.xscm.moduleutil.bean.SongPlaylist;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
/**
* 歌手认证
* 该Activity用于处理用户进行歌手认证的相关功能包括录音、试听、重新录制和提交认证等操作。
*/
public class SingerVerificationActivity extends BaseMvpActivity<SingerVerificationPresenter, ActivitySingerVerificationBinding> implements SingerVerificationContract.View {
// 权限请求码
private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200;
// 录音权限
private static final String[] PERMISSIONS = {Manifest.permission.RECORD_AUDIO};
// 录音和播放相关变量
private MediaRecorder mediaRecorder; // 媒体录音对象
private MediaPlayer mediaPlayer; // 媒体播放对象
private File recordingFile; // 录音文件
private final Handler handler = new Handler(Looper.getMainLooper()); // 主线程Handler
private long recordingStartTime; // 录音开始时间
private boolean isRecording = false; // 是否正在录音
private boolean isPlaying = false; // 是否正在播放
private long recordingDuration = 0L; // 录音时长
private Timer timer; // 计时器
private int isSinger;//传递过来的参数,
/**
* 绑定Presenter
* @return 返回该Activity对应的Presenter实例
*/
@Override
protected SingerVerificationPresenter bindPresenter() {
return new SingerVerificationPresenter(this, this);
}
/**
* 获取布局ID
* @return 返回Activity的布局资源ID
*/
@Override
protected int getLayoutId() {
return R.layout.activity_singer_verification;
}
/**
* 初始化视图
* 设置UI组件的初始状态和事件监听
*/
@Override
protected void initView() {
super.initView();
// 请求录音权限
if (!hasPermissions()) {
ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_RECORD_AUDIO_PERMISSION);
}
mBinding.progressArc.setProgress(0);
mBinding.progressArc.setMax(100); // 设置最大值
mBinding.progressArc.setIndeterminate(false);
// 设置长按录音逻辑
mBinding.recordButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (!isRecording && !isPlaying && recordingFile == null) {
startRecording();
}
return true;
case MotionEvent.ACTION_UP:
if (isRecording) {
stopRecording();
}
return true;
default:
return false;
}
}
});
// 设置播放按钮点击事件
mBinding.playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isPlaying) {
// 正在播放,点击停止播放
stopPlaying();
// 恢复按钮状态
mBinding.playButton.setText("试听");
mBinding.playButton.setCompoundDrawablesWithIntrinsicBounds(0, R.mipmap.but_st, 0, 0);
} else {
// 未播放,点击开始播放
startPlaying();
// 更改按钮状态为"结束"
mBinding.playButton.setText("结束");
mBinding.playButton.setCompoundDrawablesWithIntrinsicBounds(0, R.mipmap.but_tz, 0, 0);
}
}
});
//
mBinding.reRecordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
reRecord();
}
});
//认证
mBinding.imSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
submitVerification();
}
});
}
@Override
protected void initData() {
mBinding.topBar.setTitle("歌手认证");
mBinding.topBar.setColor(getResources().getColor(R.color.white));
isSinger= getIntent().getIntExtra("isSinger",-1);
if (isSinger==-1){
mBinding.clCorner.setVisibility(VISIBLE);
mBinding.cornerStatus.setText("暂未认证");
}else if (isSinger==0){
mBinding.clCorner.setVisibility(GONE);
mBinding.cornerStatus.setText("认证中");
}else if (isSinger==1){
mBinding.clCorner.setVisibility(GONE);
mBinding.cornerStatus.setText("已认证");
}else if (isSinger==2){
mBinding.clCorner.setVisibility(VISIBLE);
mBinding.cornerStatus.setText("认证失败");
}
}
/**
* 检查应用是否拥有所有必要的权限
* 遍历权限列表,检查每个权限是否已被授予
*
* @return 如果所有权限都已授予则返回true否则返回false
*/
private boolean hasPermissions() {
// 遍历权限数组中的每个权限
for (String permission : PERMISSIONS) {
// 检查当前权限是否已被授予
// 如果权限未被授予返回值不等于PERMISSION_GRANTED则返回false
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
// 如果所有权限都已检查并授予则返回true
return true;
}
// 开始录音
private void startRecording() {
if (!hasPermissions()) {
ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_RECORD_AUDIO_PERMISSION);
return;
}
// 停止可能正在播放的音频
stopPlaying();
// 创建录音文件
try {
recordingFile = createAudioFile();
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setOutputFile(recordingFile.getAbsolutePath());
mediaRecorder.prepare();
mediaRecorder.start();
isRecording = true;
recordingStartTime = System.currentTimeMillis();
recordingDuration = 0L;
// 启动计时器
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (isRecording) {
recordingDuration = System.currentTimeMillis() - recordingStartTime;
// 检查是否达到最大录音时间5分钟
if (recordingDuration >= 5 * 60 * 1000) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(SingerVerificationActivity.this, "已达到最大录音时间5分钟录音自动停止", Toast.LENGTH_SHORT).show();
stopRecording();
}
});
return;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
updateUI();
}
});
}
}
}, 1000, 1000);
} catch (IOException e) {
Log.e("SingerVerification", "录音失败: " + e.getMessage());
Toast.makeText(this, "录音失败: " + e.getMessage() + ",请重试", Toast.LENGTH_SHORT).show();
// 重置录音状态,允许重新录制
isRecording = false;
if (mediaRecorder != null) {
mediaRecorder.release();
mediaRecorder = null;
}
if (recordingFile != null && recordingFile.exists()) {
recordingFile.delete();
recordingFile = null;
}
updateUI();
}
}
// 停止录音
private void stopRecording() {
try {
if (isRecording && mediaRecorder != null) {
isRecording = false;
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
// 取消计时器
if (timer != null) {
timer.cancel();
timer = null;
}
// 检查录音时长是否达到最小要求60秒
if (recordingDuration < 60 * 1000) {
Toast.makeText(this, "录音时间太短请至少录制60秒", Toast.LENGTH_SHORT).show();
// 删除不符合要求的录音文件
if (recordingFile != null && recordingFile.exists()) {
recordingFile.delete();
recordingFile = null;
}
recordingDuration = 0L;
} else {
Toast.makeText(this, "录音完成", Toast.LENGTH_SHORT).show();
}
updateUI();
}
} catch (Exception e) {
Log.e("SingerVerification", "停止录音失败: " + e.getMessage());
Toast.makeText(this, "停止录音失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
// 发生异常时重置状态,允许重新录制
isRecording = false;
if (mediaRecorder != null) {
mediaRecorder.release();
mediaRecorder = null;
}
if (recordingFile != null && recordingFile.exists()) {
recordingFile.delete();
recordingFile = null;
}
recordingDuration = 0L;
updateUI();
}
}
// 开始播放
private void startPlaying() {
if (recordingFile == null || !recordingFile.exists()) {
Toast.makeText(this, "没有录制的文件", Toast.LENGTH_SHORT).show();
return;
}
try {
stopRecording();
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(recordingFile.getAbsolutePath());
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
isPlaying = false;
// 恢复按钮状态
mBinding.playButton.setText("试听");
mBinding.playButton.setCompoundDrawablesWithIntrinsicBounds(0, R.mipmap.but_st, 0, 0);
updateUI();
}
});
isPlaying = true;
updateUI();
} catch (IOException e) {
Log.e("SingerVerification", "播放失败: " + e.getMessage());
Toast.makeText(this, "播放失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
// 停止播放
private void stopPlaying() {
try {
if (isPlaying && mediaPlayer != null) {
isPlaying = false;
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
// 恢复按钮状态
mBinding.playButton.setText("试听");
mBinding.playButton.setCompoundDrawablesWithIntrinsicBounds(0, R.mipmap.but_st, 0, 0);
updateUI();
}
} catch (Exception e) {
Log.e("SingerVerification", "停止播放失败: " + e.getMessage());
Toast.makeText(this, "停止播放失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
// 重新录音
private void reRecord() {
stopPlaying();
stopRecording();
if (recordingFile != null && recordingFile.exists()) {
recordingFile.delete();
}
recordingFile = null;
recordingDuration = 0L;
updateUI();
}
// 提交认证
private void submitVerification() {
if (recordingFile == null || !recordingFile.exists()) {
Toast.makeText(this, "请先录制音频", Toast.LENGTH_SHORT).show();
return;
}
MvpPre.uploadFile(recordingFile, 3);
}
// 创建音频文件
private File createAudioFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
String audioFileName = "AUDIO_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
return File.createTempFile(
audioFileName,
".m4a",
storageDir
);
}
// 更新UI
private void updateUI() {
// 更新时间显示
mBinding.timeTextView.setText(formatTime(recordingDuration));
// 计算录音进度假设最大录音时间为5分钟=300秒
int maxRecordingTime = 300; // 5分钟
int progress = (int) ((recordingDuration / 1000) * 100 / maxRecordingTime);
mBinding.progressArc.setProgress(progress); // 更新按钮状态
}
// 格式化时间显示
private String formatTime(long millis) {
long totalSeconds = millis / 1000;
long minutes = totalSeconds / 60;
long seconds = totalSeconds % 60;
return String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_RECORD_AUDIO_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "录音权限已获取", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "需要录音权限才能进行认证", Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
stopRecording();
stopPlaying();
if (timer != null) {
timer.cancel();
timer = null;
}
}
@Override
public void upLoadSuccess(String url, int type) {
MvpPre.singerAuth(url);
}
@Override
public void singerAuth(String s) {
reRecord();
finish();
}
@Override
public void getSong(SongPlaylist s) {
}
@Override
public void finishComment() {
}
@Override
public void deleteSong() {
}
}

View File

@@ -0,0 +1,174 @@
package com.xscm.modulemain.activity.user.activity;
import android.graphics.Color;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import com.xscm.modulemain.adapter.UserPlaylistAdapter;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.conacts.SingerVerificationContract;
import com.xscm.modulemain.activity.user.presenter.SingerVerificationPresenter;
import com.xscm.modulemain.databinding.ActivityUserPlaylistBinding;
import com.xscm.modulemain.dialog.CustomInputDialog;
import com.xscm.moduleutil.bean.SongPlaylist;
import com.xscm.moduleutil.utils.SpUtil;
import java.util.ArrayList;
import java.util.List;
/**
* 我的歌单
*/
public class UserPlaylistActivity extends BaseMvpActivity<SingerVerificationPresenter, ActivityUserPlaylistBinding> implements SingerVerificationContract.View {
private int page = 0;
private UserPlaylistAdapter mAdapter;
private List<SongPlaylist.SongPlaylistBean> mSongPlaylistBean;
@Override
protected void initView() {
super.initView();
mBinding.topBar.setTitle("歌单列表");
mBinding.topBar.setRightText("新增");
mBinding.topBar.setRightTxtVisible(true);
mBinding.topBar.setRightColor(Color.parseColor("#3ABC6D"));
mBinding.topBar.getTvRight().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//新增歌单
// 在Activity或Fragment中调用
CustomInputDialog customInputDialog = new CustomInputDialog(UserPlaylistActivity.this);
customInputDialog.show();
}
});
mBinding.recycleView.setLayoutManager(new LinearLayoutManager(this));
// 初始化适配器
mAdapter = new UserPlaylistAdapter(this, new ArrayList<>());
mBinding.recycleView.setAdapter(mAdapter);
// 设置滑动操作
// ItemTouchHelper itemTouchHelper = UserPlaylistAdapter.getItemTouchHelper(mAdapter);
// itemTouchHelper.attachToRecyclerView(mBinding.recycleView);
// 设置编辑点击事件
mAdapter.setOnEditClickListener(position -> {
// 处理编辑点击事件
CustomInputDialog customInputDialog = new CustomInputDialog(UserPlaylistActivity.this);
customInputDialog.PlaylistBean(mSongPlaylistBean.get(position));
customInputDialog.setOnDialogDismissListener(new CustomInputDialog.OnDialogDismissListener() {
@Override
public void onDialogDismiss(boolean dataChanged) {
if (dataChanged)
// 数据已更改,重新加载数据
page = 1;
MvpPre.getSong(SpUtil.getUserId() + "", "", page + "", "10");
}
});
customInputDialog.show();
});
// 设置删除点击事件
mAdapter.setOnDeleteClickListener(position -> {
// 处理删除点击事件
MvpPre.deleteSong(mSongPlaylistBean.get(position).getId() + "");
});
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
page++;
MvpPre.getSong(SpUtil.getUserId() + "", "", page + "", "10");
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
// EventBus.getDefault().post(new BannerRefreshEvent());
page = 1;
MvpPre.getSong(SpUtil.getUserId() + "", "", page + "", "10");
}
});
}
@Override
protected void initData() {
}
@Override
protected void onResume() {
super.onResume();
page = 1;
MvpPre.getSong(SpUtil.getUserId() + "", "", page + "", "10");
}
@Override
protected int getLayoutId() {
return R.layout.activity_user_playlist;
}
@Override
protected SingerVerificationPresenter bindPresenter() {
return new SingerVerificationPresenter(this, this);
}
@Override
public void upLoadSuccess(String url, int type) {
}
@Override
public void singerAuth(String s) {
}
@Override
public void getSong(SongPlaylist s) {
if (mAdapter != null) {
if (page == 1) {
// 第一页,直接设置数据
if (s == null || s.getLists() == null || s.getLists().size() == 0) {
return;
}
mSongPlaylistBean = s.getLists();
mAdapter.setNewData(s.getLists());
} else {
if (s == null || s.getLists() == null || s.getLists().size() == 0) {
return;
}
mSongPlaylistBean.addAll(s.getLists());
// 更多页面,添加数据
mAdapter.addData(s.getLists());
}
// 更新歌单数量
mBinding.tvNum.setText("" + s.getCount() + "首歌");
}
// 结束刷新或加载更多
if (mBinding.smartRefreshLayout != null) {
mBinding.smartRefreshLayout.finishRefresh();
mBinding.smartRefreshLayout.finishLoadMore();
}
}
@Override
public void finishComment() {
mBinding.smartRefreshLayout.finishRefresh();
mBinding.smartRefreshLayout.finishLoadMore();
}
@Override
public void deleteSong() {
page = 1;
MvpPre.getSong(SpUtil.getUserId() + "", "", page + "", "10");
}
}

View File

@@ -0,0 +1,43 @@
package com.xscm.modulemain.activity.user.conacts;
import android.app.Activity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
import com.xscm.moduleutil.bean.SongPlaylist;
import java.io.File;
/**
* 歌手验证合约类,定义了歌手验证功能所需的视图和 presenter 接口
* 该类采用了合约模式,将视图和 presenter 的接口定义在一起,便于维护
*/
public class SingerVerificationContract {
/**
* 歌手验证视图接口,继承自 IView<Activity>
* 该接口定义了歌手验证功能所需的视图层方法
*/
public interface View extends IView<Activity> {
void upLoadSuccess(String url, int type);
void singerAuth(String s);
void getSong(SongPlaylist s);
void finishComment();
void deleteSong();
}
/**
* 歌手验证的 presenter 接口,继承自 IPresenter
* 该接口定义了歌手验证功能所需的 presenter 层方法
*/
public interface IMePre extends IPresenter {
void uploadFile(File file, int type);
void singerAuth(String url);
void getSong(String userId,String roomId,String page,String pageSize);
void deleteSong(String songId);
}
}

View File

@@ -24,6 +24,8 @@ import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.activity.GiftWallActivity;
import com.xscm.modulemain.activity.user.activity.NobleTitleActivity;
import com.xscm.modulemain.activity.user.activity.RechargeActivity;
import com.xscm.modulemain.activity.user.activity.SingerVerificationActivity;
import com.xscm.modulemain.activity.user.activity.UserPlaylistActivity;
import com.xscm.modulemain.databinding.FragmentVocalRangeBinding;
import com.xscm.modulemain.activity.user.activity.BlacklistActivity;
import com.xscm.modulemain.activity.user.activity.DailyTasksActivity;
@@ -54,7 +56,7 @@ import java.util.List;
*/
public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVocalRangeBinding> implements MeConacts.View {
// private MyInfoResp mMyInfoResp;
// private MyInfoResp mMyInfoResp;
private UserInfo userInfo;
public static VocalRangeFragment newInstance() {
@@ -84,7 +86,6 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
}
@Override
protected void initView() {
mBinding.llVisit.setOnClickListener(this::onClick);
@@ -119,6 +120,8 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
mBinding.llMeHelp.setOnClickListener(this::onClick);
mBinding.llGiftWall.setOnClickListener(this::onClick);
mBinding.clNobleTitle.setOnClickListener(this::onClick);
mBinding.llSinger.setOnClickListener(this::onClick);
mBinding.llPlaylist.setOnClickListener(this::onClick);
mBinding.banner.loadImage(new XBanner.XBannerAdapter() {
@Override
@@ -140,15 +143,13 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
* type=1时该值表示房间idtype=2时表示文章id
*/
BannerModel bannerModel = (BannerModel) model;
Intent intent=new Intent(getActivity(), WebViewActivity.class);
Intent intent = new Intent(getActivity(), WebViewActivity.class);
intent.putExtra("url", bannerModel.getUrl());
intent.putExtra("title", "防骗指南");
startActivity(intent);
// ARouter.getInstance().build(ARouteConstants.H5).withString("url", bannerModel.getUrl()).withString("title", "首页横幅").navigation();
}
});
ShineTextView tvNickName = mBinding.tvNickName;
}
@@ -172,46 +173,50 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
// ARouter.getInstance().build(ARouteConstants.ME_VISIT).navigation();
// AppLogUtil.reportAppLog(AppLogEvent.C0104);
} else if (id == R.id.ll_follow) {//关注
Intent intent=new Intent(getContext(), BlacklistActivity.class);
intent.putExtra("type",0);
Intent intent = new Intent(getContext(), BlacklistActivity.class);
intent.putExtra("type", 0);
startActivity(intent);
} else if (id == R.id.ll_me_guild) {
Intent intent = new Intent(getContext(), WebViewActivity.class);
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/union/index?id=" + SpUtil.getToken());
}else if (id==R.id.ll_me_guild){
Intent intent=new Intent(getContext(), WebViewActivity.class);
intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_GUILD_URL(),SpUtil.getToken()));
intent.putExtra("title", "公会");
startActivity(intent);
} else if (id == R.id.ll_my_shopping) {
Intent intent = new Intent(getContext(), WebViewActivity.class);
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/prop/propMall?id=" + SpUtil.getToken());
}else if (id==R.id.ll_my_shopping){
Intent intent=new Intent(getContext(), WebViewActivity.class);
intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_PROP_MALL_URL(),SpUtil.getToken()));
intent.putExtra("title", "道具商城");
startActivity(intent);
}
else if (id == R.id.ll_fans) {//粉丝
Intent intent=new Intent(getContext(), BlacklistActivity.class);
intent.putExtra("type",2);
} else if (id == R.id.ll_fans) {//粉丝
Intent intent = new Intent(getContext(), BlacklistActivity.class);
intent.putExtra("type", 2);
startActivity(intent);
} else if (id == R.id.ll_friends) {//访客
// if (userInfo.getCharm_level()>=20){
Intent intent=new Intent(getContext(), BlacklistActivity.class);
intent.putExtra("type",3);
startActivity(intent);
Intent intent = new Intent(getContext(), BlacklistActivity.class);
intent.putExtra("type", 3);
startActivity(intent);
// }else {
// ToastUtils.showShort("需要魅力等级20以上才能查看");
// }
// ARouter.getInstance().build(ARouteConstants.ME_MY_FRIENDS).withInt("type", 0).navigation();
// AppLogUtil.reportAppLog(AppLogEvent.C0112);
}
else if (id == R.id.im_my_room) {
} else if (id == R.id.im_my_room) {
//我的房间
startActivity(new Intent(getContext(), MyRoomActivity.class));
} else if (id == R.id.tv_nick_name || id == R.id.tv_home) {//编辑信息
} else if (id == R.id.tv_nick_name || id == R.id.tv_home) {//编辑信息
startActivity(new Intent(getContext(), EditUserInfoActivity.class));
}else if (id == R.id.tv_my_wallet){//钱包
} else if (id == R.id.tv_my_wallet) {//钱包
startActivity(new Intent(getContext(), MyMoneyActivity.class));
}else if (id == R.id.riv_user_head ){//用户主页
} else if (id == R.id.riv_user_head) {//用户主页
Intent intent = new Intent(getContext(), UserHomepageActivity.class);
intent.putExtra("userId",SpUtil.getUserId()+"");
intent.putExtra("userId", SpUtil.getUserId() + "");
startActivity(intent);
}
// else if (id == R.id.me_my_lv) {
@@ -220,42 +225,44 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
// //装扮商城
// ARouter.getInstance().build(ARouteConstants.ME_SHOP).withString("from", "我的界面").navigation();
// }
else if (id == R.id.me_dress_up){//个性装扮
else if (id == R.id.me_dress_up) {//个性装扮
startActivity(new Intent(getContext(), PersonalityActivity.class));
}
else if (id == R.id.tv_my_bb) {
} else if (id == R.id.tv_my_bb) {
//我的背包
startActivity(new Intent(getContext(), MyBagActivity.class));
} else if (id==R.id.me_daily) {//每日任务
} else if (id == R.id.me_daily) {//每日任务
startActivity(new Intent(getContext(), DailyTasksActivity.class));
}
else if (id == R.id.iv_sz) {//设置
} else if (id == R.id.iv_sz) {//设置
// startActivity(new Intent(getContext(), SettingActivity.class));
Intent intent = new Intent(getContext(), SettingActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("userInfo", userInfo);
intent.putExtras(bundle);
startActivity(intent);
}else if (id == R.id.me_my_dan){//等级
} else if (id == R.id.me_my_dan) {//等级
Intent intent = new Intent(getContext(), WebViewActivity.class);
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/other/grade?id=" + SpUtil.getToken());
intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_GRADE_URL(),SpUtil.getToken()));
intent.putExtra("title", "等级");
startActivity(intent);
}else if (id == R.id.ll_me_help){//反馈
} else if (id == R.id.ll_me_help) {//反馈
Intent intent = new Intent(getContext(), WebViewActivity.class);
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/help?id=" + SpUtil.getToken());
// intent.putExtra("url", "http://192.168.110.17:8080/web/index.html#/pages/feedback/help?id=" + SpUtil.getToken());
intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_HELP_URL(), SpUtil.getToken()));
intent.putExtra("title", "反馈");
startActivity(intent);
}else if (id == R.id.iv_hb){//邀请
} else if (id == R.id.iv_hb) {//邀请
Intent intent = new Intent(getContext(), WebViewActivity.class);
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/other/income?id=" + SpUtil.getToken());
intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_INVITATION_URL(),SpUtil.getToken()));
intent.putExtra("title", "邀请");
startActivity(intent);
}else if (id==R.id.tv_copy){
} else if (id == R.id.tv_copy) {
copyComment(mBinding.beautifulView.getText().toString());
}else if (id==R.id.ll_recharge){//充值
} else if (id == R.id.ll_recharge) {//充值
startActivity(new Intent(getActivity(), RechargeActivity.class));
}else if (id==R.id.ll_me_income){
} else if (id == R.id.ll_me_income) {
String appId = CommonAppContext.getInstance().getCurrentEnvironment().getWxAppId(); // 填移动应用(App)的 AppId
IWXAPI api = WXAPIFactory.createWXAPI(getContext(), appId);
@@ -264,12 +271,21 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
req.corpId = "ww1de4300858c0b461"; // 企业ID
req.url = "https://work.weixin.qq.com/kfid/kfcb3d23a59c188a0e7"; // 客服URL
api.sendReq(req);
}else if (id==R.id.ll_gift_wall){//我的页面的礼物墙
} else if (id == R.id.ll_gift_wall) {//我的页面的礼物墙
startActivity(new Intent(getContext(), GiftWallActivity.class));
}else if (id==R.id.cl_noble_title){//爵位展示页面
} else if (id == R.id.cl_noble_title) {//爵位展示页面
startActivity(new Intent(getContext(), NobleTitleActivity.class));
} else if (id == R.id.ll_singer) {//歌手认证
Intent intent = new Intent(getContext(), SingerVerificationActivity.class);
intent.putExtra("isSinger", userInfo.getSinger_status());
startActivity(intent);
} else if (id == R.id.ll_playlist) {//我的歌单
Intent intent = new Intent(getContext(), UserPlaylistActivity.class);
startActivity(intent);
}
}
private void copyComment(String content) {
// 获取剪贴板管理器
ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
@@ -281,66 +297,28 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
// 可选:通知用户文本已复制
}
/**
* 查看用户主页(我的空间)
*/
public void userOnclick(View view) {
//我的空间
// if (mMyInfoResp != null) {
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", mMyInfoResp.getUser_id()).navigation();
// }
}
// @Override
// public void myInfoSuccess(MyInfoResp data) {
// this.mMyInfoResp = data;
// SpUtils.saveUserId(data.getUser_id());
// SpUtils.saveMyRoomId(data.getRoom_id());
// mBinding.tvNickName.setText(data.getNickname());
// mBinding.tvFollow.setText(data.getFollow_count());
// mBinding.tvFans.setText(data.getFans_count());
// mBinding.tvFriends.setText(data.getFriend_count());
// mBinding.tvVisit.setText(data.getVisit_count());
// mBinding.beautifulView.setText("ID:"+data.getUser_code());
// mBinding.beautifulViewCopy.setOnClickListener(v->copyUserId(data.getUser_code()));
// mBinding.rivUserHead.setData(data.getHead_picture(), data.getRank_info().getPicture(), data.getSex());
// }
@Override
public void myInfoSuccess(UserInfo data) {
SpUtil.saveUserInfo(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.setTextColor((data.getNickname_color() != null && !data.getNickname_color().equals("")) ? Color.parseColor(data.getNickname_color()) : Color.parseColor("#ffffff"));
String sex = data.getSex() == 1 ? "" : "";
mBinding.beautifulView.setText(sex + " | ID:" + data.getUser_code());
mBinding.tvFollow.setText(data.getFollow_num() + "");
mBinding.tvFans.setText(data.getFans_num() + "");
mBinding.tvFriends.setText(data.getLook_me_num() + "");
if (!data.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?"":"";
mBinding.beautifulView.setText(sex+" | ID:"+data.getUser_code());
mBinding.tvFollow.setText(data.getFollow_num()+"");
mBinding.tvFans.setText(data.getFans_num()+"");
mBinding.tvFriends.setText(data.getLook_me_num()+"");
if (data.getIs_use_code()==1){
if (data.getIs_use_code() == 1) {
mBinding.imBeautiful.setVisibility(View.VISIBLE);
}else {
} else {
mBinding.imBeautiful.setVisibility(View.GONE);
}
if (data.getAuth()==1){
if (data.getAuth() == 1) {
SpUtil.setRealName(true);
}else {
} else {
SpUtil.setRealName(false);
}
@@ -369,6 +347,14 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
}
}
if (data.getSinger_status()!=1){
mBinding.llSinger.setVisibility(View.VISIBLE);
mBinding.llPlaylist.setVisibility(View.GONE);
}else {
mBinding.llSinger.setVisibility(View.GONE);
mBinding.llPlaylist.setVisibility(View.VISIBLE);
}
}
@Override
@@ -385,6 +371,7 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
public void hideSkill(boolean hideSkill) {
}
@Override
public void wallet(WalletBean walletBean) {
mBinding.tvIcon.setText(walletBean.getCoin());

View File

@@ -0,0 +1,128 @@
package com.xscm.modulemain.activity.user.presenter;
import android.content.Context;
import com.hjq.toast.ToastUtils;
import com.xscm.modulemain.activity.user.conacts.SingerVerificationContract;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.SongPlaylist;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.presenter.BasePresenter;
import com.xscm.moduleutil.utils.Md5Utils;
import com.xscm.moduleutil.utils.cos.CosUploadManager;
import com.xscm.moduleutil.utils.oss.OSSOperUtils;
import java.io.File;
import java.lang.ref.WeakReference;
import io.reactivex.disposables.Disposable;
/**
* 歌手验证器Presenter类负责处理歌手验证相关的业务逻辑
* 继承自BasePresenter实现了SingerVerificationContract.IMePre接口
*/
public class SingerVerificationPresenter extends BasePresenter<SingerVerificationContract.View> implements SingerVerificationContract.IMePre {
// 视图接口对象用于与View层交互
SingerVerificationContract.View mView;
/**
* 构造函数初始化Presenter
*
* @param view 视图接口对象用于与View层交互
* @param context 上下文对象,用于获取系统资源等
*/
public SingerVerificationPresenter(SingerVerificationContract.View view, Context context) {
super(view, context); // 调用父类构造函数
mView = view; // 保存视图接口对象的引用
}
@Override
public void uploadFile(File file, int type) {
String fileMD5 = Md5Utils.getFileMD5(file);
String suffix = "";
if (file.getName().contains(".")) {
suffix = file.getName().substring(file.getName().lastIndexOf("."));
}
String url = "audio/" + fileMD5 + suffix;
CosUploadManager.getInstance(CommonAppContext.getInstance()).upParameters(url, file.getPath(), new CosUploadManager.UploadCallback() {
@Override
public void onSuccess(String url) {
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().upLoadSuccess(url, type);
}
@Override
public void onFailure(Exception e) {
ToastUtils.show("上传失败");
}
@Override
public void onFailure1(IllegalStateException e) {
ToastUtils.show("上传失败");
}
});
}
@Override
public void singerAuth(String url) {
api.singerAuth(url, 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().singerAuth(s);
}
});
}
@Override
public void getSong(String userId, String roomId, String page, String pageSize) {
api.getSong(userId, roomId, page, pageSize, new BaseObserver<SongPlaylist>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(SongPlaylist songPlaylist) {
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().getSong(songPlaylist);
MvpRef.get().finishComment();
}
});
}
@Override
public void deleteSong(String songId) {
api.deleteSong(songId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().deleteSong();
}
});
}
}