Android mega commit of trash.

This commit is contained in:
Ryan Houdek committed 2013-03-19 21:53:09 -05:00
1 parent edd9d0e0ef
commit d11679a06e
33 files changed
+2311 -33

No files matched your search

@@ -0,0 +1,33 @@
package org.dolphinemu.dolphinemu;
public class Button {
private String ButtonID;
private float _x;
private float _y;
private float _ex;
private float _ey;
public Button(String Button, float[] Coords)
{
ButtonID = Button;
_x = Coords[0];
_y = Coords[1];
_ex = Coords[4];
_ey = Coords[5];
}
public float X()
{
return _x;
}
public float Y()
{
return _y;
}
public float EX()
{
return _ex;
}
public float EY()
{
return _ey;
}
}
@@ -0,0 +1,43 @@
package org.dolphinemu.dolphinemu;
public class ButtonManager {
private final int NUMBUTTONS = 15;
Button[] Buttons;
float[][] ButtonCoords =
{ // X, Y, X, EY, EX, EY, EX, Y
{0.75f, -1.0f, 0.75f, -0.75f, 1.0f, -0.75f, 1.0f, -1.0f},
{0.50f, -1.0f, 0.50f, -0.75f, 0.75f, -0.75f, 0.75f, -1.0f},
};
public ButtonManager()
{
Buttons = new Button[NUMBUTTONS];
Buttons[0] = new Button("A", ButtonCoords[0]);
Buttons[1] = new Button("B", ButtonCoords[1]);
}
Button GetButton(int ID)
{
return Buttons[ID];
}
float[][] GetButtonCoords()
{
return ButtonCoords;
}
public int ButtonPressed(int action, float x, float y)
{
for (int a = 0; a < 2; ++a)
{
if (x >= Buttons[a].X() &&
x <= Buttons[a].EX() &&
-y >= Buttons[a].Y() &&
-y <= Buttons[a].EY())
{
return a;
}
}
return -1;
}
}
@@ -0,0 +1,124 @@
package org.dolphinemu.dolphinemu;
import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.WindowManager;
public class DolphinEmulator<MainActivity> extends Activity {
static private NativeGLSurfaceView GLview = null;
static private NativeRenderer Renderer = null;
static private boolean Running = false;
private float screenWidth;
private float screenHeight;
public static native void SetKey(int Value, int Key);
static
{
try
{
System.loadLibrary("dolphin-emu-nogui");
}
catch (Exception ex)
{
Log.w("me", ex.toString());
}
}
@Override
public void onStop()
{
super.onStop();
if (Running)
Renderer.StopEmulation();
}
@Override
public void onPause()
{
super.onPause();
if (Running)
Renderer.PauseEmulation();
}
@Override
public void onResume()
{
super.onResume();
if (Running)
Renderer.UnPauseEmulation();
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null)
{
Intent ListIntent = new Intent(this, NativeListView.class);
startActivityForResult(ListIntent, 1);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
{
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(getApplicationContext().WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut
wm.getDefaultDisplay().getMetrics(displayMetrics);
screenWidth = displayMetrics.widthPixels;
screenHeight = displayMetrics.heightPixels;
String FileName = data.getStringExtra("Select");
Renderer = new NativeRenderer();
Renderer.setContext(getApplicationContext());
GLview = new NativeGLSurfaceView(this);
GLview.setEGLContextClientVersion(2);
GLview.setRenderer(Renderer);
GLview.SetFileName(FileName);
setContentView(GLview);
Running = true;
}
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
float X, Y;
int Action;
X = event.getX();
Y = event.getY();
Action = event.getActionMasked();
int Button = Renderer.ButtonPressed(Action, ((X / screenWidth) * 2.0f) - 1.0f, ((Y / screenHeight) * 2.0f) - 1.0f);
if (Button != -1)
SetKey(Action, Button);
return false;
}
public boolean overrideKeys()
{
return false;
}
}
@@ -0,0 +1,53 @@
package org.dolphinemu.dolphinemu;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class FileArrayAdapter extends ArrayAdapter<Option>{
private Context c;
private int id;
private List<Option>items;
public FileArrayAdapter(Context context, int textViewResourceId,
List<Option> objects) {
super(context, textViewResourceId, objects);
c = context;
id = textViewResourceId;
items = objects;
}
public Option getItem(int i)
{
return items.get(i);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, null);
}
final Option o = items.get(position);
if (o != null) {
TextView t1 = (TextView) v.findViewById(R.id.TextView01);
TextView t2 = (TextView) v.findViewById(R.id.TextView02);
if(t1!=null)
t1.setText(o.getName());
if(t2!=null)
t2.setText(o.getData());
}
return v;
}
}
@@ -0,0 +1,61 @@
package org.dolphinemu.dolphinemu;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
public class NativeGLSurfaceView extends GLSurfaceView {
static private String FileName;
static private Thread myRun;
static private boolean Running = false;
static private boolean Created = false;
public static native void main(String File, Surface surf);
static
{
try
{
System.loadLibrary("dolphin-emu-nogui");
}
catch (Exception ex)
{
Log.w("me", ex.toString());
}
}
public NativeGLSurfaceView(Context context) {
super(context);
if (!Created)
{
myRun = new Thread()
{
@Override
public void run() {
main(FileName, getHolder().getSurface());
}
};
Created = true;
}
}
public void surfaceCreated(SurfaceHolder holder)
{
super.surfaceCreated(holder);
if (!Running)
{
myRun.start();
Running = true;
}
}
public void SetFileName(String file)
{
FileName = file;
}
}
@@ -0,0 +1,94 @@
package org.dolphinemu.dolphinemu;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
public class NativeListView extends ListActivity {
private FileArrayAdapter adapter;
static private File currentDir = null;
private void Fill(File f)
{
File[]dirs = f.listFiles();
this.setTitle("Current Dir: " + f.getName());
List<Option>dir = new ArrayList<Option>();
List<Option>fls = new ArrayList<Option>();
try
{
for(File ff: dirs)
{
if (ff.getName().charAt(0) != '.')
if(ff.isDirectory())
dir.add(new Option(ff.getName(),"Folder",ff.getAbsolutePath()));
else
if (ff.getName().toLowerCase().indexOf(".gcm") >= 0 ||
ff.getName().toLowerCase().indexOf(".iso") >= 0 ||
ff.getName().toLowerCase().indexOf(".wbfs") >= 0 ||
ff.getName().toLowerCase().indexOf(".gcz") >= 0 ||
ff.getName().toLowerCase().indexOf(".dol") >= 0 ||
ff.getName().toLowerCase().indexOf(".elf") >= 0)
fls.add(new Option(ff.getName(),"File Size: "+ff.length(),ff.getAbsolutePath()));
}
}
catch(Exception e)
{
}
Collections.sort(dir);
Collections.sort(fls);
dir.addAll(fls);
if(!f.getName().equalsIgnoreCase("sdcard"))
dir.add(0,new Option("..","Parent Directory",f.getParent()));
adapter = new FileArrayAdapter(this,R.layout.main,dir);
this.setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
Option o = adapter.getItem(position);
if(o.getData().equalsIgnoreCase("folder")||o.getData().equalsIgnoreCase("parent directory")){
currentDir = new File(o.getPath());
Fill(currentDir);
}
else
{
onFileClick(o.getPath());
}
}
private void onFileClick(String o)
{
Toast.makeText(this, "File Clicked: " + o, Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra("Select", o);
setResult(Activity.RESULT_OK, intent);
this.finish();
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if(currentDir == null)
currentDir = new File(Environment.getExternalStorageDirectory().getPath());
Fill(currentDir);
}
}
@@ -0,0 +1,168 @@
package org.dolphinemu.dolphinemu;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.GLUtils;
import android.util.Log;
public class NativeRenderer implements GLSurfaceView.Renderer {
// Button Manager
private static ButtonManager Buttons;
private static boolean Running = false;
// Context
private static Context _gContext;
// Native
public static native void DrawME();
public static native void DrawButton(int GLTex, int ID);
public static native void SetButtonCoords(float[] Coords);
public static native void PrepareME();
public static native void UnPauseEmulation();
public static native void PauseEmulation();
public static native void StopEmulation();
// Texture loading
private static int buttonA = -1;
private static int buttonB = -1;
// Get a new texture id:
private static int newTextureID(GL10 gl)
{
int[] temp = new int[1];
gl.glGenTextures(1, temp, 0);
return temp[0];
}
// Will load a texture out of a drawable resource file, and return an OpenGL texture ID:
private int loadTexture(GL10 gl, String resource)
{
// In which ID will we be storing this texture?
int id = newTextureID(gl);
// Load up, and flip the texture:
InputStream File = null;
try {
File = _gContext.getAssets().open(resource);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
Bitmap bmp = BitmapFactory.decodeStream(File);
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
// Set all of our texture parameters:
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR_MIPMAP_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR_MIPMAP_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
// Generate, and load up all of the mipmaps:
for(int level=0, height = bmp.getHeight(), width = bmp.getWidth(); true; level++)
{
// Push the bitmap onto the GPU:
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, bmp, 0);
// We need to stop when the texture is 1x1:
if(height==1 && width==1) break;
// Resize, and let's go again:
width >>= 1; height >>= 1;
if(width<1) width = 1;
if(height<1) height = 1;
Bitmap bmp2 = Bitmap.createScaledBitmap(bmp, width, height, true);
bmp.recycle();
bmp = bmp2;
}
bmp.recycle();
return id;
}
static
{
try
{
System.loadLibrary("dolphin-emu-nogui");
}
catch (Exception ex)
{
Log.w("me", ex.toString());
}
if (!Running)
Buttons = new ButtonManager();
}
public void onSurfaceChanged(GL10 gl, int width, int height)
{
gl.glViewport(0, 0, width, height);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
if (!Running)
{
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
buttonA = loadTexture(gl, "ButtonA.png");
buttonB = loadTexture(gl, "ButtonB.png");
SetButtonCoords(Flatten(Buttons.GetButtonCoords()));
PrepareME();
Running = true;
}
}
public static float[] Flatten(float[][] data) {
float[] list = new float[data.length * data[0].length];
for(int y = 0; y < data.length; ++y)
for (int x = 0; x < data[y].length; ++x)
list[y * data[0].length + x] = data[y][x];
return list;
}
public void onDrawFrame(GL10 gl)
{
if (Running)
{
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
DrawME();
// -1 is left
// -1 is bottom
DrawButton(buttonA, 0);
DrawButton(buttonB, 1);
}
}
public void setContext(Context ctx)
{
_gContext = ctx;
}
public int ButtonPressed(int action, float x, float y)
{
return Buttons.ButtonPressed(action, x, y);
}
}
@@ -0,0 +1,38 @@
package org.dolphinemu.dolphinemu;
public class Option implements Comparable<Option>{
private String name;
private String data;
private String path;
public Option(String n,String d,String p)
{
name = n;
data = d;
path = p;
}
public String getName()
{
return name;
}
public String getData()
{
return data;
}
public String getPath()
{
return path;
}
public int compareTo(Option o)
{
if(this.name != null)
return this.name.toLowerCase().compareTo(o.getName().toLowerCase());
else
throw new IllegalArgumentException();
}
}