mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-25 01:07:47 +00:00
Run webrtc calls as foreground service
Should hopefully stop performance degredation when in background Fixes #6249 // FREEBIE
This commit is contained in:
parent
cb9f225f59
commit
e92b51ed98
@ -62,7 +62,7 @@ import org.thoughtcrime.securesms.service.MessageRetrievalService;
|
|||||||
import org.thoughtcrime.securesms.util.ServiceUtil;
|
import org.thoughtcrime.securesms.util.ServiceUtil;
|
||||||
import org.thoughtcrime.securesms.util.SpanUtil;
|
import org.thoughtcrime.securesms.util.SpanUtil;
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||||
import org.thoughtcrime.securesms.webrtc.CallNotificationManager;
|
import org.thoughtcrime.securesms.webrtc.CallNotificationBuilder;
|
||||||
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
|
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -159,7 +159,7 @@ public class MessageNotifier {
|
|||||||
|
|
||||||
if (notification.getId() != SUMMARY_NOTIFICATION_ID &&
|
if (notification.getId() != SUMMARY_NOTIFICATION_ID &&
|
||||||
notification.getId() != NotificationBarManager.RED_PHONE_NOTIFICATION &&
|
notification.getId() != NotificationBarManager.RED_PHONE_NOTIFICATION &&
|
||||||
notification.getId() != CallNotificationManager.WEBRTC_NOTIFICATION &&
|
notification.getId() != CallNotificationBuilder.WEBRTC_NOTIFICATION &&
|
||||||
notification.getId() != KeyCachingService.SERVICE_RUNNING_ID &&
|
notification.getId() != KeyCachingService.SERVICE_RUNNING_ID &&
|
||||||
notification.getId() != MessageRetrievalService.FOREGROUND_ID)
|
notification.getId() != MessageRetrievalService.FOREGROUND_ID)
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ import org.thoughtcrime.securesms.util.ListenableFutureTask;
|
|||||||
import org.thoughtcrime.securesms.util.ServiceUtil;
|
import org.thoughtcrime.securesms.util.ServiceUtil;
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
import org.thoughtcrime.securesms.util.Util;
|
||||||
import org.thoughtcrime.securesms.webrtc.CallNotificationManager;
|
import org.thoughtcrime.securesms.webrtc.CallNotificationBuilder;
|
||||||
import org.thoughtcrime.securesms.webrtc.PeerConnectionFactoryOptions;
|
import org.thoughtcrime.securesms.webrtc.PeerConnectionFactoryOptions;
|
||||||
import org.thoughtcrime.securesms.webrtc.PeerConnectionWrapper;
|
import org.thoughtcrime.securesms.webrtc.PeerConnectionWrapper;
|
||||||
import org.thoughtcrime.securesms.webrtc.PeerConnectionWrapper.PeerConnectionException;
|
import org.thoughtcrime.securesms.webrtc.PeerConnectionWrapper.PeerConnectionException;
|
||||||
@ -97,9 +97,9 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
|
||||||
import static org.thoughtcrime.securesms.webrtc.CallNotificationManager.TYPE_ESTABLISHED;
|
import static org.thoughtcrime.securesms.webrtc.CallNotificationBuilder.TYPE_ESTABLISHED;
|
||||||
import static org.thoughtcrime.securesms.webrtc.CallNotificationManager.TYPE_INCOMING_RINGING;
|
import static org.thoughtcrime.securesms.webrtc.CallNotificationBuilder.TYPE_INCOMING_RINGING;
|
||||||
import static org.thoughtcrime.securesms.webrtc.CallNotificationManager.TYPE_OUTGOING_RINGING;
|
import static org.thoughtcrime.securesms.webrtc.CallNotificationBuilder.TYPE_OUTGOING_RINGING;
|
||||||
|
|
||||||
public class WebRtcCallService extends Service implements InjectableType, PeerConnection.Observer, DataChannel.Observer {
|
public class WebRtcCallService extends Service implements InjectableType, PeerConnection.Observer, DataChannel.Observer {
|
||||||
|
|
||||||
@ -326,7 +326,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
|
|||||||
lockManager.updatePhoneState(LockManager.PhoneState.IN_CALL);
|
lockManager.updatePhoneState(LockManager.PhoneState.IN_CALL);
|
||||||
outgoingRinger.playSonar();
|
outgoingRinger.playSonar();
|
||||||
|
|
||||||
CallNotificationManager.setCallInProgress(this, TYPE_OUTGOING_RINGING, recipient);
|
setCallInProgressNotification(TYPE_OUTGOING_RINGING, recipient);
|
||||||
DatabaseFactory.getSmsDatabase(this).insertOutgoingCall(recipient.getNumber());
|
DatabaseFactory.getSmsDatabase(this).insertOutgoingCall(recipient.getNumber());
|
||||||
|
|
||||||
timeoutExecutor.schedule(new TimeoutRunnable(this.callId), 2, TimeUnit.MINUTES);
|
timeoutExecutor.schedule(new TimeoutRunnable(this.callId), 2, TimeUnit.MINUTES);
|
||||||
@ -461,7 +461,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
|
|||||||
sendMessage(WebRtcViewModel.State.CALL_INCOMING, recipient, localVideoEnabled, remoteVideoEnabled);
|
sendMessage(WebRtcViewModel.State.CALL_INCOMING, recipient, localVideoEnabled, remoteVideoEnabled);
|
||||||
startCallCardActivity();
|
startCallCardActivity();
|
||||||
incomingRinger.start();
|
incomingRinger.start();
|
||||||
CallNotificationManager.setCallInProgress(this, TYPE_INCOMING_RINGING, recipient);
|
setCallInProgressNotification(TYPE_INCOMING_RINGING, recipient);
|
||||||
} else if (callState == CallState.STATE_DIALING) {
|
} else if (callState == CallState.STATE_DIALING) {
|
||||||
if (this.recipient == null) throw new AssertionError("assert");
|
if (this.recipient == null) throw new AssertionError("assert");
|
||||||
|
|
||||||
@ -497,7 +497,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
|
|||||||
|
|
||||||
sendMessage(WebRtcViewModel.State.CALL_CONNECTED, recipient, localVideoEnabled, remoteVideoEnabled);
|
sendMessage(WebRtcViewModel.State.CALL_CONNECTED, recipient, localVideoEnabled, remoteVideoEnabled);
|
||||||
|
|
||||||
CallNotificationManager.setCallInProgress(this, TYPE_ESTABLISHED, recipient);
|
setCallInProgressNotification(TYPE_ESTABLISHED, recipient);
|
||||||
|
|
||||||
this.peerConnection.setAudioEnabled(audioEnabled);
|
this.peerConnection.setAudioEnabled(audioEnabled);
|
||||||
this.peerConnection.setVideoEnabled(localVideoEnabled);
|
this.peerConnection.setVideoEnabled(localVideoEnabled);
|
||||||
@ -731,6 +731,11 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setCallInProgressNotification(int type, Recipient recipient) {
|
||||||
|
startForeground(CallNotificationBuilder.WEBRTC_NOTIFICATION,
|
||||||
|
CallNotificationBuilder.getCallInProgressNotification(this, type, recipient));
|
||||||
|
}
|
||||||
|
|
||||||
private void shutdownAudio() {
|
private void shutdownAudio() {
|
||||||
Log.d(TAG, "reset audio mode and abandon focus");
|
Log.d(TAG, "reset audio mode and abandon focus");
|
||||||
AudioUtils.resetConfiguration(this);
|
AudioUtils.resetConfiguration(this);
|
||||||
@ -742,7 +747,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
|
|||||||
|
|
||||||
private synchronized void terminate() {
|
private synchronized void terminate() {
|
||||||
lockManager.updatePhoneState(LockManager.PhoneState.PROCESSING);
|
lockManager.updatePhoneState(LockManager.PhoneState.PROCESSING);
|
||||||
CallNotificationManager.setCallEnded(this);
|
stopForeground(true);
|
||||||
|
|
||||||
incomingRinger.stop();
|
incomingRinger.stop();
|
||||||
outgoingRinger.stop();
|
outgoingRinger.stop();
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package org.thoughtcrime.securesms.webrtc;
|
package org.thoughtcrime.securesms.webrtc;
|
||||||
|
|
||||||
|
import android.app.Notification;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
|
import android.app.Service;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
@ -22,7 +24,7 @@ import org.thoughtcrime.securesms.util.ServiceUtil;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class CallNotificationManager {
|
public class CallNotificationBuilder {
|
||||||
|
|
||||||
public static final int WEBRTC_NOTIFICATION = 313388;
|
public static final int WEBRTC_NOTIFICATION = 313388;
|
||||||
|
|
||||||
@ -30,14 +32,7 @@ public class CallNotificationManager {
|
|||||||
public static final int TYPE_OUTGOING_RINGING = 2;
|
public static final int TYPE_OUTGOING_RINGING = 2;
|
||||||
public static final int TYPE_ESTABLISHED = 3;
|
public static final int TYPE_ESTABLISHED = 3;
|
||||||
|
|
||||||
public static void setCallEnded(Context context) {
|
public static Notification getCallInProgressNotification(Context context, int type, Recipient recipient) {
|
||||||
NotificationManager notificationManager = ServiceUtil.getNotificationManager(context);
|
|
||||||
notificationManager.cancel(WEBRTC_NOTIFICATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setCallInProgress(Context context, int type, Recipient recipient) {
|
|
||||||
NotificationManager notificationManager = ServiceUtil.getNotificationManager(context);
|
|
||||||
|
|
||||||
Intent contentIntent = new Intent(context, WebRtcCallActivity.class);
|
Intent contentIntent = new Intent(context, WebRtcCallActivity.class);
|
||||||
contentIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
contentIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||||
|
|
||||||
@ -61,7 +56,7 @@ public class CallNotificationManager {
|
|||||||
builder.addAction(getServiceNotificationAction(context, WebRtcCallService.ACTION_LOCAL_HANGUP, R.drawable.ic_call_end_grey600_32dp, R.string.NotificationBarManager__end_call));
|
builder.addAction(getServiceNotificationAction(context, WebRtcCallService.ACTION_LOCAL_HANGUP, R.drawable.ic_call_end_grey600_32dp, R.string.NotificationBarManager__end_call));
|
||||||
}
|
}
|
||||||
|
|
||||||
notificationManager.notify(WEBRTC_NOTIFICATION, builder.build());
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static NotificationCompat.Action getServiceNotificationAction(Context context, String action, int iconResId, int titleResId) {
|
private static NotificationCompat.Action getServiceNotificationAction(Context context, String action, int iconResId, int titleResId) {
|
Loading…
x
Reference in New Issue
Block a user