Compare commits
4 commits
0f581f889a
...
bb281ab7e0
Author | SHA1 | Date | |
---|---|---|---|
bb281ab7e0 | |||
729b86a2fc | |||
0cd0678921 | |||
b7b2bb0cdd |
2 changed files with 276 additions and 270 deletions
|
@ -1,31 +1,5 @@
|
||||||
package com.cheogram.android;
|
package com.cheogram.android;
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.ServiceConnection;
|
|
||||||
import android.graphics.drawable.Icon;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.IBinder;
|
|
||||||
import android.telecom.CallAudioState;
|
|
||||||
import android.telecom.Connection;
|
|
||||||
import android.telecom.ConnectionRequest;
|
|
||||||
import android.telecom.DisconnectCause;
|
|
||||||
import android.telecom.PhoneAccountHandle;
|
|
||||||
import android.telecom.StatusHints;
|
|
||||||
import android.telecom.TelecomManager;
|
|
||||||
import android.telephony.PhoneNumberUtils;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.google.common.base.Joiner;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.intentfilter.androidpermissions.NotificationSettings;
|
|
||||||
import com.intentfilter.androidpermissions.PermissionManager;
|
|
||||||
import com.intentfilter.androidpermissions.models.DeniedPermissions;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
@ -33,19 +7,51 @@ import java.util.Set;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.google.common.base.Joiner;
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
|
import android.os.Build;
|
||||||
|
import android.telecom.CallAudioState;
|
||||||
|
import android.telecom.Connection;
|
||||||
|
import android.telecom.ConnectionRequest;
|
||||||
|
import android.telecom.DisconnectCause;
|
||||||
|
import android.telecom.PhoneAccount;
|
||||||
|
import android.telecom.PhoneAccountHandle;
|
||||||
|
import android.telecom.StatusHints;
|
||||||
|
import android.telecom.TelecomManager;
|
||||||
|
import android.telephony.PhoneNumberUtils;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.ServiceConnection;
|
||||||
|
import android.graphics.drawable.Icon;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.IBinder;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.intentfilter.androidpermissions.PermissionManager;
|
||||||
|
import com.intentfilter.androidpermissions.NotificationSettings;
|
||||||
|
import com.intentfilter.androidpermissions.models.DeniedPermissions;
|
||||||
|
import io.michaelrocks.libphonenumber.android.NumberParseException;
|
||||||
|
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.entities.Account;
|
import eu.siacs.conversations.entities.Account;
|
||||||
import eu.siacs.conversations.services.AppRTCAudioManager;
|
import eu.siacs.conversations.services.AppRTCAudioManager;
|
||||||
import eu.siacs.conversations.services.AvatarService;
|
import eu.siacs.conversations.services.AvatarService;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
|
||||||
import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
|
import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
|
||||||
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
import eu.siacs.conversations.ui.RtpSessionActivity;
|
import eu.siacs.conversations.ui.RtpSessionActivity;
|
||||||
import eu.siacs.conversations.utils.PhoneNumberUtilWrapper;
|
import eu.siacs.conversations.utils.PhoneNumberUtilWrapper;
|
||||||
import eu.siacs.conversations.xmpp.Jid;
|
import eu.siacs.conversations.xmpp.Jid;
|
||||||
import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection;
|
import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection;
|
||||||
import eu.siacs.conversations.xmpp.jingle.Media;
|
import eu.siacs.conversations.xmpp.jingle.Media;
|
||||||
import eu.siacs.conversations.xmpp.jingle.RtpEndUserState;
|
import eu.siacs.conversations.xmpp.jingle.RtpEndUserState;
|
||||||
import io.michaelrocks.libphonenumber.android.NumberParseException;
|
|
||||||
|
|
||||||
public class ConnectionService extends android.telecom.ConnectionService {
|
public class ConnectionService extends android.telecom.ConnectionService {
|
||||||
public XmppConnectionService xmppConnectionService = null;
|
public XmppConnectionService xmppConnectionService = null;
|
||||||
|
@ -61,17 +67,9 @@ public class ConnectionService extends android.telecom.ConnectionService {
|
||||||
xmppConnectionService = null;
|
xmppConnectionService = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private PermissionManager mPermissionManager;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
mPermissionManager = PermissionManager.getInstance(this);
|
|
||||||
mPermissionManager.setNotificationSettings(
|
|
||||||
new NotificationSettings.Builder()
|
|
||||||
.withMessage(R.string.microphone_permission_for_call)
|
|
||||||
.withSmallIcon(R.drawable.ic_notification).build()
|
|
||||||
);
|
|
||||||
|
|
||||||
// From XmppActivity.connectToBackend
|
// From XmppActivity.connectToBackend
|
||||||
Intent intent = new Intent(this, XmppConnectionService.class);
|
Intent intent = new Intent(this, XmppConnectionService.class);
|
||||||
intent.setAction("ui");
|
intent.setAction("ui");
|
||||||
|
@ -117,9 +115,16 @@ public class ConnectionService extends android.telecom.ConnectionService {
|
||||||
Jid with = Jid.ofLocalAndDomain(tel, gateway[1]);
|
Jid with = Jid.ofLocalAndDomain(tel, gateway[1]);
|
||||||
CheogramConnection connection = new CheogramConnection(account, with, postDial);
|
CheogramConnection connection = new CheogramConnection(account, with, postDial);
|
||||||
|
|
||||||
|
PermissionManager permissionManager = PermissionManager.getInstance(this);
|
||||||
|
permissionManager.setNotificationSettings(
|
||||||
|
new NotificationSettings.Builder()
|
||||||
|
.withMessage(R.string.microphone_permission_for_call)
|
||||||
|
.withSmallIcon(R.drawable.ic_notification).build()
|
||||||
|
);
|
||||||
|
|
||||||
Set<String> permissions = new HashSet<>();
|
Set<String> permissions = new HashSet<>();
|
||||||
permissions.add(Manifest.permission.RECORD_AUDIO);
|
permissions.add(Manifest.permission.RECORD_AUDIO);
|
||||||
mPermissionManager.checkPermissions(permissions, new PermissionManager.PermissionRequestListener() {
|
permissionManager.checkPermissions(permissions, new PermissionManager.PermissionRequestListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onPermissionGranted() {
|
public void onPermissionGranted() {
|
||||||
connection.setSessionId(xmppConnectionService.getJingleConnectionManager().proposeJingleRtpSession(
|
connection.setSessionId(xmppConnectionService.getJingleConnectionManager().proposeJingleRtpSession(
|
||||||
|
@ -246,7 +251,7 @@ public class ConnectionService extends android.telecom.ConnectionService {
|
||||||
public void onAudioDeviceChanged(AppRTCAudioManager.AudioDevice selectedAudioDevice, Set<AppRTCAudioManager.AudioDevice> availableAudioDevices) {
|
public void onAudioDeviceChanged(AppRTCAudioManager.AudioDevice selectedAudioDevice, Set<AppRTCAudioManager.AudioDevice> availableAudioDevices) {
|
||||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) return;
|
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) return;
|
||||||
|
|
||||||
switch (selectedAudioDevice) {
|
switch(selectedAudioDevice) {
|
||||||
case SPEAKER_PHONE:
|
case SPEAKER_PHONE:
|
||||||
setAudioRoute(CallAudioState.ROUTE_SPEAKER);
|
setAudioRoute(CallAudioState.ROUTE_SPEAKER);
|
||||||
case WIRED_HEADSET:
|
case WIRED_HEADSET:
|
||||||
|
@ -314,7 +319,7 @@ public class ConnectionService extends android.telecom.ConnectionService {
|
||||||
if (next.equals(";")) {
|
if (next.equals(";")) {
|
||||||
Vector<String> v = new Vector<>(postDial);
|
Vector<String> v = new Vector<>(postDial);
|
||||||
Collections.reverse(v);
|
Collections.reverse(v);
|
||||||
setPostDialWait(Joiner.on("").skipNulls().join(v));
|
setPostDialWait(Joiner.on("").join(v));
|
||||||
return;
|
return;
|
||||||
} else if (next.equals(",")) {
|
} else if (next.equals(",")) {
|
||||||
sleep(2000);
|
sleep(2000);
|
||||||
|
|
|
@ -430,8 +430,9 @@ public class NotificationService {
|
||||||
|
|
||||||
private synchronized boolean tryRingingWithDialerUI(final AbstractJingleConnection.Id id, final Set<Media> media) {
|
private synchronized boolean tryRingingWithDialerUI(final AbstractJingleConnection.Id id, final Set<Media> media) {
|
||||||
if (mXmppConnectionService.checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
|
if (mXmppConnectionService.checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
|
||||||
// We cannot always request audio permission in Dialer UI
|
// We cannot request audio permission in Dialer UI
|
||||||
// e.g. when Dialer is shown over keyguard
|
// when Dialer is shown over keyguard, the user cannot even necessarily
|
||||||
|
// see notifications.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,8 +467,8 @@ public class NotificationService {
|
||||||
try {
|
try {
|
||||||
telecomManager.addNewIncomingCall(handle, callInfo);
|
telecomManager.addNewIncomingCall(handle, callInfo);
|
||||||
} catch (SecurityException e) {
|
} catch (SecurityException e) {
|
||||||
// There *could* be race conditions where the account is not registered yet
|
// If the account is not registered or enabled, it could result in a security exception
|
||||||
// when an incoming call is already received
|
// Just fall back to the built-in UI in this case.
|
||||||
Log.w(Config.LOGTAG, e);
|
Log.w(Config.LOGTAG, e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue