SDL: Android: don't add telephony device, as it cannot be opened

From f38cb0d06fddfb79c510077754b7fe2a842d40ab Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Fri, 14 Apr 2023 11:02:58 +0200
Subject: [PATCH] Android: don't add telephony device, as it cannot be opened

---
 .../java/org/libsdl/app/SDLAudioManager.java  | 26 +++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLAudioManager.java b/android-project/app/src/main/java/org/libsdl/app/SDLAudioManager.java
index 2a74fb026862..54c2b1017b19 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLAudioManager.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLAudioManager.java
@@ -12,6 +12,7 @@
 import android.util.Log;
 
 import java.util.Arrays;
+import java.util.ArrayList;
 
 public class SDLAudioManager {
     protected static final String TAG = "SDLAudio";
@@ -320,13 +321,30 @@ private static void unregisterAudioDeviceCallback(Context context) {
         }
     }
 
+    private static int[] ArrayListToArray(ArrayList<Integer> integers)
+    {
+        int[] ret = new int[integers.size()];
+        for (int i=0; i < ret.length; i++) {
+            ret[i] = integers.get(i).intValue();
+        }
+        return ret;
+    }
+
     /**
      * This method is called by SDL using JNI.
      */
     public static int[] getAudioOutputDevices() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
-            return Arrays.stream(audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)).mapToInt(AudioDeviceInfo::getId).toArray();
+            ArrayList<Integer> arrlist = new ArrayList<Integer>();
+            for (AudioDeviceInfo dev : audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)) {
+                /* Device cannot be opened */
+                if (dev.getType() == AudioDeviceInfo.TYPE_TELEPHONY) {
+                    continue;
+                }
+                arrlist.add(dev.getId());
+            }
+            return ArrayListToArray(arrlist);
         } else {
             return NO_DEVICES;
         }
@@ -338,7 +356,11 @@ public static int[] getAudioOutputDevices() {
     public static int[] getAudioInputDevices() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
-            return Arrays.stream(audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).mapToInt(AudioDeviceInfo::getId).toArray();
+            ArrayList<Integer> arrlist = new ArrayList<Integer>();
+            for (AudioDeviceInfo dev : audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)) {
+                arrlist.add(dev.getId());
+            }
+            return ArrayListToArray(arrlist);
         } else {
             return NO_DEVICES;
         }