From 45ed8cbc02149cefa20dc44e80a6d15fac78342b Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Tue, 5 Mar 2019 23:50:52 +0100 Subject: [PATCH] android: install buttons.png and reload it. Record audio permission. install buttons.png when saving settings (home dir may have changed) reload buttons.png if previous load failed when rendering hide surface view when microphone is enabled to ask for permission --- core/rend/gles/gles.cpp | 6 ++- .../java/com/reicast/emulator/Emulator.java | 15 +++++++ .../com/reicast/emulator/FileBrowser.java | 10 +++-- .../reicast/emulator/NativeGLActivity.java | 43 +++++++++++++------ 4 files changed, 55 insertions(+), 19 deletions(-) diff --git a/core/rend/gles/gles.cpp b/core/rend/gles/gles.cpp index f9371984c..c9d52322d 100644 --- a/core/rend/gles/gles.cpp +++ b/core/rend/gles/gles.cpp @@ -1435,8 +1435,10 @@ static void osd_gen_vertices() void OSD_DRAW(bool clear_screen) { -#ifndef TARGET_PANDORA - if (osd_tex) +#ifdef _ANDROID + if (osd_tex == 0) + gl_load_osd_resources(); + if (osd_tex != 0) { osd_gen_vertices(); diff --git a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java index 06882158c..df3e3f74a 100644 --- a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java +++ b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java @@ -1,5 +1,6 @@ package com.reicast.emulator; +import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; @@ -13,6 +14,7 @@ import com.reicast.emulator.emu.JNIdc; public class Emulator extends Application { private static Context context; + private static Activity currentActivity; // see MapleDeviceType in hw/maple/maple_devs.h public static final int MDT_SegaController = 0; @@ -67,6 +69,11 @@ public class Emulator extends Application { prefs.edit() .putString(Config.pref_home, homeDirectory).apply(); AudioBackend.getInstance().enableSound(!Emulator.nosound); + + FileBrowser.installButtons(prefs); + if (micPluggedIn() && currentActivity instanceof NativeGLActivity) { + ((NativeGLActivity)currentActivity).requestRecordAudioPermission(); + } } public static boolean micPluggedIn() { @@ -88,6 +95,14 @@ public class Emulator extends Application { return Emulator.context; } + public static Activity getCurrentActivity() { + return Emulator.currentActivity; + } + + public static void setCurrentActivity(Activity activity) { + Emulator.currentActivity = activity; + } + static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } diff --git a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/FileBrowser.java b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/FileBrowser.java index e788bb286..2a7444ef5 100644 --- a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/FileBrowser.java +++ b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/FileBrowser.java @@ -177,7 +177,7 @@ public class FileBrowser extends Fragment { if (temp == null || !new File(temp).isDirectory()) { showToastMessage(getActivity().getString(R.string.config_home), Snackbar.LENGTH_LONG); } - installButtons(); + installButtons(mPrefs); if (!games) { new LocateGames(this, R.array.flash).execute(home_directory); } else { @@ -185,19 +185,21 @@ public class FileBrowser extends Fragment { } } - private void installButtons() { + public static void installButtons(SharedPreferences prefs) { try { File buttons = null; - String theme = mPrefs.getString(Config.pref_theme, null); + // TODO button themes + String theme = prefs.getString(Config.pref_theme, null); if (theme != null) { buttons = new File(theme); } + String home_directory = prefs.getString(Config.pref_home, Environment.getExternalStorageDirectory().getAbsolutePath()); File file = new File(home_directory, "data/buttons.png"); InputStream in = null; if (buttons != null && buttons.exists()) { in = new FileInputStream(buttons); } else if (!file.exists() || file.length() == 0) { - in = getActivity().getAssets().open("buttons.png"); + in = Emulator.getAppContext().getAssets().open("buttons.png"); } if (in != null) { OutputStream out = new FileOutputStream(file); diff --git a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/NativeGLActivity.java b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/NativeGLActivity.java index d66bd01b4..7de4a1ba4 100644 --- a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/NativeGLActivity.java +++ b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/NativeGLActivity.java @@ -6,6 +6,7 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Environment; +import android.os.Handler; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -40,6 +41,7 @@ public final class NativeGLActivity extends BaseNativeGLActivity implements Acti public static byte[] syms; private float[][] vjoy_d_cached; // Used for VJoy editing private AudioBackend audioBackend; + private Handler handler = new Handler(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -48,6 +50,7 @@ public final class NativeGLActivity extends BaseNativeGLActivity implements Acti Emulator app = (Emulator)getApplicationContext(); app.getConfigurationPrefs(); + Emulator.setCurrentActivity(this); OuyaController.init(this); @@ -73,19 +76,8 @@ public final class NativeGLActivity extends BaseNativeGLActivity implements Acti // FIXME Maple microphone can be plugged at any time with in-game gui // so this perm may be required at any time as well //setup mic - if (Emulator.micPluggedIn()) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - ActivityCompat.requestPermissions(this, - new String[]{ - Manifest.permission.RECORD_AUDIO - }, - 0); - } - else - { - onRequestPermissionsResult(0, new String[] { Manifest.permission.RECORD_AUDIO }, new int[] { PackageManager.PERMISSION_GRANTED }); - } - } + if (Emulator.micPluggedIn()) + requestRecordAudioPermission(); } private boolean showMenu() { @@ -165,6 +157,29 @@ public final class NativeGLActivity extends BaseNativeGLActivity implements Acti InputDeviceManager.getInstance().stopListening(); register(null); audioBackend.release(); + Emulator.setCurrentActivity(null); + } + + void requestRecordAudioPermission() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + handler.post(new Runnable() { + @Override + public void run() { + mView.setVisibility(View.INVISIBLE); + ActivityCompat.requestPermissions(NativeGLActivity.this, + new String[]{ + Manifest.permission.RECORD_AUDIO + }, + 0); + + } + }); + } + else + { + onRequestPermissionsResult(0, new String[] { Manifest.permission.RECORD_AUDIO }, + new int[] { PackageManager.PERMISSION_GRANTED }); + } } @Override @@ -175,6 +190,8 @@ public final class NativeGLActivity extends BaseNativeGLActivity implements Acti sip.startRecording(); JNIdc.setupMic(sip); } + + mView.setVisibility(View.VISIBLE); } private void showToastMessage(String message, int duration) {