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