From 2639b8fb63a7d391ee8d06979f578d49f77e2278 Mon Sep 17 00:00:00 2001 From: Miku AuahDark Date: Sat, 28 May 2022 13:52:44 +0800 Subject: [PATCH] Convert JNI-called functions to object methods. --- app/src/main/cpp/love | 2 +- .../java/org/love2d/android/GameActivity.java | 62 ++++++++++++++++--- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/app/src/main/cpp/love b/app/src/main/cpp/love index aaeb318a..2822f17a 160000 --- a/app/src/main/cpp/love +++ b/app/src/main/cpp/love @@ -1 +1 @@ -Subproject commit aaeb318aa6b3718f6b1d079c3b0191081a74d40b +Subproject commit 2822f17a399e14abfafe21aa94e4db0dd61369d4 diff --git a/app/src/main/java/org/love2d/android/GameActivity.java b/app/src/main/java/org/love2d/android/GameActivity.java index 27c332ba..20916673 100644 --- a/app/src/main/java/org/love2d/android/GameActivity.java +++ b/app/src/main/java/org/love2d/android/GameActivity.java @@ -21,6 +21,7 @@ package org.love2d.android; import androidx.annotation.Keep; +import androidx.core.app.ActivityCompat; import org.libsdl.app.SDLActivity; @@ -52,9 +53,11 @@ import java.util.Map; public class GameActivity extends SDLActivity { private static final String TAG = "GameActivity"; + public static final int RECORD_AUDIO_REQUEST_CODE = 3; protected Vibrator vibrator; protected boolean shortEdgesMode; + protected final int[] recordAudioRequestDummy = new int[1]; private int delayedFd = -1; private String[] args = new String[0]; private boolean isFused; @@ -142,9 +145,27 @@ public class GameActivity extends SDLActivity { super.onPause(); } - @Keep - public static DisplayMetrics getDisplayMetrics() { - return getDisplayDPI(); + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + if (grantResults.length > 0) { + Log.d("GameActivity", "Received a request permission result"); + + if (requestCode == RECORD_AUDIO_REQUEST_CODE) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d("GameActivity", "Mic permission 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(); + } + } else { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } } @Keep @@ -190,7 +211,7 @@ public class GameActivity extends SDLActivity { } @Keep - public static boolean openURLFromLOVE(String url) { + public boolean openURLFromLOVE(String url) { Log.d(TAG, "opening url = " + url); return openURL(url) == 0; } @@ -277,6 +298,33 @@ public class GameActivity extends SDLActivity { return shortEdgesMode; } + @Keep + public boolean hasRecordAudioPermission() { + 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); + } + } + } + public int getAudioSMP() { int smp = 256; AudioManager a = (AudioManager) getSystemService(Context.AUDIO_SERVICE); @@ -329,8 +377,8 @@ public class GameActivity extends SDLActivity { // Send it as dropped file later delayedFd = convertToFileDescriptor(game); } else { - // Process to GameInfo - processOpenGame(intent, game); + // Process for arguments + processOpenGame(game); } } else { // Game is already running. Send it as dropped file. @@ -390,7 +438,7 @@ public class GameActivity extends SDLActivity { return -1; } - private void processOpenGame(Intent intent, Uri game) { + private void processOpenGame(Uri game) { String scheme = game.getScheme(); String path = game.getPath();