remove mic availability check

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/AppRTCAudioManager.java | 37 
src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java       | 45 
2 files changed, 4 insertions(+), 78 deletions(-)

Detailed changes

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) {

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<String> 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<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() {
         putScreenInCallMode(requireRtpConnection().getMedia());
@@ -597,7 +559,6 @@ public class RtpSessionActivity extends XmppActivity
 
     private void proposeJingleRtpSession(
             final Account account, final Jid with, final Set<Media> 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) {