feat : 麦 人声音乐 开关功能, 初次提交

This commit is contained in:
eggmanQQQ
2024-10-10 19:42:26 +08:00
parent 04b71fa067
commit 4dc4dfc93b
9 changed files with 131 additions and 27 deletions

View File

@@ -35,6 +35,7 @@ import com.chwl.app.star.StarFragment;
import com.chwl.app.support.PreloadResourceViewModel;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.core.home.bean.MainTabInfo;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.settings.SettingsModel;
import com.chwl.library.utils.JavaUtil;
import com.netease.nim.uikit.StatusBarUtil;
@@ -666,6 +667,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Override
public void exitRoom(RoomInfo roomInfo) {
AudioEngineManager.get().setNotRecord(false);
closeOpenRoomAnimation();
DaemonService.stop(MainActivity.this);
}

View File

@@ -9,7 +9,7 @@ public abstract class BottomViewListenerWrapper {
}
public void onOpenMicBtnClick() {
public void onOpenMicBtnClick(int type) {
}

View File

@@ -42,6 +42,7 @@ import com.alibaba.fastjson.JSONObject;
import com.chwl.app.notify.RoomNotifyManager;
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.library.widget.SVGAView;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.room.game.bean.BaiShunGameConfig;
@@ -814,6 +815,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
public void exitRoom(RoomInfo currentRoomInfo) {
if (currentRoomInfo != null && currentRoomInfo.getUid() == roomUid) {
finish();
AudioEngineManager.get().setNotRecord(false);
}
}

View File

@@ -83,6 +83,7 @@ import com.chwl.core.Constants
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.bean.RoomMicInfo
import com.chwl.core.contacts.MyConstant
import com.chwl.core.gift.GiftModel
import com.chwl.core.gift.bean.BoomMsgAnimBean
import com.chwl.core.gift.bean.BoomMsgAwardList
@@ -142,6 +143,7 @@ import com.chwl.library.utils.ListUtils
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import com.chwl.library.utils.UIUtils
import com.example.lib_utils.ktx.getString
import com.google.gson.Gson
import com.netease.nim.uikit.common.antispam.AntiSpamEvent
import com.netease.nimlib.sdk.StatusCode
@@ -389,6 +391,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
openOrCloseGiftValue(true)
updateView()
updateMicBtn()
AudioEngineManager.get().isNotRecord = false
microView.setOnMicroItemClickListener(this)
mDisposable = IMNetEaseManager.get().chatRoomEventObservable
.subscribe { onReceiveRoomEvent(it) }
@@ -1456,37 +1459,69 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
* 底部按鈕點擊處理
*/
open inner class BaseRoomBottomViewWrapper : BottomViewListenerWrapper() {
@SuppressLint("CheckResult")
override fun onOpenMicBtnClick() {
override fun onOpenMicBtnClick(type : Int) {
//todo do 关麦开麦
val roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(AuthModel.get().currentUid.toString())
if (roomQueueInfo?.mRoomMicInfo == null) return
//先判斷麥上是否是開麥的
if (!roomQueueInfo.mRoomMicInfo.isMicMute && !AudioEngineManager.get().isAudienceRole) {
if (!isHavingMicPermissions) {
val rxPermissions = RxPermissions(this@BaseRoomFragment)
rxPermissions.request(Manifest.permission.RECORD_AUDIO)
.subscribe { aBoolean: Boolean ->
if (aBoolean) {
AudioEngineManager.get().isMute = !AudioEngineManager.get().isMute
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
if (type == MyConstant.MicType.open) {
AudioEngineManager.get().isMute = false
AudioEngineManager.get().isNotRecord = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
}else if (type == MyConstant.MicType.music) {
AudioEngineManager.get().isMute = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
AudioEngineManager.get().isNotRecord = true
}else if (type == MyConstant.MicType.close) {
AudioEngineManager.get().isMute = true
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE)
AudioEngineManager.get().isNotRecord = false
}
updateMicBtn()
} else {
toast("開啟權限後才能開麥")
toast(R.string.ask_again.getString())
}
}
return
}
AudioEngineManager.get().isMute = !AudioEngineManager.get().isMute
if (type == MyConstant.MicType.open) {
AudioEngineManager.get().isMute = false
AudioEngineManager.get().isNotRecord = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
}else if (type == MyConstant.MicType.music) {
AudioEngineManager.get().isMute = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
AudioEngineManager.get().isNotRecord = true
}else if (type == MyConstant.MicType.close) {
AudioEngineManager.get().isMute = true
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE)
AudioEngineManager.get().isNotRecord = false
}
updateMicBtn()
if (AudioEngineManager.get().isMute) {
AudioEngineManager.get().stopLocalAudio()
} else if (AvRoomDataManager.get().isOnMic(myUid)) {
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
}
}
}
override fun onSendFaceBtnClick() {
if (AvRoomDataManager.get().isOnMic(myUid) || AvRoomDataManager.get().isRoomOwner) {
if (dynamicFaceDialog == null) {

View File

@@ -16,13 +16,15 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.chwl.core.contacts.MyConstant;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.manager.AvRoomDataManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.chwl.library.utils.SizeUtils;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.netease.nimlib.sdk.msg.model.RecentContact;
@@ -32,7 +34,6 @@ import com.chwl.app.avroom.BottomViewListenerWrapper;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.room_chat.activity.RoomMsgActivity;
import com.chwl.core.helper.ImHelperUtils;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMMessageManager;
import com.chwl.core.pay.event.FirstChargeEvent;
import com.chwl.core.room.bean.RoomInfo;
@@ -227,11 +228,35 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
}
public void setMicBtnOpen(boolean isOpen) {
if (isOpen) {
openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
if(openMic == null){
return;
}
// if (isOpen) {
// openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
// } else {
// openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
// }
//
RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (currentRoomInfo != null) {
openMic.setEnabled(true);
if(!AudioEngineManager.get().isMute()){
if (AudioEngineManager.get().isNotRecord()) {
openMic.setImageResource(R.drawable.room_menu_ic_mic_music);
} else {
openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
}
}else{
openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
}
} else {
openMic.setEnabled(false);
openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
}
}
public void setRemoteMuteOpen(boolean isOpen) {
@@ -317,10 +342,7 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
public void onClick(View v) {
switch (v.getId()) {
case R.id.icon_room_open_mic:
if (wrapper != null) {
wrapper.onOpenMicBtnClick();
}
// showMicSetDialog(openMic);
showMicSetDialog(openMic);
break;
case R.id.tv_room_send_msg_input:
@@ -468,6 +490,8 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
contentView = LayoutInflater.from(getContext()).inflate(R.layout.popup_mic_set, null);
micSetPopupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
micSetPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
micSetPopupWindow.setTouchable(true);
micSetPopupWindow.setFocusable(false);
// micSetPopupWindow.setAnimationStyle(R.style.style_anim_mic_set);
} else {
contentView = micSetPopupWindow.getContentView();
@@ -477,16 +501,28 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
ImageView micMusic = contentView.findViewById(R.id.micMusic);
ImageView micOn = contentView.findViewById(R.id.micOn);
micOff.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
});
micMusic.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
});
micOn.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
if (wrapper != null) {
wrapper.onOpenMicBtnClick(MyConstant.MicType.open);
}
});
micMusic.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
if (wrapper != null) {
wrapper.onOpenMicBtnClick(MyConstant.MicType.music);
}
});
micOff.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
if (wrapper != null) {
wrapper.onOpenMicBtnClick(MyConstant.MicType.close);
}
});
int[] vLoc = new int[2];
parent.getLocationInWindow(vLoc);
try {

View File

@@ -277,10 +277,12 @@ public class MessageView extends FrameLayout {
private boolean isChat(){return mMsgType.equals(ResUtil.getString(R.string.send_msg));}
private boolean isGift(){return mMsgType.equals(ResUtil.getString(R.string.send_gift_tab_title));}
//todo do 消息类型分类 需要进一步判断
private boolean isChatMsg(ChatRoomMessage msg){
return (msg.getMsgType() == MsgTypeEnum.text);
}
//todo do 消息类型分类 需要进一步判断
private boolean isGiftMsg(ChatRoomMessage msg){
return (msg.getMsgType() == MsgTypeEnum.custom);
}

View File

@@ -46,7 +46,7 @@ public class LogoutHelper {
if (e instanceof SocketTimeoutException || e instanceof SocketException || e instanceof HttpException) {
activity.toast(ResUtil.getString(R.string.login_helper_logouthelper_013));
} else if (e instanceof BanAccountException) {
//todo do 显示id 跟 原因
//todo do 封禁 显示id 跟 原因
BanAccountException exception = (BanAccountException) e;
String text = ResUtil.getString(R.string.login_helper_logouthelper_02) + exception.getMessage() + ResUtil.getString(R.string.login_helper_logouthelper_03);
int start = text.length();

View File

@@ -1,6 +1,8 @@
package com.chwl.core.manager;
import com.chwl.library.utils.config.BasicConfig;
import com.chwl.library.utils.pref.CommonPref;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.chwl.core.manager.agora.RtcEngineManager;
import com.chwl.core.manager.trtc.TRtcEngineManager;
@@ -180,9 +182,29 @@ public class AudioEngineManager {
public void adjustRecordingSignalVolume(int volume) {
if (this.iAudioEngine == null) return;
this.iAudioEngine.adjustRecordingSignalVolume(volume);
// this.iAudioEngine.adjustRecordingSignalVolume(volume);
if (notRecord) {
this.iAudioEngine.adjustRecordingSignalVolume(0);
} else {
this.iAudioEngine.adjustRecordingSignalVolume(volume);
}
}
private boolean notRecord = false;
public void setNotRecord(boolean isNotRecord){
notRecord = isNotRecord;
if (notRecord) {
adjustRecordingSignalVolume(0);
} else {
adjustRecordingSignalVolume(VolumeSetting.getVoiceVolume());
}
}
public boolean isNotRecord() {
return notRecord;
}
public int startAudioMixing(String filePath, boolean loopback, int cycle) {
if (this.iAudioEngine == null) {
return 0;

View File

@@ -10,6 +10,7 @@ import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.core.manager.VolumeSetting;
import com.chwl.core.music.bean.LocalMusicInfo;
import com.chwl.core.music.db.bean.LocalMusicBean;
import com.chwl.core.music.db.model.LocalMusicDbModel;
@@ -52,8 +53,10 @@ public class PlayerModel extends BaseModel implements IPlayerModel {
private PlayerModel() {
playerListMusicInfos = new ArrayList<>();
state = STATE_STOP;
volume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("volume", 50);
recordingVolume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("recordingVolume", 50);
// volume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("volume", 50);
// recordingVolume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("recordingVolume", 50);
volume = VolumeSetting.getMusicVolume();
recordingVolume = VolumeSetting.getVoiceVolume();
mDisposable = IMNetEaseManager.get().getChatRoomEventObservable()
.subscribe(new Consumer<RoomEvent>() {
@@ -273,14 +276,16 @@ public class PlayerModel extends BaseModel implements IPlayerModel {
@Override
public void seekVolume(int volume) {
this.volume = volume;
CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("volume", volume);
// CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("volume", volume);
VolumeSetting.putMusicVolume(volume);
AudioEngineManager.get().adjustAudioMixingVolume(volume);
}
@Override
public void seekRecordingVolume(int volume) {
this.recordingVolume = volume;
CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("recordingVolume", volume);
// CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("recordingVolume", volume);
VolumeSetting.putVoiceVolume(volume);
AudioEngineManager.get().adjustRecordingSignalVolume(volume);
}