Commit 8a6635cd authored by sheteng's avatar sheteng

语音房间 小队语音和团队语音

parent 9714f6ae
......@@ -5,7 +5,7 @@
<map>
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_connect.xml" value="0.3328125" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_connect_channel.xml" value="0.3328125" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_login.xml" value="0.1612008072653885" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_login.xml" value="0.1" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_main2.xml" value="0.1612008072653885" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_test.xml" value="0.3328125" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/fragment_message.xml" value="0.291213768115942" />
......
......@@ -69,7 +69,7 @@ dependencies {
implementation 'org.greenrobot:eventbus:3.1.1'
// implementation(name: 'ccim-release', ext: 'aar')
implementation(name: 'janus-release', ext: 'aar')
implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs')
implementation project(path: ':ccim')
implementation 'com.google.protobuf:protobuf-java:3.13.0'
implementation 'com.google.protobuf:protobuf-java-util:3.12.0'
......
......@@ -76,7 +76,7 @@ public class ChannelMsgAdapter extends BaseAdapter {
if (messageContent.getMsgType()== MessageContent.MessageType.MESSAGE_TYPE_TEXT) {
mHolder.msg_content.setText(messageContent.getContent());
} else {
mHolder.msg_content.setText(messageContent.getVoiceContent());
// mHolder.msg_content.setText(messageContent.getVoiceContent());
}
convertView.setOnClickListener(new View.OnClickListener() {
@Override
......
......@@ -21,8 +21,10 @@ import com.ccwangluo.ccim.modle.Dialog;
import com.ccwangluo.im.R;
import com.ccwangluo.im.data.LoginViewModel;
import com.ccwangluo.im.listener.OnContactClickLisener;
import com.ccwangluo.im.util.ToastUtil;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
......@@ -206,8 +208,8 @@ public class ContactExpandableAdapter extends BaseExpandableListAdapter {
childrenHolder.contactId.setText("userid: " + dataList.get(childPosition).getContactUserId());
childrenHolder.contactName.setText("username: " + dataList.get(childPosition).getContactUserName());
childrenHolder.netStatus.setText("netStatus: " + dataList.get(childPosition).getNetStatus().toString());
// childrenHolder.status.setText("status: " + dataList.get(childPosition).);
// childrenHolder.unReadMsg.setText("unReadMsg : " + dataList.get(childPosition).().toString());
childrenHolder.status.setText("blockstatus: " + loginViewModel.blocklist.getValue().contains(dataList.get(childPosition).getContactUserId()));
// childrenHolder.unReadMsg.setText("unReadMsg : " + dataList.get(childPosition).);
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
......@@ -226,7 +228,7 @@ public class ContactExpandableAdapter extends BaseExpandableListAdapter {
}
private void showAlertDialog(Contact contact) {
String[] strings = {"删除联系人", "拉黑联系人", "举报用户", "移动联系人群组"};
String[] strings = {"删除联系人", "拉黑联系人", "举报用户", "移动联系人群组","移出黑名单"};
AlertDialog alertDialog = new AlertDialog
.Builder(context)
.setItems(strings, new DialogInterface.OnClickListener() {
......@@ -293,6 +295,24 @@ public class ContactExpandableAdapter extends BaseExpandableListAdapter {
case 3:
moveContactGroup(contact);
break;
case 4:
Collection<Long> value = loginViewModel.blocklist.getValue();
if (value.contains(contact.getContactUserId())){
CCIMClient.getInstance().unblockContact(contact.getContactUserId(), new ResultEventCallback<Void>() {
@Override
public void onSuccess(Void unused) {
loginViewModel.getContactList();
}
@Override
public void onFailed(int errorCode) {
ToastUtil.show(context,"移除失败");
}
});
}else {
ToastUtil.show(context,"用户不在黑名单里");
}
break;
}
}
})
......@@ -359,6 +379,7 @@ public class ContactExpandableAdapter extends BaseExpandableListAdapter {
public TextView contactName;
public TextView netStatus;
public TextView status;
public TextView unReadMsg;
}
......
......@@ -27,6 +27,7 @@ public class LoginViewModel extends ViewModel {
public MutableLiveData<Collection<Contact>> contactList = new MutableLiveData<>();
public MutableLiveData<Collection<ContactGroup>> contactGroupList = new MutableLiveData<>();
public MutableLiveData<Collection<Dialog>> dialogList = new MutableLiveData<>();
public MutableLiveData<Collection<Long>> blocklist = new MutableLiveData<>();
public MutableLiveData<MessageContent> privateMsgList = new MutableLiveData<>();
public MutableLiveData<MessageContent> channelMsgList = new MutableLiveData<>();
......@@ -65,6 +66,7 @@ public class LoginViewModel extends ViewModel {
contactList.postValue(pullContactsRes.getContacts());
contactGroupList.postValue(pullContactsRes.getContactGroups());
dialogList.postValue(pullContactsRes.getDialogs());
blocklist.postValue(pullContactsRes.getBlocklist());
}
@Override
......
......@@ -181,9 +181,14 @@ public class NotificationsFragment extends Fragment {
roomeId.setHint("room id");
roomeId.setInputType(InputType.TYPE_CLASS_NUMBER);
roomeId.requestFocus();
final EditText teamIdTx = new EditText(getContext());
teamIdTx.setHint("team id");
teamIdTx.setInputType(InputType.TYPE_CLASS_NUMBER);
teamIdTx.requestFocus();
LinearLayout linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.addView(roomeId);
linearLayout.addView(teamIdTx);
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("create channel").setIcon(android.R.drawable.ic_dialog_info).setView(linearLayout)
.setNegativeButton("Cancel", null);
......@@ -191,7 +196,8 @@ public class NotificationsFragment extends Fragment {
@Override
public void onClick(DialogInterface dialog, int which) {
String roomId = roomeId.getText().toString();
CCIMClient.getInstance().joinAudioRoom(getContext(), Integer.parseInt(roomId), new AudioRoomListener() {
String teamId = teamIdTx.getText().toString();
CCIMClient.getInstance().joinAudioRoom(getContext(), Integer.parseInt(roomId),Integer.parseInt(teamId), new AudioRoomListener() {
@Override
public void onJoinSuccess() {
ToastUtil.show(getContext(), "onJoinSuccess");
......@@ -237,6 +243,19 @@ public class NotificationsFragment extends Fragment {
CCIMClient.getInstance().exitAudioRoom();
}
});
binding.audioTargetWorld.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCIMClient.getInstance().audioTargetWorld(true);
}
});
binding.audioTargetTeam.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCIMClient.getInstance().audioTargetWorld(false);
}
});
return root;
}
......
......@@ -69,7 +69,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hint="ip"
android:text="106.15.237.67"
android:text="10.3.15.85"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionDone"
android:selectAllOnFocus="true"
......
......@@ -57,6 +57,25 @@
android:id="@+id/enableAudio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_marginLeft="10dp"
android:text="小队语音切换"
android:id="@+id/audioTargetTeam"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:layout_marginLeft="10dp"
android:text="世界语音切换"
android:id="@+id/audioTargetWorld"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<ListView
......
......@@ -24,13 +24,6 @@
android:label="频道"
tools:layout="@layout/fragment_notifications" />
<fragment
android:id="@+id/navigation_connect"
android:name="com.ccwangluo.im.ui.dashboard.ConnectFragment"
android:label="聊天"
app:defaultNavHost="true"
tools:layout="@layout/fragment_connect" />
<!-- <fragment-->
<!-- android:id="@+id/navigation_channel_connect"-->
<!-- android:name="com.ccwangluo.im.ui.notifications.ConnectChannelFragment"-->
......
......@@ -44,8 +44,7 @@ android {
android.libraryVariants.all { variant ->
variant.outputs.all {
def date = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08"))
outputFileName = "ccim_${date}.aar"
outputFileName = "ccim_${android.defaultConfig.versionName}.aar"
}
}
......@@ -76,7 +75,7 @@ repositories {
dependencies {
compileOnly(name: 'janus-release', ext: 'aar')
compileOnly fileTree(include: ['*.jar','*.aar'], dir: 'libs')
// implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.protobuf:protobuf-java:3.13.0'
implementation 'com.google.protobuf:protobuf-java-util:3.12.0'
......@@ -87,5 +86,6 @@ dependencies {
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
implementation 'com.karumi:dexter:6.2.3'
implementation 'ch.threema:webrtc-android:100.0.0'
// implementation 'ch.threema:webrtc-android:100.0.0'
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
......@@ -53,7 +54,7 @@ import ccim.protocol.Push;
public class CCIMClient {
private final Logger logger = Logger.getLogger(CCIMClient.class.getName());
public static final Logger logger = Logger.getLogger(CCIMClient.class.getName());
private static SocketManager socketManager;
private static CallBackManager<Chat.ChatResponseMessage> callBackManager;
private static ContactManager contactManager;
......@@ -337,6 +338,10 @@ public class CCIMClient {
contactManager.blockContact(userId, callback);
}
public void unblockContact(Long userId, ResultEventCallback<Void> callback) {
contactManager.unblockContact(userId, callback);
}
/**
* 举报违规用户
*/
......@@ -709,17 +714,26 @@ public class CCIMClient {
/**
* 加入房间
*/
public void joinAudioRoom(Context context, int roomId, AudioRoomListener callback) {
public void joinAudioRoom(Context context, int roomId, int teamId, AudioRoomListener callback) {
JanusConfImpl conf = new JanusConfImpl();
conf.url(audioServer);
conf.plugin(JanusPlugins.VIDEOROOM);
if (janusService != null) {
janusService.stop();
}
janusService = new JanusService(context, roomId, user, callback);
janusService = new JanusService(context, roomId, user, teamId, callback);
janusService.start(context, conf);
}
/**
* 切换语音目标
*/
public void audioTargetWorld(boolean enable){
if (janusService != null){
janusService.targetWorld(enable);
}
}
/**
* 退出房间
*/
......@@ -750,4 +764,6 @@ public class CCIMClient {
isConnected = false;
socketManager.disConnect();
}
}
......@@ -2,14 +2,10 @@ package com.ccwangluo.ccim.audio;
import android.Manifest;
import android.content.Context;
import android.media.AudioManager;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.ccwangluo.ccim.CCIMClient;
import com.ccwangluo.ccim.listener.AudioRoomListener;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import com.ccwangluo.ccim.modle.User;
import com.ccwangluo.ccim.util.ErrorCode;
import com.github.helloiampau.janus.generated.Bundle;
......@@ -29,13 +25,11 @@ import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
import org.webrtc.AudioTrack;
import org.webrtc.DataChannel;
import org.webrtc.EglBase;
import org.webrtc.Logging;
import org.webrtc.PeerConnection;
import java.util.List;
import java.util.logging.Logger;
......@@ -50,14 +44,16 @@ public class JanusService extends JanusDelegate {
// private AudioManager audioManager;
private AudioTrack audioTrack;
private int teamId;
private AppRTCAudioManager audioManager;
public JanusService(Context context, Integer roomId, User user, AudioRoomListener callback) {
public JanusService(Context context, Integer roomId, User user, int teamId, AudioRoomListener callback) {
audioManager = AppRTCAudioManager.create(context);
this.user = user;
this.roomId = roomId;
this.callback = callback;
this.teamId = teamId;
}
......@@ -95,6 +91,14 @@ public class JanusService extends JanusDelegate {
}
}
public void targetWorld(boolean enable) {
if (isJoin) {
Bundle payload = Bundle.create();
payload.setBool("world", enable);
this._janus.dispatch(JanusCommands.SET_TARGET, payload);
}
}
@Override
public void onClose() {
......@@ -121,6 +125,7 @@ public class JanusService extends JanusDelegate {
Bundle payload = Bundle.create();
payload.setInt("room", roomId);
payload.setString("display", new Gson().toJson(user));
payload.setInt("team", teamId);
this._janus.dispatch(JanusCommands.JOIN, payload);
CCIMClient.getInstance().handler.post(new Runnable() {
@Override
......@@ -240,7 +245,7 @@ public class JanusService extends JanusDelegate {
payload.setInt("room", roomId);
payload.setInt("feed", publisher.getInt("id", -1));
// payload.setInt("feed", publisher.getString("display", ""));
payload.setInt("team", teamId);
// Publisher pub = new Publisher(publisher);
// publishersMap.put(pub.handleId, pub);
......
......@@ -394,6 +394,32 @@ public class ContactManager {
});
}
/**
* 移出拉黑
* @param userId
* @param callback
*/
public void unblockContact(Long userId, ResultEventCallback<Void> callback) {
Chat.ChatRequestMessage.Builder builder = Chat.ChatRequestMessage.newBuilder();
ccim.protocol.User.UnblockUserRequest blockContactRequest = ccim.protocol.User.UnblockUserRequest.newBuilder()
.setBlockedUserId(userId)
.build();
builder.setUnblockUserReq(blockContactRequest);
int id = socketManager.sendRequest(builder);
callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
blocklist.remove(userId);
callback.onSuccess(null);
}
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
});
}
/**
* 举报违规用户
*/
......@@ -496,4 +522,6 @@ public class ContactManager {
dialog.setNetStatus(netStatus);
}
}
}
......@@ -21,7 +21,7 @@ import ccim.protocol.Chat;
import ccim.protocol.Common;
public class SocketManager {
private final Logger logger = Logger.getLogger(CCIMClient.class.getName());
private final Logger logger = CCIMClient.logger;
private static String SERVER_IP = "106.15.237.67";
private static int SERVER_PORT = 8000;
......@@ -48,7 +48,7 @@ public class SocketManager {
}
public void connectChatServer(String appKey, String userName, String extData, Long userId, Long ts, String sign,String gameServer) {
public void connectChatServer(String appKey, String userName, String extData, Long userId, Long ts, String sign, String gameServer) {
logger.info("send connect");
Chat.ChatRequestMessage.Builder builder = Chat.ChatRequestMessage.newBuilder();
Chat.ConnectRequest connectRequest = Chat.ConnectRequest.newBuilder()
......@@ -80,15 +80,15 @@ public class SocketManager {
});
}
public void initChat(Context context, String appKey, String userName, String extData, Long userId, Long ts, String sign,String server, OnClientConnectListener resultCallback) {
public void initChat(Context context, String appKey, String userName, String extData, Long userId, Long ts, String sign, String server, OnClientConnectListener resultCallback) {
onConnectListener = resultCallback;
if (socketClient == null) {
socketClient = new NettyChatClient(context, SERVER_IP, SERVER_PORT,executor);
socketClient = new NettyChatClient(context, SERVER_IP, SERVER_PORT, executor);
}
socketClient.connect(new MessageListener() {
@Override
public void onServerConnect() {
connectChatServer(appKey, userName, extData, userId, ts, sign,server);
connectChatServer(appKey, userName, extData, userId, ts, sign, server);
}
@Override
......@@ -114,7 +114,7 @@ public class SocketManager {
}
if (data.getHeader().getCode() == Common.StatusCode.STATUS_CODE_NO_AUTH_ERROR) { //断线重连
connectChatServer(appKey, userName, extData, userId, ts, sign,server);
connectChatServer(appKey, userName, extData, userId, ts, sign, server);
}
int seq = data.getHeader().getSeq();
ResultEventCallback<Chat.ChatResponseMessage> callBack = callBackManager.getCallBack(seq);
......@@ -123,7 +123,7 @@ public class SocketManager {
if (data.getHeader().getCode() == Common.StatusCode.STATUS_CODE_OK) {
callBack.onSuccess(data);
} else {
if (data.getHeader().getCode() == Common.StatusCode.UNRECOGNIZED){
if (data.getHeader().getCode() == Common.StatusCode.UNRECOGNIZED) {
callBack.onFailed(ErrorCode.ERRORCODE_NOT_EXISTS);
} else {
callBack.onFailed(data.getHeader().getCode().getNumber());
......
......@@ -94,22 +94,6 @@ public class NettyChatClient implements SocketClient {
});
}
public boolean getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return true;
if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return true;
}
return false;
}
@Override
public void sendMsg(Object msg) {
if (channelFuture == null) {
......
......@@ -18,6 +18,6 @@ public class ErrorCode {
public static final int ERROR_PERMISSION_DENIE = 912; //权限拒绝
public static final int JOIN_AUDIO_FAILED = 913; //加入语音失败
public static final int JOIN_AUDIO_FAILED_NO_SUCH_ROOM = 914; //没有这个房间
public static final int JOIN_AUDIO_FAILED_JOINED = 915; //已经加入房间,不能同时加入多个房间
}
......@@ -37,6 +37,7 @@ message ChatRequestMessage {
ReportIllegalUserRequest report_illegal_user_req = 31; // 举报违规用户
BlockUserRequest block_user_req = 32; // 用户拉入黑名单
PreUploadSignRequest pre_upload_sign_req = 33; // 预上传获取签名
UnblockUserRequest unblock_user_req = 34; // 拉出黑名单
SendMessageRequest send_msg_req = 42; // 发送消息
SendChannelMessageRequest send_channel_msg_req = 43; // 发送频道消息
......@@ -78,6 +79,7 @@ message ChatResponseMessage {
ReportIllegalUserResponse report_illegal_user_res = 31;
BlockUserResponse block_user_res = 32;
PreUploadSignResponse pre_upload_sign_res = 33;
UnblockUserResponse unblock_user_res = 34;
SendMessageResponse send_msg_res = 41;
SendChannelMessageResponse send_channel_msg_res = 42;
......
......@@ -18,3 +18,10 @@ message PreUploadSignResponse {
string pre_signed_url = 1;
string filename = 2;
}
message UnblockUserRequest {
int64 blocked_user_id = 1;
}
message UnblockUserResponse {
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment