diff --git a/src/main/java/eu/siacs/conversations/services/AppRTCAudioManager.java b/src/main/java/eu/siacs/conversations/services/AppRTCAudioManager.java index 894b2ace64286b913f9a56e588cc9dbcdbd95ad2..b256d66557ed7240cd58aefd9fda2848e59749ae 100644 --- a/src/main/java/eu/siacs/conversations/services/AppRTCAudioManager.java +++ b/src/main/java/eu/siacs/conversations/services/AppRTCAudioManager.java @@ -95,44 +95,9 @@ public class AppRTCAudioManager { 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") - public void start(AudioManagerEvents audioManagerEvents) { + public void start(final AudioManagerEvents audioManagerEvents) { Log.d(Config.LOGTAG, AppRTCAudioManager.class.getName() + ".start()"); ThreadUtils.checkIsOnMainThread(); if (amState == AudioManagerState.RUNNING) { diff --git a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java index 08351b7d584a5f1ec4a601ea06056c6e342e7e80..793ef16f90f847dfe64a549676e17d4d1f450593 100644 --- a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java @@ -6,7 +6,6 @@ import static java.util.Arrays.asList; import android.Manifest; import android.annotation.SuppressLint; -import android.app.Activity; import android.app.PictureInPictureParams; import android.content.ActivityNotFoundException; import android.content.Context; @@ -18,7 +17,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.PowerManager; -import android.os.SystemClock; import android.util.Log; import android.util.Rational; 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.Contact; import eu.siacs.conversations.entities.Conversation; -import eu.siacs.conversations.services.AppRTCAudioManager; import eu.siacs.conversations.services.CallIntegration; import eu.siacs.conversations.services.CallIntegrationConnectionService; import eu.siacs.conversations.services.XmppConnectionService; @@ -364,7 +361,7 @@ public class RtpSessionActivity extends XmppActivity final List permissions = permissions(getMedia()); if (PermissionUtils.hasPermission(this, permissions, REQUEST_ACCEPT_CALL)) { putScreenInCallMode(); - checkRecorderAndAcceptCall(); + acceptCall(); } } @@ -381,8 +378,7 @@ public class RtpSessionActivity extends XmppActivity return permissions.build(); } - private void checkRecorderAndAcceptCall() { - checkMicrophoneAvailabilityAsync(); + private void acceptCall() { try { requireRtpConnection().acceptCall(); } 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 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() { putScreenInCallMode(requireRtpConnection().getMedia()); @@ -597,7 +559,6 @@ public class RtpSessionActivity extends XmppActivity private void proposeJingleRtpSession( final Account account, final Jid with, final Set media) { - checkMicrophoneAvailabilityAsync(); if (with.isBareJid()) { xmppConnectionService .getJingleConnectionManager() @@ -617,7 +578,7 @@ public class RtpSessionActivity extends XmppActivity PermissionUtils.removeBluetoothConnect(permissions, grantResults); if (PermissionUtils.allGranted(permissionResult.grantResults)) { if (requestCode == REQUEST_ACCEPT_CALL) { - checkRecorderAndAcceptCall(); + acceptCall(); } else if (requestCode == REQUEST_ACCEPT_CONTENT) { acceptContentAdd(); } else if (requestCode == REQUEST_ADD_CONTENT) {