remove mic availability check
This commit is contained in:
parent
ca1d8b4d1b
commit
7eaad9842c
|
@ -95,44 +95,9 @@ public class AppRTCAudioManager {
|
||||||
AppRTCUtils.logDeviceInfo(Config.LOGTAG);
|
AppRTCUtils.logDeviceInfo(Config.LOGTAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMicrophoneAvailable() {
|
|
||||||
microphoneLatch = new CountDownLatch(1);
|
|
||||||
AudioRecord audioRecord = null;
|
|
||||||
boolean available = true;
|
|
||||||
try {
|
|
||||||
final int sampleRate = 44100;
|
|
||||||
final int channel = AudioFormat.CHANNEL_IN_MONO;
|
|
||||||
final int format = AudioFormat.ENCODING_PCM_16BIT;
|
|
||||||
final int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channel, format);
|
|
||||||
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, channel, format, bufferSize);
|
|
||||||
audioRecord.startRecording();
|
|
||||||
final short[] buffer = new short[bufferSize];
|
|
||||||
final int audioStatus = audioRecord.read(buffer, 0, bufferSize);
|
|
||||||
if (audioStatus == AudioRecord.ERROR_INVALID_OPERATION || audioStatus == AudioRecord.STATE_UNINITIALIZED)
|
|
||||||
available = false;
|
|
||||||
} catch (Exception e) {
|
|
||||||
available = false;
|
|
||||||
} finally {
|
|
||||||
release(audioRecord);
|
|
||||||
|
|
||||||
}
|
|
||||||
microphoneLatch.countDown();
|
|
||||||
return available;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void release(final AudioRecord audioRecord) {
|
|
||||||
if (audioRecord == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
audioRecord.release();
|
|
||||||
} catch (Exception e) {
|
|
||||||
//ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void start(AudioManagerEvents audioManagerEvents) {
|
public void start(final AudioManagerEvents audioManagerEvents) {
|
||||||
Log.d(Config.LOGTAG, AppRTCAudioManager.class.getName() + ".start()");
|
Log.d(Config.LOGTAG, AppRTCAudioManager.class.getName() + ".start()");
|
||||||
ThreadUtils.checkIsOnMainThread();
|
ThreadUtils.checkIsOnMainThread();
|
||||||
if (amState == AudioManagerState.RUNNING) {
|
if (amState == AudioManagerState.RUNNING) {
|
||||||
|
|
|
@ -6,7 +6,6 @@ import static java.util.Arrays.asList;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.PictureInPictureParams;
|
import android.app.PictureInPictureParams;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -18,7 +17,6 @@ import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.SystemClock;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Rational;
|
import android.util.Rational;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
@ -48,7 +46,6 @@ import eu.siacs.conversations.databinding.ActivityRtpSessionBinding;
|
||||||
import eu.siacs.conversations.entities.Account;
|
import eu.siacs.conversations.entities.Account;
|
||||||
import eu.siacs.conversations.entities.Contact;
|
import eu.siacs.conversations.entities.Contact;
|
||||||
import eu.siacs.conversations.entities.Conversation;
|
import eu.siacs.conversations.entities.Conversation;
|
||||||
import eu.siacs.conversations.services.AppRTCAudioManager;
|
|
||||||
import eu.siacs.conversations.services.CallIntegration;
|
import eu.siacs.conversations.services.CallIntegration;
|
||||||
import eu.siacs.conversations.services.CallIntegrationConnectionService;
|
import eu.siacs.conversations.services.CallIntegrationConnectionService;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
|
@ -364,7 +361,7 @@ public class RtpSessionActivity extends XmppActivity
|
||||||
final List<String> permissions = permissions(getMedia());
|
final List<String> permissions = permissions(getMedia());
|
||||||
if (PermissionUtils.hasPermission(this, permissions, REQUEST_ACCEPT_CALL)) {
|
if (PermissionUtils.hasPermission(this, permissions, REQUEST_ACCEPT_CALL)) {
|
||||||
putScreenInCallMode();
|
putScreenInCallMode();
|
||||||
checkRecorderAndAcceptCall();
|
acceptCall();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -381,8 +378,7 @@ public class RtpSessionActivity extends XmppActivity
|
||||||
return permissions.build();
|
return permissions.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkRecorderAndAcceptCall() {
|
private void acceptCall() {
|
||||||
checkMicrophoneAvailabilityAsync();
|
|
||||||
try {
|
try {
|
||||||
requireRtpConnection().acceptCall();
|
requireRtpConnection().acceptCall();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
|
@ -390,40 +386,6 @@ public class RtpSessionActivity extends XmppActivity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkMicrophoneAvailabilityAsync() {
|
|
||||||
new Thread(new MicrophoneAvailabilityCheck(this)).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class MicrophoneAvailabilityCheck implements Runnable {
|
|
||||||
|
|
||||||
private final WeakReference<Activity> activityReference;
|
|
||||||
|
|
||||||
private MicrophoneAvailabilityCheck(final Activity activity) {
|
|
||||||
this.activityReference = new WeakReference<>(activity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
final long start = SystemClock.elapsedRealtime();
|
|
||||||
final boolean isMicrophoneAvailable = AppRTCAudioManager.isMicrophoneAvailable();
|
|
||||||
final long stop = SystemClock.elapsedRealtime();
|
|
||||||
Log.d(Config.LOGTAG, "checking microphone availability took " + (stop - start) + "ms");
|
|
||||||
if (isMicrophoneAvailable) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final Activity activity = activityReference.get();
|
|
||||||
if (activity == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
activity.runOnUiThread(
|
|
||||||
() ->
|
|
||||||
Toast.makeText(
|
|
||||||
activity,
|
|
||||||
R.string.microphone_unavailable,
|
|
||||||
Toast.LENGTH_LONG)
|
|
||||||
.show());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void putScreenInCallMode() {
|
private void putScreenInCallMode() {
|
||||||
putScreenInCallMode(requireRtpConnection().getMedia());
|
putScreenInCallMode(requireRtpConnection().getMedia());
|
||||||
|
@ -597,7 +559,6 @@ public class RtpSessionActivity extends XmppActivity
|
||||||
|
|
||||||
private void proposeJingleRtpSession(
|
private void proposeJingleRtpSession(
|
||||||
final Account account, final Jid with, final Set<Media> media) {
|
final Account account, final Jid with, final Set<Media> media) {
|
||||||
checkMicrophoneAvailabilityAsync();
|
|
||||||
if (with.isBareJid()) {
|
if (with.isBareJid()) {
|
||||||
xmppConnectionService
|
xmppConnectionService
|
||||||
.getJingleConnectionManager()
|
.getJingleConnectionManager()
|
||||||
|
@ -617,7 +578,7 @@ public class RtpSessionActivity extends XmppActivity
|
||||||
PermissionUtils.removeBluetoothConnect(permissions, grantResults);
|
PermissionUtils.removeBluetoothConnect(permissions, grantResults);
|
||||||
if (PermissionUtils.allGranted(permissionResult.grantResults)) {
|
if (PermissionUtils.allGranted(permissionResult.grantResults)) {
|
||||||
if (requestCode == REQUEST_ACCEPT_CALL) {
|
if (requestCode == REQUEST_ACCEPT_CALL) {
|
||||||
checkRecorderAndAcceptCall();
|
acceptCall();
|
||||||
} else if (requestCode == REQUEST_ACCEPT_CONTENT) {
|
} else if (requestCode == REQUEST_ACCEPT_CONTENT) {
|
||||||
acceptContentAdd();
|
acceptContentAdd();
|
||||||
} else if (requestCode == REQUEST_ADD_CONTENT) {
|
} else if (requestCode == REQUEST_ADD_CONTENT) {
|
||||||
|
|
Loading…
Reference in a new issue