Add function to retrieve and request mic permission.

This commit is contained in:
Miku AuahDark
2019-09-29 12:25:30 +08:00
parent 0380160775
commit 05e193ddbd
@@ -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();
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 (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) {