mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-27 07:49:28 +00:00
Can hang up conversation
This commit is contained in:
parent
f08f1940fc
commit
959afda2cf
@ -239,6 +239,24 @@ public class CallsHelper extends BaseHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hang up a call
|
||||||
|
*
|
||||||
|
* @param callID Target call ID
|
||||||
|
* @return TRUE for a success / FALSE else
|
||||||
|
*/
|
||||||
|
public boolean hangUp(int callID){
|
||||||
|
APIRequest request = new APIRequest(getContext(), "calls/hangUp");
|
||||||
|
request.addInt("call_id", callID);
|
||||||
|
try {
|
||||||
|
return request.exec().getJSONObject().has("success");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Turn a {@link JSONObject} object into a {@link CallsConfiguration} object.
|
* Turn a {@link JSONObject} object into a {@link CallsConfiguration} object.
|
||||||
|
@ -8,6 +8,8 @@ import android.support.annotation.Nullable;
|
|||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ImageButton;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@ -23,6 +25,7 @@ import org.communiquons.android.comunic.client.data.models.CallsConfiguration;
|
|||||||
import org.communiquons.android.comunic.client.data.utils.AccountUtils;
|
import org.communiquons.android.comunic.client.data.utils.AccountUtils;
|
||||||
import org.communiquons.android.comunic.client.ui.arrays.CallPeersConnectionsList;
|
import org.communiquons.android.comunic.client.ui.arrays.CallPeersConnectionsList;
|
||||||
import org.communiquons.android.comunic.client.ui.asynctasks.GetCallInformationTask;
|
import org.communiquons.android.comunic.client.ui.asynctasks.GetCallInformationTask;
|
||||||
|
import org.communiquons.android.comunic.client.ui.asynctasks.HangUpCallTask;
|
||||||
import org.communiquons.android.comunic.client.ui.asynctasks.RespondToCallTask;
|
import org.communiquons.android.comunic.client.ui.asynctasks.RespondToCallTask;
|
||||||
import org.communiquons.android.comunic.client.ui.models.CallPeerConnection;
|
import org.communiquons.android.comunic.client.ui.models.CallPeerConnection;
|
||||||
import org.communiquons.android.comunic.client.ui.receivers.PendingCallsBroadcastReceiver;
|
import org.communiquons.android.comunic.client.ui.receivers.PendingCallsBroadcastReceiver;
|
||||||
@ -85,6 +88,11 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
*/
|
*/
|
||||||
private SignalExchangerClient mSignalExchangerClient = null;
|
private SignalExchangerClient mSignalExchangerClient = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify whether call was stopped or not
|
||||||
|
*/
|
||||||
|
private boolean mStopped = false;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connections list
|
* Connections list
|
||||||
@ -102,6 +110,7 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
* Views
|
* Views
|
||||||
*/
|
*/
|
||||||
private ProgressBar mProgressBar;
|
private ProgressBar mProgressBar;
|
||||||
|
private ImageButton mHangUpButton;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -184,7 +193,8 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
private void initViews(){
|
private void initViews(){
|
||||||
|
|
||||||
mProgressBar = findViewById(R.id.progressBar);
|
mProgressBar = findViewById(R.id.progressBar);
|
||||||
|
mHangUpButton = findViewById(R.id.hangUp);
|
||||||
|
mHangUpButton.setOnClickListener(v -> hangUp());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,6 +224,8 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
*/
|
*/
|
||||||
private void onGotCallInformation(@Nullable CallInformation info){
|
private void onGotCallInformation(@Nullable CallInformation info){
|
||||||
|
|
||||||
|
if(mStopped) return;
|
||||||
|
|
||||||
if(info == null){
|
if(info == null){
|
||||||
Toast.makeText(this, R.string.err_get_call_info, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.err_get_call_info, Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
@ -225,7 +237,7 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
//Check if everyone left the conversation
|
//Check if everyone left the conversation
|
||||||
if(mCallInformation.hasAllMembersLeftCallExcept(AccountUtils.getID(this))){
|
if(mCallInformation.hasAllMembersLeftCallExcept(AccountUtils.getID(this))){
|
||||||
Toast.makeText(this, R.string.notice_call_terminated, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.notice_call_terminated, Toast.LENGTH_SHORT).show();
|
||||||
finish();
|
hangUp();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,6 +270,9 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
|
|
||||||
|
|
||||||
private void processClientsConnections(){
|
private void processClientsConnections(){
|
||||||
|
|
||||||
|
if(mStopped) return;
|
||||||
|
|
||||||
//Process each peer connection
|
//Process each peer connection
|
||||||
for(CallMember member : mCallInformation.getMembers())
|
for(CallMember member : mCallInformation.getMembers())
|
||||||
processClientConnection(member);
|
processClientConnection(member);
|
||||||
@ -294,6 +309,8 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
*/
|
*/
|
||||||
private void createPeerConnection(CallMember member, boolean isInitiator){
|
private void createPeerConnection(CallMember member, boolean isInitiator){
|
||||||
|
|
||||||
|
if(mStopped) return;
|
||||||
|
|
||||||
Log.v(TAG, "Create peer connection for connection with user " + member.getUserID());
|
Log.v(TAG, "Create peer connection for connection with user " + member.getUserID());
|
||||||
|
|
||||||
CallPeerConnection callPeer = new CallPeerConnection(member);
|
CallPeerConnection callPeer = new CallPeerConnection(member);
|
||||||
@ -359,10 +376,12 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
|
|
||||||
ProxyVideoSink localProxyVideoSink = new ProxyVideoSink();
|
ProxyVideoSink localProxyVideoSink = new ProxyVideoSink();
|
||||||
localProxyVideoSink.setTarget(callPeer.getLocalVideoView());
|
localProxyVideoSink.setTarget(callPeer.getLocalVideoView());
|
||||||
|
callPeer.setLocalProxyVideoSink(localProxyVideoSink);
|
||||||
|
|
||||||
ProxyVideoSink remoteProxyRenderer = new ProxyVideoSink();
|
ProxyVideoSink remoteProxyRenderer = new ProxyVideoSink();
|
||||||
remoteProxyRenderer.setTarget(callPeer.getRemoteViewView());
|
remoteProxyRenderer.setTarget(callPeer.getRemoteViewView());
|
||||||
callPeer.getRemoteSinks().add(remoteProxyRenderer);
|
callPeer.getRemoteSinks().add(remoteProxyRenderer);
|
||||||
|
callPeer.setRemoteProxyRenderer(remoteProxyRenderer);
|
||||||
|
|
||||||
//Start connection
|
//Start connection
|
||||||
peerConnectionClient.createPeerConnection(
|
peerConnectionClient.createPeerConnection(
|
||||||
@ -376,6 +395,27 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
peerConnectionClient.createOffer();
|
peerConnectionClient.createOffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hang up call
|
||||||
|
*/
|
||||||
|
private void hangUp(){
|
||||||
|
|
||||||
|
mHangUpButton.setVisibility(View.GONE);
|
||||||
|
mStopped = true;
|
||||||
|
|
||||||
|
mRefreshCallInformation.interrupt();
|
||||||
|
|
||||||
|
mSignalExchangerClient.close();
|
||||||
|
|
||||||
|
for (CallPeerConnection client : mList)
|
||||||
|
disconnectFromPeer(client.getMember());
|
||||||
|
|
||||||
|
HangUpCallTask hangUpCallTask = new HangUpCallTask(getApplicationContext());
|
||||||
|
hangUpCallTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mCallID);
|
||||||
|
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disconnect from a specific peer
|
* Disconnect from a specific peer
|
||||||
*
|
*
|
||||||
@ -387,6 +427,9 @@ public class CallActivity extends BaseActivity implements SignalExchangerCallbac
|
|||||||
if(callPeer == null)
|
if(callPeer == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
((ProxyVideoSink)callPeer.getLocalProxyVideoSink()).setTarget(null);
|
||||||
|
((ProxyVideoSink)callPeer.getRemoteProxyRenderer()).setTarget(null);
|
||||||
|
|
||||||
callPeer.getPeerConnectionClient().close();
|
callPeer.getPeerConnectionClient().close();
|
||||||
|
|
||||||
mList.remove(callPeer);
|
mList.remove(callPeer);
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package org.communiquons.android.comunic.client.ui.asynctasks;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import org.communiquons.android.comunic.client.data.helpers.CallsHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hang up a call
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
*/
|
||||||
|
public class HangUpCallTask extends SafeAsyncTask<Integer, Void, Boolean> {
|
||||||
|
|
||||||
|
public HangUpCallTask(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Boolean doInBackground(Integer... integers) {
|
||||||
|
return new CallsHelper(getContext()).hangUp(integers[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -17,6 +17,8 @@ public class CallPeerConnection {
|
|||||||
//Private fields
|
//Private fields
|
||||||
private CallMember member;
|
private CallMember member;
|
||||||
private PeerConnectionClient peerConnectionClient;
|
private PeerConnectionClient peerConnectionClient;
|
||||||
|
private VideoSink localProxyVideoSink;
|
||||||
|
private VideoSink remoteProxyRenderer;
|
||||||
private ArrayList<VideoSink> remoteSinks = new ArrayList<>();
|
private ArrayList<VideoSink> remoteSinks = new ArrayList<>();
|
||||||
|
|
||||||
//Views
|
//Views
|
||||||
@ -67,4 +69,20 @@ public class CallPeerConnection {
|
|||||||
public void setLocalVideoView(SurfaceViewRenderer mLocalVideoView) {
|
public void setLocalVideoView(SurfaceViewRenderer mLocalVideoView) {
|
||||||
this.mLocalVideoView = mLocalVideoView;
|
this.mLocalVideoView = mLocalVideoView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VideoSink getLocalProxyVideoSink() {
|
||||||
|
return localProxyVideoSink;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocalProxyVideoSink(VideoSink localProxyVideoSink) {
|
||||||
|
this.localProxyVideoSink = localProxyVideoSink;
|
||||||
|
}
|
||||||
|
|
||||||
|
public VideoSink getRemoteProxyRenderer() {
|
||||||
|
return remoteProxyRenderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteProxyRenderer(VideoSink remoteProxyRenderer) {
|
||||||
|
this.remoteProxyRenderer = remoteProxyRenderer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,14 @@ public class SignalExchangerClient extends WebSocketListener {
|
|||||||
mWebSocket = mClient.newWebSocket(request, this);
|
mWebSocket = mClient.newWebSocket(request, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close this socket
|
||||||
|
*/
|
||||||
|
public void close(){
|
||||||
|
if(mWebSocket != null)
|
||||||
|
mWebSocket.close(4999, null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get current client configuration
|
* Get current client configuration
|
||||||
*
|
*
|
||||||
|
@ -20,4 +20,19 @@
|
|||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/hangUp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:backgroundTint="@color/holo_red_dark"
|
||||||
|
android:src="@drawable/ic_call"
|
||||||
|
android:tint="@android:color/white"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
android:contentDescription="@string/action_hang_up"/>
|
||||||
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
</android.support.constraint.ConstraintLayout>
|
@ -332,4 +332,5 @@
|
|||||||
<string name="err_get_call_info">Impossible de récupérer les infoamtions sur l\'appel !</string>
|
<string name="err_get_call_info">Impossible de récupérer les infoamtions sur l\'appel !</string>
|
||||||
<string name="err_connect_signaling_server">Impossible de connecter au signaling server !</string>
|
<string name="err_connect_signaling_server">Impossible de connecter au signaling server !</string>
|
||||||
<string name="notice_call_terminated">Appel terminé.</string>
|
<string name="notice_call_terminated">Appel terminé.</string>
|
||||||
|
<string name="action_hang_up">Raccrocher</string>
|
||||||
</resources>
|
</resources>
|
@ -331,4 +331,5 @@
|
|||||||
<string name="err_get_call_info">Could not get call information!</string>
|
<string name="err_get_call_info">Could not get call information!</string>
|
||||||
<string name="err_connect_signaling_server">Could not connect to signaling server!</string>
|
<string name="err_connect_signaling_server">Could not connect to signaling server!</string>
|
||||||
<string name="notice_call_terminated">Call terminated</string>
|
<string name="notice_call_terminated">Call terminated</string>
|
||||||
|
<string name="action_hang_up">Hang up</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user