Browse Source

Add function to retrieve and request mic permission.

Miku AuahDark 6 years ago
parent
commit
05e193ddbd
1 changed files with 84 additions and 12 deletions
  1. 84 12
      love/src/main/java/org/love2d/android/GameActivity.java

+ 84 - 12
love/src/main/java/org/love2d/android/GameActivity.java

@@ -34,7 +34,9 @@ public class GameActivity extends SDLActivity {
     private static Context context;
     private static Vibrator vibrator = null;
     protected final int[] externalStorageRequestDummy = new int[1];
+    protected final int[] recordAudioRequestDummy = new int[1];
     public static final int EXTERNAL_STORAGE_REQUEST_CODE = 1;
+    public static final int RECORD_AUDIO_REQUEST_CODE = 2;
     private static boolean immersiveActive = false;
     private static boolean mustCacheArchive = false;
     private boolean storagePermissionUnnecessary = false;
@@ -396,6 +398,16 @@ public class GameActivity extends SDLActivity {
         return audioManager.isMusicActive();
     }
 
+    @Keep
+    public void showRecordingAudioPermissionMissingDialog() {
+        AlertDialog dialog = new AlertDialog.Builder(mSingleton)
+            .setTitle("Audio Recording Permission Missing")
+            .setMessage("It appears that this game request for mic permission. The game may not work correctly without mic permission!")
+            .setNeutralButton("Continue", null)
+            .create();
+        dialog.show();
+    }
+
     public void showExternalStoragePermissionMissingDialog() {
         AlertDialog dialog = new AlertDialog.Builder(mSingleton)
             .setTitle("Storage Permission Missing")
@@ -412,22 +424,39 @@ public class GameActivity extends SDLActivity {
         if (grantResults.length > 0) {
             Log.d("GameActivity", "Received a request permission result");
 
-            if (requestCode == EXTERNAL_STORAGE_REQUEST_CODE) {
-                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-                    Log.d("GameActivity", "Permission granted");
-                } else {
-                    Log.d("GameActivity", "Did not get permission.");
-                    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
-                        showExternalStoragePermissionMissingDialog();
+            switch (requestCode) {
+                case EXTERNAL_STORAGE_REQUEST_CODE: {
+                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                        Log.d("GameActivity", "Permission granted");
+                    } else {
+                        Log.d("GameActivity", "Did not get permission.");
+                        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
+                            showExternalStoragePermissionMissingDialog();
+                        }
+                    }
+
+                    Log.d("GameActivity", "Unlocking LÖVE thread");
+                    synchronized (externalStorageRequestDummy) {
+                        externalStorageRequestDummy[0] = grantResults[0];
+                        externalStorageRequestDummy.notify();
                     }
+                    break;
                 }
+                case RECORD_AUDIO_REQUEST_CODE: {
+                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                        Log.d("GameActivity", "Mic ermission granted");
+                    } else {
+                        Log.d("GameActivity", "Did not get mic permission.");
+                    }
 
-                Log.d("GameActivity", "Unlocking LÖVE thread");
-                synchronized (externalStorageRequestDummy) {
-                    externalStorageRequestDummy[0] = grantResults[0];
-                    externalStorageRequestDummy.notify();
+                    Log.d("GameActivity", "Unlocking LÖVE thread");
+                    synchronized (recordAudioRequestDummy) {
+                        recordAudioRequestDummy[0] = grantResults[0];
+                        recordAudioRequestDummy.notify();
+                    }
+                    break;
                 }
-           }
+            }
         }
     }
 
@@ -454,6 +483,49 @@ public class GameActivity extends SDLActivity {
         return ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
     }
 
+    @Keep
+    public boolean hasRecordAudioPermission() {
+        if (ActivityCompat.checkSelfPermission(this,
+                Manifest.permission.RECORD_AUDIO)
+                == PackageManager.PERMISSION_GRANTED) {
+            return true;
+        }
+
+        Log.d("GameActivity", "Requesting mic permission and locking LÖVE thread until we have an answer.");
+        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, RECORD_AUDIO_REQUEST_CODE);
+
+        synchronized (recordAudioRequestDummy) {
+            try {
+                recordAudioRequestDummy.wait();
+            } catch (InterruptedException e) {
+                Log.d("GameActivity", "requesting mic permission", e);
+                return false;
+            }
+        }
+
+        return ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED;
+    }
+
+    @Keep
+    public void requestRecordAudioPermission() {
+        if (ActivityCompat.checkSelfPermission(this,
+                Manifest.permission.RECORD_AUDIO)
+                == PackageManager.PERMISSION_GRANTED) {
+            return;
+        }
+
+        Log.d("GameActivity", "Requesting mic permission and locking LÖVE thread until we have an answer.");
+        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, RECORD_AUDIO_REQUEST_CODE);
+
+        synchronized (recordAudioRequestDummy) {
+            try {
+                recordAudioRequestDummy.wait();
+            } catch (InterruptedException e) {
+                Log.d("GameActivity", "requesting mic permission", e);
+            }
+        }
+    }
+
     @Keep
     public boolean initializeSafeArea() {
         if (android.os.Build.VERSION.SDK_INT >= 28) {