Kaynağa Gözat

add (select + start) to open menu dialog

ZengGengSen 2 yıl önce
ebeveyn
işleme
2b0dc513e1

+ 6 - 14
app/src/main/cpp/Makefile

@@ -1,22 +1,14 @@
+BUILD_TOOLCHAIN_DIR := C:/Android/Sdk/ndk/21.4.7075529
+BUILD_NDK_DIR := $(BUILD_TOOLCHAIN_DIR)/toolchains/llvm/prebuilt/windows-x86_64/bin
+BUILD_C_COMPILER := $(BUILD_NDK_DIR)/clang.exe
+BUILD_CXX_COMPILER := $(BUILD_NDK_DIR)/clang++.exe
 
-# common commands
-ifeq ($(shell echo ^^),^)
-  	# cmd
-  	delete  = $(info Deleting $1 ...) @del /q $(subst /,\,$1)
-  	rdelete = $(info Deleting $1 ...) @del /s /q $(subst /,\,$1) && if exist $(subst /,\,$1) (rmdir /s /q $(subst /,\,$1))
-    copy = $(info Copying $1 to $2 ...) @copy /Y $(subst /,\,$1) $(subst /,\,$2)
-else
-  	# sh
-  	delete  = $(info Deleting $1 ...) @rm -f $1
-  	rdelete = $(info Deleting $1 ...) @rm -rf $1
-	copy = $(info Copying $1 to $2 ...) @cp $1 $2
-endif
 
 all: generate
 
 generate:
-	cmake -GNinja -S. -Bcmake-build-debug -DCMAKE_TOOLCHAIN_FILE="C:\Android\Sdk\ndk\21.4.7075529\build\cmake\android.toolchain.cmake" -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-16 -DANDROID_NDK=C:\Android\Sdk\ndk\21.4.7075529 -DCMAKE_C_COMPLIER=C:/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe -DCMAKE_CXX_COMPLIER=C:/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe -DCMAKE_EXPORT_COMPILE_COMMANDS=1
-	$(call copy,./cmake-build-debug/compile_commands.json .)
+	cmake -GNinja -S. -Bcmake-build-debug -DCMAKE_TOOLCHAIN_FILE="C:\Android\Sdk\ndk\21.4.7075529\build\cmake\android.toolchain.cmake" -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-16 -DANDROID_NDK=$(BUILD_TOOLCHAIN_DIR) -DCMAKE_C_COMPLIER=$(BUILD_C_COMPILER) -DCMAKE_CXX_COMPLIER=$(BUILD_CXX_COMPILER) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
+	cp ./cmake-build-debug/compile_commands.json .
 
 
 build: generate

+ 11 - 0
app/src/main/cpp/frontend/drivers/platform_unix.c

@@ -17,6 +17,7 @@
  */
 
 #include "retro_miscellaneous.h"
+#include <jni.h>
 #include <stdio.h>
 #include <stdint.h>
 #include <stddef.h>
@@ -500,6 +501,14 @@ static struct android_app* android_app_create(ANativeActivity* activity,
    return android_app;
 }
 
+JNIEXPORT void JNICALL Java_com_retroarch_browser_retroactivity_RetroActivityCommon_gameDialogClosed(
+    JNIEnv *env, jobject thisObj
+) {
+    struct android_app *android_app = (struct android_app*)g_android;
+
+    android_app_write_cmd(android_app, APP_CMD_GAME_DIALOG_CLOSED);
+}
+
 /*
  * Native activity interaction (called from main thread)
  **/
@@ -2097,6 +2106,8 @@ static void frontend_unix_init(void *data)
          "getVolumeCount", "()I");
    GET_METHOD_ID(env, android_app->getVolumePath, class,
          "getVolumePath", "(Ljava/lang/String;)Ljava/lang/String;");
