wangyongj 2 年之前
父節點
當前提交
3c12a8419e

+ 2 - 0
app/src/main/java/com/retroarch/browser/retroactivity/RetroActivityCommon.java

@@ -379,7 +379,9 @@ DebugUtil.i(TAG,"onTick"+millisUntilFinished);
     }
   }
 
+  //call by jni
   public void openGameDialog() {
+    DebugUtil.i(TAG,"openGameDialog");
     showExitDialog();
   }
 

+ 14 - 1
app/src/main/java/com/xugame/gameconsole/TextCopyFileActivity.java

@@ -35,7 +35,7 @@ import java.io.InputStream;
 
 public class TextCopyFileActivity extends Activity {
     private static final String TAG = "TextCopyFileActivityTAG";
-    private Button btn1, btn2, btn3;
+    private Button btn1, btn2, btn3,btn4;
     private Context mContext;
 
     @Override
@@ -109,6 +109,7 @@ public class TextCopyFileActivity extends Activity {
         btn1 = findViewById(R.id.btn1);
         btn2 = findViewById(R.id.btn2);
         btn3 = findViewById(R.id.btn3);
+        btn4=findViewById(R.id.btn4);
         btn1.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
@@ -136,6 +137,15 @@ public class TextCopyFileActivity extends Activity {
 
             }
         });
