package io.rong.callkit; import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v4.app.Fragment; import android.widget.Toast; import java.util.ArrayList; import io.rong.calllib.RongCallClient; import io.rong.calllib.RongCallCommon; import io.rong.calllib.RongCallSession; import io.rong.common.RLog; import io.rong.imkit.RongExtension; import io.rong.imkit.RongIM; import io.rong.imkit.plugin.IPluginModule; import io.rong.imkit.utilities.PermissionCheckUtil; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; import io.rong.imlib.model.Discussion; /** * Created by weiqinxiao on 16/8/16. */ public class AudioPlugin implements IPluginModule { private static final String TAG = "AudioPlugin"; private ArrayList<String> allMembers; private Context context; private Conversation.ConversationType conversationType; private String targetId; @Override public Drawable obtainDrawable(Context context) { return context.getResources().getDrawable(R.drawable.rc_ic_phone_selector); } @Override public String obtainTitle(Context context) { return context.getString(R.string.rc_voip_audio); } @Override public void onClick(final Fragment currentFragment, final RongExtension extension) { String[] permissions = {Manifest.permission.RECORD_AUDIO}; if (!PermissionCheckUtil.requestPermissions(currentFragment, permissions)) { return; } context = currentFragment.getActivity().getApplicationContext(); conversationType = extension.getConversationType(); targetId = extension.getTargetId(); RongCallSession profile = RongCallClient.getInstance().getCallSession(); if (profile != null && profile.getActiveTime() > 0) { Toast.makeText(context, currentFragment.getString(R.string.rc_voip_call_start_fail), Toast.LENGTH_SHORT).show(); return; } ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo == null || !networkInfo.isConnected() || !networkInfo.isAvailable()) { Toast.makeText(context, currentFragment.getString(R.string.rc_voip_call_network_error), Toast.LENGTH_SHORT).show(); return; } if (conversationType.equals(Conversation.ConversationType.PRIVATE)) { Intent intent = new Intent(RongVoIPIntent.RONG_INTENT_ACTION_VOIP_SINGLEAUDIO); intent.putExtra("conversationType", conversationType.getName().toLowerCase()); intent.putExtra("targetId", targetId); intent.putExtra("callAction", RongCallAction.ACTION_OUTGOING_CALL.getName()); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setPackage(context.getPackageName()); context.getApplicationContext().startActivity(intent); } else if (conversationType.equals(Conversation.ConversationType.DISCUSSION)) { RongIM.getInstance().getDiscussion(targetId, new RongIMClient.ResultCallback<Discussion>() { @Override public void onSuccess(Discussion discussion) { Intent intent = new Intent(context, CallSelectMemberActivity.class); allMembers = (ArrayList<String>) discussion.getMemberIdList(); intent.putStringArrayListExtra("allMembers", allMembers); String myId = RongIMClient.getInstance().getCurrentUserId(); ArrayList<String> invited = new ArrayList<>(); invited.add(myId); intent.putStringArrayListExtra("invitedMembers", invited); intent.putExtra("mediaType", RongCallCommon.CallMediaType.AUDIO.getValue()); extension.startActivityForPluginResult(intent, 110, AudioPlugin.this); } @Override public void onError(RongIMClient.ErrorCode e) { RLog.d(TAG, "get discussion errorCode = " + e.getValue()); } }); } else if (conversationType.equals(Conversation.ConversationType.GROUP)) { Intent intent = new Intent(context, CallSelectMemberActivity.class); String myId = RongIMClient.getInstance().getCurrentUserId(); ArrayList<String> invited = new ArrayList<>(); invited.add(myId); intent.putStringArrayListExtra("invitedMembers", invited); intent.putExtra("groupId", targetId); intent.putExtra("mediaType", RongCallCommon.CallMediaType.AUDIO.getValue()); extension.startActivityForPluginResult(intent, 110, this); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) { return; } Intent intent = new Intent(RongVoIPIntent.RONG_INTENT_ACTION_VOIP_MULTIAUDIO); ArrayList<String> userIds = data.getStringArrayListExtra("invited"); userIds.add(RongIMClient.getInstance().getCurrentUserId()); intent.putExtra("conversationType", conversationType.getName().toLowerCase()); intent.putExtra("targetId", targetId); intent.putExtra("callAction", RongCallAction.ACTION_OUTGOING_CALL.getName()); intent.putStringArrayListExtra("invitedUsers", userIds); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setPackage(context.getPackageName()); context.getApplicationContext().startActivity(intent); } }