+   GET_METHOD_ID(env, android_app->openGameDialog, class,
+                 "openGameDialog", "()V");
 
    GET_OBJECT_CLASS(env, class, obj);
    GET_METHOD_ID(env, android_app->getStringExtra, class,

+ 8 - 1
app/src/main/cpp/frontend/drivers/platform_unix.h

@@ -118,6 +118,8 @@ struct android_app
     * destroyed and waiting for the app thread to complete. */
    int destroyRequested;
 
+   int openGameDialogRequested;
+
    /* Below are "private" implementation of the glue code. */
    slock_t *mutex;
    scond_t *cond;
@@ -179,6 +181,8 @@ struct android_app
    jmethodID getVolumeCount;
    jmethodID getVolumePath;
 
+   jmethodID openGameDialog;
+
    struct
    {
       unsigned width, height;
@@ -291,7 +295,10 @@ enum
     */
    APP_CMD_DESTROY,
 
-   APP_CMD_REINIT_DONE
+   APP_CMD_REINIT_DONE,
+
+   APP_CMD_GAME_DIALOG_OPENED,
+   APP_CMD_GAME_DIALOG_CLOSED,
 };
 
 #define JNI_EXCEPTION(env) \

+ 23 - 0
app/src/main/cpp/input/drivers/android_input.c

@@ -358,13 +358,36 @@ bool android_input_can_be_keyboard(void *data, int port)
 static void android_input_poll_main_cmd(void)
 {
    int8_t cmd;
+   JNIEnv             *env         = NULL;
    struct android_app *android_app = (struct android_app*)g_android;
 
+   if (!(env = jni_thread_getenv()))
+      return;
+
    if (read(android_app->msgread, &cmd, sizeof(cmd)) != sizeof(cmd))
       cmd = -1;
 
    switch (cmd)
    {
+      case APP_CMD_GAME_DIALOG_OPENED:
+         slock_lock(android_app->mutex);
+
+         android_app->openGameDialogRequested = 1;
+         CALL_VOID_METHOD(
+            env, android_app->activity->clazz,
+            android_app->openGameDialog
+         );
+
+         scond_broadcast(android_app->cond);
+         slock_unlock(android_app->mutex);
+         break;
+      case APP_CMD_GAME_DIALOG_CLOSED:
+         slock_lock(android_app->mutex);
+         android_app->openGameDialogRequested = 0;
+         scond_broadcast(android_app->cond);
+         slock_unlock(android_app->mutex);
+         break;
+
       case APP_CMD_REINIT_DONE:
          slock_lock(android_app->mutex);
 

+ 17 - 0
app/src/main/cpp/input/input_defines.h

@@ -40,6 +40,23 @@ RETRO_BEGIN_DECLS
 /* RetroArch specific bind IDs. */
 enum
 {
+   RARCH_JOYPAD_B = 0,
+   RARCH_JOYPAD_Y,
+   RARCH_JOYPAD_SELECT,
+   RARCH_JOYPAD_START,
+   RARCH_JOYPAD_UP,
+   RARCH_JOYPAD_DOWN,
+   RARCH_JOYPAD_LEFT,
+   RARCH_JOYPAD_RIGHT,
+   RARCH_JOYPAD_A,
+   RARCH_JOYPAD_X,
+   RARCH_JOYPAD_L,
+   RARCH_JOYPAD_R,
+   RARCH_JOYPAD_L2,
+   RARCH_JOYPAD_R2,
+   RARCH_JOYPAD_L3,
+   RARCH_JOYPAD_R3,
+
    /* Custom binds that extend the scope of RETRO_DEVICE_JOYPAD for
     * RetroArch specifically.
     * Analogs (RETRO_DEVICE_ANALOG) */

+ 20 - 19
app/src/main/cpp/retroarch.c

@@ -4719,49 +4719,50 @@ int rarch_main(int argc, char *argv[], void *data)
       info.args            = data;
       info.environ_get     = frontend_state_get_ptr()->current_frontend_ctx->environment_get;
 
-      if (!task_push_load_content_from_cli(
+      if (task_push_load_content_from_cli(
                NULL,
                NULL,
                &info,
                CORE_TYPE_PLAIN,
                NULL,
-               NULL))
-         return 1;
-   }
+               NULL)) {
 
-   ui_companion_driver_init_first();
+         ui_companion_driver_init_first();
 #if !defined(HAVE_MAIN) || defined(HAVE_QT)
-   for (;;)
-   {
-      int ret;
-      bool app_exit     = false;
+         for (;;)
+         {
+            int ret;
+            bool app_exit     = false;
 #ifdef HAVE_QT
-      ui_companion_qt.application->process_events();
+            ui_companion_qt.application->process_events();
 #endif
-      ret = runloop_iterate();
+            ret = runloop_iterate();
 
-      task_queue_check();
+            task_queue_check();
 
 #ifdef HAVE_MIST
-   steam_poll();
+            steam_poll();
 #endif
 
 #ifdef HAVE_QT
-      app_exit = ui_companion_qt.application->exiting;
+            app_exit = ui_companion_qt.application->exiting;
 #endif
 
-      if (ret == -1 || app_exit)
-      {
+            if (ret == -1 || app_exit)
+            {
 #ifdef HAVE_QT
-         ui_companion_qt.application->quit();
+               ui_companion_qt.application->quit();
 #endif
-         break;
+               break;
+            }
+         }
       }
    }
 
-   main_exit(data);
 #endif
 
+   main_exit(data);
+
    return 0;
 }
 

+ 12 - 0
app/src/main/cpp/runloop.c

@@ -5301,6 +5301,9 @@ static enum runloop_state_enum runloop_check_state(
 #ifdef HAVE_CHEEVOS
    bool cheevos_hardcore_active        = false;
 #endif
+#ifdef ANDROID
+   struct android_app             *app = (struct android_app*)g_android;
+#endif
 
 #if defined(HAVE_TRANSLATE) && defined(HAVE_GFX_WIDGETS)
    if (p_dispwidget->ai_service_overlay_state == 3)
@@ -5504,6 +5507,15 @@ static enum runloop_state_enum runloop_check_state(
       }
    }
 
+#ifdef ANDROID
+   /* transfer select + start button */
+   if (BIT256_GET(current_bits, RARCH_JOYPAD_SELECT)
+       && BIT256_GET(current_bits, RARCH_JOYPAD_START)
+       && app->openGameDialogRequested == 0) {
+      android_app_write_cmd(app, APP_CMD_GAME_DIALOG_OPENED);
+   }
+#endif
+
    /* Check quit hotkey */
    {
       bool trig_quit_key, quit_press_twice;

+ 8 - 1
app/src/main/java/com/retroarch/browser/retroactivity/RetroActivityCommon.java

@@ -45,7 +45,7 @@ import java.util.Locale;
  * Class which provides common methods for RetroActivity related classes.
  */
 //public class RetroActivityCommon extends NativeActivity
-public class RetroActivityCommon extends NativeActivity
+public abstract class RetroActivityCommon extends NativeActivity
 {
   private static final String TAG = "RetroActivityCommonTAG";
 
@@ -64,6 +64,7 @@ public class RetroActivityCommon extends NativeActivity
   public static int RETRO_RUMBLE_WEAK = 1;
   public boolean sustainedPerformanceMode = true;
   public int screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+  public abstract void showExitDialog();
 
   @Override
   protected void onCreate(Bundle savedInstanceState) {
@@ -359,6 +360,10 @@ public class RetroActivityCommon extends NativeActivity
     }
   }
 
+  public void openGameDialog() {
+    showExitDialog();
+  }
+
   @Override
   public void onConfigurationChanged(Configuration newConfig) {
     int oldOrientation = 0;
@@ -514,6 +519,8 @@ public class RetroActivityCommon extends NativeActivity
    */
   public native void saveOverrideConfig();
 
+  public native void gameDialogClosed();
+
   /**
    * Called when a core install is initiated.
    *

+ 7 - 1
app/src/main/java/com/xugame/gameconsole/emulator/RetroActivityCamera.java

@@ -12,13 +12,14 @@ import com.xugame.gameconsole.preferences.UserPreferences;
 
 import java.io.IOException;
 
-public class RetroActivityCamera extends RetroActivityCommon {
+public abstract class RetroActivityCamera extends RetroActivityCommon {
 
     private Camera mCamera = null;
     private long lastTimestamp = 0;
     private SurfaceTexture texture;
     private boolean updateSurface = true;
     private boolean camera_service_running = false;
+    public abstract void showLocalExitDialog();
 
     /**
      * Executed when the {@link Camera}
@@ -147,6 +148,11 @@ public class RetroActivityCamera extends RetroActivityCommon {
         }
     };
 
+    @Override
+    public void showExitDialog() {
+        showLocalExitDialog();
+    }
+
     @Override
     public void onCreate(Bundle savedInstanceState)
     {

+ 13 - 0
app/src/main/java/com/xugame/gameconsole/emulator/RetroArchEmulatorActivity.java

@@ -33,6 +33,18 @@ public class RetroArchEmulatorActivity extends RetroActivityCamera {
     // If set to true then Retroarch will completely exit when it loses focus
     private boolean quitfocus = false;
 
+    @Override
+    public void showLocalExitDialog() {
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                showDialog();
+            }
+        });
+
+        DebugUtil.i(TAG,"showLocalExitDialog");
+    }
+
     @Override
     public void onResume() {
         super.onResume();
@@ -170,6 +182,7 @@ public class RetroArchEmulatorActivity extends RetroActivityCamera {
             public void onResumeGame(ScreenType type, int archiveIndex) {
                 mScreenType = type;
                 mUpdateScreen = true;
+                gameDialogClosed();
             }
 
             @Override