+        btn4.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startGame(Environment.getExternalStorageDirectory().getAbsolutePath() + "/arcade/rom/shenghuaweiji.bin",
+                        mContext.getFilesDir().getParent() + "/cores/mednafen_psx_libretro_android.so",
+                        EmulatorType.PS1);
+
+            }
+        });
     }
 
     private void startGame(String rompath, String corepath, EmulatorType Type) {
@@ -159,6 +169,9 @@ public class TextCopyFileActivity extends Activity {
                 case NES:
                     coreName = "mesen_libretro_android.so";
                     break;
+                case PS1:
+                    coreName="mednafen_psx_libretro_android.so";
+                    break;
             }
             if (!TextUtils.isEmpty(coreName))
                 startCopy(coreName,

+ 8 - 0
app/src/main/java/com/xugame/gameconsole/dialog/gamemenu/GameMenuDialog.java

@@ -275,6 +275,14 @@ public class GameMenuDialog extends BaseDialog
 
     }
 
+    @Override
+    public void dismiss() {
+        if(mListener!=null){
+            mListener.onResumeGame(mType, mReadArchiveIndex);
+        }
+        super.dismiss();
+
+    }
 
     @Override
     public void onClick(View view) {

+ 2 - 1
app/src/main/java/com/xugame/gameconsole/emulator/EmulatorType.java

@@ -5,5 +5,6 @@ public enum EmulatorType {
     NEOGEO,
     CPS1,
     CPS2,
-    CPS3
+    CPS3,
+    PS1
 }

+ 75 - 24
app/src/main/java/com/xugame/gameconsole/emulator/RetroArchEmulatorActivity.java

@@ -5,6 +5,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.hardware.input.InputManager;
 import android.os.Build;
+import android.os.Bundle;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.View;
@@ -13,6 +14,8 @@ import android.view.WindowManager;
 import com.retroarch.browser.retroactivity.AspectRatio;
 import com.xugame.gameconsole.dialog.gamemenu.GameMenuDialog;
 import com.xugame.gameconsole.dialog.gamemenu.GameMenuDialogListener;
+import com.xugame.gameconsole.monitor.EmulatorMonitor;
+import com.xugame.gameconsole.monitor.EmulatorMonitorListener;
 import com.xugame.gameconsole.preferences.ConfigFile;
 import com.xugame.gameconsole.preferences.UserPreferences;
 import com.xugame.gameconsole.util.DebugUtil;
@@ -28,23 +31,44 @@ import java.lang.reflect.Method;
 //        libsPath = intent.getStringExtra("lib_path");
 //        configPath = intent.getStringExtra("config_path");
 //        }
-public class RetroArchEmulatorActivity extends RetroActivityCamera {
+public class RetroArchEmulatorActivity extends RetroActivityCamera implements
+        EmulatorMonitorListener {
     private static final String TAG = "RetroArchEmulatorActivityTAG";
     private ScreenType mScreenType = ScreenType.NORMAL;
     private boolean mUpdateScreen = false;
     // If set to true then Retroarch will completely exit when it loses focus
     private boolean quitfocus = false;
+    private EmulatorMonitor mMonitor;
 
     @Override
     public void showLocalExitDialog() {
         runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                showDialog();
+//                showDialog();
+                Intent intent = new Intent();//调出主菜单UI
+                ComponentName componentName = new ComponentName("com.xugame.gameconsoleMenu",
+                        "com.xugame.gameconsole.dialog.localgamesetting.LocalGameSettingDialog");
+                intent.setComponent(componentName);
+                startActivityForResult(intent, 200);
             }
         });
 
-        DebugUtil.i(TAG,"showLocalExitDialog");
+        DebugUtil.i(TAG, "showLocalExitDialog");
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mMonitor = new EmulatorMonitor(this, this);
+
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (mMonitor != null)
+            mMonitor.unregister();
     }
 
     @Override
@@ -92,8 +116,8 @@ public class RetroArchEmulatorActivity extends RetroActivityCamera {
             // This requires NVIDIA Android extensions (available on NVIDIA Shield), if they are not
             // available then nothing will be done
             if (retro.hasExtra("HIDEMOUSE")) hideMouseCursor();
-            int screenMode=retro.getIntExtra("screenMode",0);
-            if(screenMode>=0&&screenMode<3){
+            int screenMode = retro.getIntExtra("screenMode", 0);
+            if (screenMode >= 0 && screenMode < 3) {
                 switch (screenMode) {
                     case 0:
                         setAspectRatio(AspectRatio.ASPECT_RATIO_CORE.getValue());
@@ -158,11 +182,11 @@ public class RetroArchEmulatorActivity extends RetroActivityCamera {
         if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
                 && event.getAction() == KeyEvent.ACTION_DOWN) {
 //            showDialog();
-            Intent intent=new Intent();//调出主菜单UI
-            ComponentName componentName=new ComponentName("com.xugame.gameconsoleMenu",
+            Intent intent = new Intent();//调出主菜单UI
+            ComponentName componentName = new ComponentName("com.xugame.gameconsoleMenu",
                     "com.xugame.gameconsole.dialog.localgamesetting.LocalGameSettingDialog");
-           intent.setComponent(componentName);
-            startActivityForResult(intent,200);
+            intent.setComponent(componentName);
+            startActivityForResult(intent, 200);
             return super.dispatchKeyEvent(event);
         }
 
@@ -275,8 +299,8 @@ public class RetroArchEmulatorActivity extends RetroActivityCamera {
                 if (data != null) {
                     int scanLine = data.getIntExtra("scanLine", 0);
                     int screen = data.getIntExtra("screen", 0);
-                    DebugUtil.i(TAG,"scanline="+scanLine+"screen="+screen);
-
+                    DebugUtil.i(TAG, "scanline=" + scanLine + "screen=" + screen);
+                    mUpdateScreen = true;
                     if (screen >= 0 && screen < 3) {
                         switch (screen) {
                             case 0:
@@ -291,19 +315,21 @@ public class RetroArchEmulatorActivity extends RetroActivityCamera {
                                 break;
                         }
                     }
-                    if (scanLine >= 0 && scanLine < 3) {
-                        switch (ScreenType.values()[scanLine]) {
-                            case NORMAL:
-                                switchFilter(null);
-                                break;
-                            case SAI_2X:
-                                switchFilter("/data/user/0/com.xugame.gameconsole/filters/video/2xSaI.filt");
-                                break;
-                            case SCANLINE:
-                                switchFilter("/data/user/0/com.xugame.gameconsole/filters/video/Scanline2x.filt");
-                                break;
-                        }
-                    }
+                    gameDialogClosed();
+
+//                    if (scanLine >= 0 && scanLine < 3) {
+//                        switch (ScreenType.values()[scanLine]) {
+//                            case NORMAL:
+//                                switchFilter(null);
+//                                break;
+//                            case SAI_2X:
+//                                switchFilter("/data/user/0/com.xugame.gameconsole/filters/video/2xSaI.filt");
+//                                break;
+//                            case SCANLINE:
+//                                switchFilter("/data/user/0/com.xugame.gameconsole/filters/video/Scanline2x.filt");
+//                                break;
+//                        }
+//                    }
                 }
             } else if (resultCode == 0) {
                 exitLocalGame();
@@ -311,4 +337,29 @@ public class RetroArchEmulatorActivity extends RetroActivityCamera {
         }
         super.onActivityResult(requestCode, resultCode, data);
     }
+
+    @Override
+    public void onHomeClick() {
+
+    }
+
+    @Override
+    public void onRecentClick() {
+
+    }
+
+    @Override
+    public void onMenuSaveState(int index) {
+        DebugUtil.i(TAG,"onMenuSaveState"+index);
+        boolean isOk=saveState(index);
+        if(isOk){
+
+        }
+    }
+
+    @Override
+    public void onMenuLoadState(int index) {
+        DebugUtil.i(TAG,"onMenuLoadState"+index);
+        loadState(index);
+    }
 }

+ 78 - 0
app/src/main/java/com/xugame/gameconsole/monitor/EmulatorMonitor.java

@@ -0,0 +1,78 @@
+package com.xugame.gameconsole.monitor;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.text.TextUtils;
+
+import com.xugame.gameconsole.util.DebugUtil;
+
+public class EmulatorMonitor {
+
+    private final String TAG = "EmulatorMonitor";
+    private static final String EMULATOR_SAVE_STATE_ACTION = "EMULATOR_SAVE_STATE_ACTION";
+    private static final String EMULATOR_LOAD_STATE_ACTION = "EMULATOR_LOAD_STATE_ACTION";
+
+
+    private static final String SYSTEM_REASON = "reason";
+    private static final String SYSTEM_HOME_KEY = "homekey";
+    private static final String SYSTEM_HOME_RECENT_APPS = "recentapps";
+
+    private Context mContext;
+    private BroadcastReceiver mDeviceKeyReceiver = null;
+    private EmulatorMonitorListener mListener;
+
+    public EmulatorMonitor(Context context, EmulatorMonitorListener listener) {
+        mContext = context;
+        mListener = listener;
+        mDeviceKeyReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (intent != null) {
+                    parserIntent(intent);
+                }
+            }
+        };
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+        filter.addAction(EMULATOR_SAVE_STATE_ACTION);
+        filter.addAction(EMULATOR_LOAD_STATE_ACTION);
+        mContext.registerReceiver(mDeviceKeyReceiver,
+                filter);
+    }
+
+
+    private void parserIntent(Intent intent) {
+        DebugUtil.i(TAG, "" + intent.getAction());
+        if (intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
+            String reason = intent.getStringExtra(SYSTEM_REASON);
+            if (!TextUtils.isEmpty(reason)) {
+                if (SYSTEM_HOME_KEY.equals(reason)) {
+                    mListener.onHomeClick();
+                } else if (SYSTEM_HOME_RECENT_APPS.equals(reason)) {
+                    mListener.onRecentClick();
+                }
+            }
+        } else if (intent.getAction().equals(EMULATOR_SAVE_STATE_ACTION)) {
+            int stateIndex = intent.getIntExtra("saveState", -1);
+            if (stateIndex >= 0 && mListener != null) {
+                mListener.onMenuSaveState(stateIndex);
+            }
+        } else if (intent.getAction().equals(EMULATOR_LOAD_STATE_ACTION)) {
+            int stateIndex = intent.getIntExtra("loadState", -1);
+            if (stateIndex >=0 && mListener != null) {
+                mListener.onMenuLoadState(stateIndex);
+            }
+        }
+    }
+
+
+    public void unregister() {
+        if (mDeviceKeyReceiver != null) {
+            mContext.unregisterReceiver(mDeviceKeyReceiver);
+            mDeviceKeyReceiver = null;
+        }
+    }
+
+}

+ 11 - 0
app/src/main/java/com/xugame/gameconsole/monitor/EmulatorMonitorListener.java

@@ -0,0 +1,11 @@
+package com.xugame.gameconsole.monitor;
+
+public interface EmulatorMonitorListener {
+    void onHomeClick();
+
+    void onRecentClick();
+
+    void onMenuSaveState(int index);
+
+    void onMenuLoadState(int index);
+}

+ 2 - 0
app/src/main/java/com/xugame/gameconsole/preferences/UserPreferences.java

@@ -133,6 +133,8 @@ public class UserPreferences {
         config.setString("input_overlay_enable", "false");
         config.setBoolean("log_verbosity", true);
         config.setBoolean("fps_show", true);
+        config.setInt("input_player1_analog_dpad_mode", 1);
+
         config.setInt("frontend_log_level", 1);
         config.setInt("libretro_log_level", 1);
 

二進制
app/src/main/res/drawable/app_main_bg.png


+ 10 - 2
app/src/main/res/layout/textcopp_layout.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
+    android:orientation="vertical"
     android:layout_height="match_parent">
 
     <Button
@@ -23,4 +24,11 @@
         android:layout_below="@+id/btn1"
         android:layout_marginTop="54dp"
         android:text="Super Mario"></Button>
-</RelativeLayout>
+    <Button
+        android:id="@+id/btn4"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/btn1"
+        android:layout_marginTop="54dp"
+        android:text="龙珠"></Button>
+</LinearLayout>

+ 1 - 0
app/src/main/res/values/themes.xml

@@ -8,6 +8,7 @@
         <!-- Secondary brand color. -->
         <item name="colorSecondary">@color/teal_200</item>
         <item name="colorSecondaryVariant">@color/teal_700</item>
+        <item name="android:windowBackground">@drawable/app_main_bg</item>
         <item name="colorOnSecondary">@color/black</item>
         <!-- Status bar color. -->
         <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>