diff --git a/src/pandroid/app/src/main/AndroidManifest.xml b/src/pandroid/app/src/main/AndroidManifest.xml
index 0effd35f..2d318370 100644
--- a/src/pandroid/app/src/main/AndroidManifest.xml
+++ b/src/pandroid/app/src/main/AndroidManifest.xml
@@ -2,6 +2,12 @@
+
+
+
+
-
+
+
-
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/C.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/C.java
new file mode 100644
index 00000000..722a7235
--- /dev/null
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/C.java
@@ -0,0 +1,6 @@
+package com.panda3ds.pandroid;
+
+public class C {
+ public static final String EXTRA_PATH = "path";
+ public static final String LOG_TAG = "Alber";
+}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java
new file mode 100644
index 00000000..597d664b
--- /dev/null
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java
@@ -0,0 +1,6 @@
+package com.panda3ds.pandroid.app;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+public class BaseActivity extends AppCompatActivity {
+}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java
new file mode 100644
index 00000000..a82f4bf8
--- /dev/null
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java
@@ -0,0 +1,39 @@
+package com.panda3ds.pandroid.app;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+
+import com.panda3ds.pandroid.AlberDriver;
+import com.panda3ds.pandroid.C;
+import com.panda3ds.pandroid.app.BaseActivity;
+import com.panda3ds.pandroid.view.PandaGlSurfaceView;
+
+public class GameActivity extends BaseActivity {
+ private PandaGlSurfaceView pandaSurface;
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ pandaSurface = new PandaGlSurfaceView(this);;
+ setContentView(pandaSurface);
+
+ Intent intent = getIntent();
+ if(!intent.hasExtra(C.EXTRA_PATH)){
+ Toast.makeText(this, "INVALID ROM PATH", Toast.LENGTH_LONG).show();
+ finish();
+ return;
+ }
+
+ pandaSurface.getRenderer().postDrawEvent(()->{
+ String path = intent.getStringExtra(C.EXTRA_PATH);
+ Log.i(C.LOG_TAG,"Try load ROM: "+path);
+ AlberDriver.LoadRom(path);
+ });
+ }
+}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/MainActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/MainActivity.java
similarity index 52%
rename from src/pandroid/app/src/main/java/com/panda3ds/pandroid/MainActivity.java
rename to src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/MainActivity.java
index b7b3726d..6acce7fd 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/MainActivity.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/MainActivity.java
@@ -1,24 +1,20 @@
-package com.panda3ds.pandroid;
+package com.panda3ds.pandroid.app;
-import androidx.appcompat.app.AppCompatActivity;
import static android.provider.Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.view.WindowInsets;
-import android.view.View;
import android.os.Environment;
import android.widget.Toast;
-import android.widget.FrameLayout;
-import com.panda3ds.pandroid.PathUtils;
-import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.panda3ds.pandroid.C;
+import com.panda3ds.pandroid.R;
+import com.panda3ds.pandroid.utils.PathUtils;
public class MainActivity extends AppCompatActivity {
-
- PandaGlSurfaceView glView;
-
private static final int PICK_3DS_ROM = 2;
private void openFile() {
@@ -31,22 +27,18 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (!Environment.isExternalStorageManager()) {
- Intent intent = new Intent(ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
- startActivity(intent);
- }
-
- glView = new PandaGlSurfaceView(this);
- setContentView(glView);
- FloatingActionButton fab = new FloatingActionButton(this);
- fab.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- openFile();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ if (!Environment.isExternalStorageManager()) {
+ Intent intent = new Intent(ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
+ startActivity(intent);
}
+ }
+
+ setContentView(R.layout.activity_main);
+
+ findViewById(R.id.load_rom).setOnClickListener(v->{
+ openFile();
});
- FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(200, 200);
- addContentView(fab, params);
}
@Override
@@ -55,13 +47,10 @@ public class MainActivity extends AppCompatActivity {
if (resultCode == RESULT_OK) {
String path = PathUtils.getPath(getApplicationContext(), data.getData());
Toast.makeText(getApplicationContext(), "pandroid opening " + path, Toast.LENGTH_LONG).show();
- glView.queueEvent(new Runnable() {
- @Override
- public void run() {
- AlberDriver.LoadRom(path);
- }
- });
+ startActivity(new Intent(this, GameActivity.class)
+ .putExtra(C.EXTRA_PATH, path));
}
+ super.onActivityResult(requestCode, resultCode, data);
}
}
}
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/PathUtils.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/PathUtils.java
similarity index 99%
rename from src/pandroid/app/src/main/java/com/panda3ds/pandroid/PathUtils.java
rename to src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/PathUtils.java
index 740223eb..0a24603c 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/PathUtils.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/PathUtils.java
@@ -1,4 +1,4 @@
-package com.panda3ds.pandroid;
+package com.panda3ds.pandroid.utils;
import android.content.ContentUris;
import android.content.Context;
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/PandaGlRenderer.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java
similarity index 86%
rename from src/pandroid/app/src/main/java/com/panda3ds/pandroid/PandaGlRenderer.java
rename to src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java
index cb6f90da..9ad8e34e 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/PandaGlRenderer.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java
@@ -1,4 +1,4 @@
-package com.panda3ds.pandroid;
+package com.panda3ds.pandroid.view;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
@@ -10,11 +10,16 @@ import android.opengl.GLSurfaceView;
import android.util.DisplayMetrics;
import android.util.Log;
+import com.panda3ds.pandroid.AlberDriver;
+
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
+import java.util.ArrayList;
public class PandaGlRenderer implements GLSurfaceView.Renderer {
+
+ private final ArrayList events = new ArrayList<>();
int screenWidth, screenHeight;
int screenTexture;
public int screenFbo;
@@ -23,6 +28,7 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
super();
}
+
@Override
protected void finalize() throws Throwable {
if (screenTexture != 0) {
@@ -33,7 +39,7 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
}
super.finalize();
}
-
+
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
Log.i("pandroid", glGetString(GL_EXTENSIONS));
Log.w("pandroid", glGetString(GL_VERSION));
@@ -61,6 +67,10 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
AlberDriver.Initialize();
}
+ public void postDrawEvent(Runnable callback){
+ events.add(callback);
+ }
+
public void onDrawFrame(GL10 unused) {
if (AlberDriver.HasRomLoaded()) {
AlberDriver.RunFrame(screenFbo);
@@ -68,6 +78,13 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
glBindFramebuffer(GL_READ_FRAMEBUFFER, screenFbo);
glBlitFramebuffer(0, 0, 400, 480, 0, 0, screenWidth, screenHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
}
+
+ int count = events.size();
+ while (count > 0){
+ events.get(0).run();
+ events.remove(0);
+ count--;
+ }
}
public void onSurfaceChanged(GL10 unused, int width, int height) {
@@ -76,4 +93,4 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
screenHeight = height;
glDisable(GL_SCISSOR_TEST);
}
-}
+}
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/PandaGlSurfaceView.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlSurfaceView.java
similarity index 71%
rename from src/pandroid/app/src/main/java/com/panda3ds/pandroid/PandaGlSurfaceView.java
rename to src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlSurfaceView.java
index 657b327c..a26b3d2f 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/PandaGlSurfaceView.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlSurfaceView.java
@@ -1,11 +1,7 @@
-package com.panda3ds.pandroid;
+package com.panda3ds.pandroid.view;
-import android.app.Activity;
import android.content.Context;
import android.opengl.GLSurfaceView;
-import android.util.DisplayMetrics;
-
-import com.panda3ds.pandroid.PandaGlRenderer;
public class PandaGlSurfaceView extends GLSurfaceView {
final PandaGlRenderer renderer;
@@ -16,4 +12,8 @@ public class PandaGlSurfaceView extends GLSurfaceView {
renderer = new PandaGlRenderer();
setRenderer(renderer);
}
+
+ public PandaGlRenderer getRenderer() {
+ return renderer;
+ }
}
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/res/layout/activity_main.xml b/src/pandroid/app/src/main/res/layout/activity_main.xml
index 17eab17b..89a17ce9 100644
--- a/src/pandroid/app/src/main/res/layout/activity_main.xml
+++ b/src/pandroid/app/src/main/res/layout/activity_main.xml
@@ -1,18 +1,22 @@
-
+ tools:context=".app.MainActivity">
-
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/res/values/strings.xml b/src/pandroid/app/src/main/res/values/strings.xml
index 40c0990f..f937ad5f 100644
--- a/src/pandroid/app/src/main/res/values/strings.xml
+++ b/src/pandroid/app/src/main/res/values/strings.xml
@@ -1,3 +1,4 @@
pandroid
+ Load ROM
\ No newline at end of file