56 changes: 44 additions & 12 deletions Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java
Expand Up @@ -23,7 +23,8 @@
* Refer to the license.txt file included.
*/
public final class GameListActivity extends Activity
implements GameListFragment.OnGameListZeroListener{
implements GameListFragment.OnGameListZeroListener
{

private int mCurFragmentNum = 0;
private Fragment mCurFragment;
Expand All @@ -43,7 +44,8 @@ public void onZeroFiles()
}

@Override
protected void onCreate(Bundle savedInstanceState) {
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.gamelist_activity);
mMe = this;
Expand Down Expand Up @@ -94,16 +96,19 @@ private void recreateFragment()
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, mCurFragment).commit();
}

public void SwitchPage(int toPage)
{
if (mCurFragmentNum == toPage)
return;

switch (mCurFragmentNum)
{
// Folder browser
case 1:
recreateFragment();
break;
break;

// Settings
case 2:
{
Expand Down Expand Up @@ -147,6 +152,7 @@ public void SwitchPage(int toPage)
}
}
break;

case 3: // Gamepad settings
{
InputConfigAdapter adapter = ((InputConfigFragment)mCurFragment).getAdapter();
Expand All @@ -162,11 +168,13 @@ public void SwitchPage(int toPage)
}
}
break;

case 0: // Game List
case 4: // About
/* Do Nothing */
break;
}

switch(toPage)
{
case 0:
Expand All @@ -177,6 +185,7 @@ public void SwitchPage(int toPage)
fragmentManager.beginTransaction().replace(R.id.content_frame, mCurFragment).commit();
}
break;

case 1:
{
Toast.makeText(mMe, getString(R.string.loading_browser), Toast.LENGTH_SHORT).show();
Expand All @@ -186,6 +195,7 @@ public void SwitchPage(int toPage)
fragmentManager.beginTransaction().replace(R.id.content_frame, mCurFragment).commit();
}
break;

case 2:
{
Toast.makeText(mMe, getString(R.string.loading_settings), Toast.LENGTH_SHORT).show();
Expand All @@ -195,6 +205,7 @@ public void SwitchPage(int toPage)
fragmentManager.beginTransaction().replace(R.id.content_frame, mCurFragment).commit();
}
break;

case 3:
{
Toast.makeText(mMe, getString(R.string.loading_gamepad), Toast.LENGTH_SHORT).show();
Expand All @@ -204,6 +215,7 @@ public void SwitchPage(int toPage)
fragmentManager.beginTransaction().replace(R.id.content_frame, mCurFragment).commit();
}
break;

case 4:
{
Toast.makeText(mMe, getString(R.string.about), Toast.LENGTH_SHORT).show();
Expand All @@ -213,10 +225,12 @@ public void SwitchPage(int toPage)
fragmentManager.beginTransaction().replace(R.id.content_frame, mCurFragment).commit();
}
break;

default:
break;
}
}

private AdapterView.OnItemClickListener mMenuItemClickListener = new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
Expand All @@ -232,57 +246,75 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
*/

@Override
protected void onPostCreate(Bundle savedInstanceState) {
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
// Pass any configuration change to the drawer toggle
mDrawerToggle.onConfigurationChanged(newConfig);
}

/* Called whenever we call invalidateOptionsMenu() */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
public boolean onPrepareOptionsMenu(Menu menu)
{
return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
public boolean onOptionsItemSelected(MenuItem item)
{
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if (mDrawerToggle.onOptionsItemSelected(item)) {
if (mDrawerToggle.onOptionsItemSelected(item))
{
return true;
}

return super.onOptionsItemSelected(item);
}

public void onBackPressed()
{
SwitchPage(0);
}

public interface OnGameConfigListener {
public interface OnGameConfigListener
{
public boolean onMotionEvent(MotionEvent event);
public boolean onKeyEvent(KeyEvent event);
}

// Gets move(triggers, joystick) events
@Override
public boolean dispatchGenericMotionEvent(MotionEvent event) {
public boolean dispatchGenericMotionEvent(MotionEvent event)
{
if (mCurFragmentNum == 3)
{
if (((OnGameConfigListener)mCurFragment).onMotionEvent(event))
return true;
}

return super.dispatchGenericMotionEvent(event);
}

// Gets button presses
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
public boolean dispatchKeyEvent(KeyEvent event)
{
if (mCurFragmentNum == 3)
{
if (((OnGameConfigListener)mCurFragment).onKeyEvent(event))
return true;
}

return super.dispatchKeyEvent(event);
}

Expand Down
47 changes: 26 additions & 21 deletions Source/Android/src/org/dolphinemu/dolphinemu/GameListAdapter.java
Expand Up @@ -10,13 +10,14 @@

import java.util.List;

public final class GameListAdapter extends ArrayAdapter<GameListItem>{
public final class GameListAdapter extends ArrayAdapter<GameListItem>
{
private final Context c;
private final int id;
private final List<GameListItem>items;

private Context c;
private int id;
private List<GameListItem>items;

public GameListAdapter(Context context, int textViewResourceId, List<GameListItem> objects) {
public GameListAdapter(Context context, int textViewResourceId, List<GameListItem> objects)
{
super(context, textViewResourceId, objects);
c = context;
id = textViewResourceId;
Expand All @@ -29,26 +30,30 @@ public GameListItem getItem(int i)
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null) {
if (v == null)
{
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, null);
}

final GameListItem o = items.get(position);
if (o != null) {
TextView t1 = (TextView) v.findViewById(R.id.GameItemTitle);
TextView t2 = (TextView) v.findViewById(R.id.GameItemSubText);
ImageView v1 = (ImageView) v.findViewById(R.id.GameItemIcon);

if(t1!=null)
t1.setText(o.getName());
if(t2!=null)
t2.setText(o.getData());
if(v1!=null)
v1.setImageBitmap(o.getImage());
}
final GameListItem item = items.get(position);
if (item != null)
{
TextView title = (TextView) v.findViewById(R.id.GameItemTitle);
TextView subtitle = (TextView) v.findViewById(R.id.GameItemSubText);
ImageView icon = (ImageView) v.findViewById(R.id.GameItemIcon);

if(title != null)
title.setText(item.getName());
if(subtitle != null)
subtitle.setText(item.getData());
if(icon != null)
icon.setImageBitmap(item.getImage());
}

return v;
}
}
Expand Down
26 changes: 18 additions & 8 deletions Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java
Expand Up @@ -31,13 +31,16 @@ public final class GameListFragment extends Fragment
private static GameListActivity mMe;
OnGameListZeroListener mCallback;

public interface OnGameListZeroListener {
public interface OnGameListZeroListener
{
public void onZeroFiles();
}

public GameListFragment() {
public GameListFragment()
{
// Empty constructor required for fragment subclasses
}

private void Fill()
{
List<GameListItem> fls = new ArrayList<GameListItem>();
Expand All @@ -51,7 +54,7 @@ private void Fill()
{
String BrowseDir = NativeLibrary.GetConfig("Dolphin.ini", "General", "GCMPath" + a, "");
File currentDir = new File(BrowseDir);
File[]dirs = currentDir.listFiles();
File[] dirs = currentDir.listFiles();
try
{
for(File entry : dirs)
Expand Down Expand Up @@ -81,8 +84,8 @@ private void Fill()
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.gamelist_listview, container, false);
mMainList = (ListView) rootView.findViewById(R.id.gamelist);
mMainList.setOnItemClickListener(mGameItemClickListener);
Expand All @@ -91,6 +94,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,

return mMainList;
}

private AdapterView.OnItemClickListener mGameItemClickListener = new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
Expand All @@ -102,6 +106,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
}
}
};

private void onFileClick(String o)
{
Toast.makeText(mMe, getString(R.string.file_clicked) + o, Toast.LENGTH_SHORT).show();
Expand All @@ -111,16 +116,21 @@ private void onFileClick(String o)
mMe.setResult(Activity.RESULT_OK, intent);
mMe.finish();
}

@Override
public void onAttach(Activity activity) {
public void onAttach(Activity activity)
{
super.onAttach(activity);

// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
try
{
mCallback = (OnGameListZeroListener) activity;
mMe = (GameListActivity) activity;
} catch (ClassCastException e) {
}
catch (ClassCastException e)
{
throw new ClassCastException(activity.toString()
+ " must implement OnGameListZeroListener");
}
Expand Down
40 changes: 25 additions & 15 deletions Source/Android/src/org/dolphinemu/dolphinemu/GameListItem.java
Expand Up @@ -8,36 +8,44 @@
import java.io.IOException;
import java.io.InputStream;

public final class GameListItem implements Comparable<GameListItem>{
private String name;
private String data;
private String path;
public final class GameListItem implements Comparable<GameListItem>
{
private final String name;
private final String data;
private final String path;
private final boolean isValid;
private Bitmap image;
private boolean m_valid;

public GameListItem(Context ctx, String n,String d,String p, boolean valid)
public GameListItem(Context ctx, String name, String data, String path, boolean isValid)
{
name = n;
data = d;
path = p;
m_valid = valid;
this.name = name;
this.data = data;
this.path = path;
this.isValid = isValid;

File file = new File(path);
if (!file.isDirectory() && !path.equals(""))
{
int[] Banner = NativeLibrary.GetBanner(path);
if (Banner[0] == 0)
{
try {
InputStream path = ctx.getAssets().open("NoBanner.png");
image = BitmapFactory.decodeStream(path);
} catch (IOException e) {
try
{
InputStream noBannerPath = ctx.getAssets().open("NoBanner.png");
image = BitmapFactory.decodeStream(noBannerPath);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}
else
{
image = Bitmap.createBitmap(Banner, 96, 32, Bitmap.Config.ARGB_8888);
}

name = NativeLibrary.GetTitle(path);
}
}
Expand All @@ -56,13 +64,15 @@ public String getPath()
{
return path;
}

public Bitmap getImage()
{
return image;
}

public boolean isValid()
{
return m_valid;
return isValid;
}

public int compareTo(GameListItem o)
Expand Down
Expand Up @@ -14,13 +14,14 @@
* Licensed under GPLv2
* Refer to the license.txt file included.
*/
public final class InputConfigAdapter extends ArrayAdapter<InputConfigItem> {
private Context c;
private int id;
private List<InputConfigItem> items;
public final class InputConfigAdapter extends ArrayAdapter<InputConfigItem>
{
private final Context c;
private final int id;
private final List<InputConfigItem> items;

public InputConfigAdapter(Context context, int textViewResourceId,
List<InputConfigItem> objects) {
public InputConfigAdapter(Context context, int textViewResourceId, List<InputConfigItem> objects)
{
super(context, textViewResourceId, objects);
c = context;
id = textViewResourceId;
Expand All @@ -31,26 +32,30 @@ public InputConfigItem getItem(int i)
{
return items.get(i);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null) {
if (v == null)
{
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, parent, false);
}
final InputConfigItem o = items.get(position);
if (o != null) {
TextView t1 = (TextView) v.findViewById(R.id.FolderTitle);
TextView t2 = (TextView) v.findViewById(R.id.FolderSubTitle);

if(t1!=null)
t1.setText(o.getName());
if(t2!=null)
t2.setText(o.getBind());

final InputConfigItem item = items.get(position);
if (item != null)
{
TextView title = (TextView) v.findViewById(R.id.FolderTitle);
TextView subtitle = (TextView) v.findViewById(R.id.FolderSubTitle);

if(title != null)
title.setText(item.getName());

if(subtitle != null)
subtitle.setText(item.getBind());
}

return v;
}



}
Expand Up @@ -19,7 +19,8 @@
* Refer to the license.txt file included.
*/
public final class InputConfigFragment extends Fragment
implements GameListActivity.OnGameConfigListener{
implements GameListActivity.OnGameConfigListener
{
private Activity m_activity;
private ListView mDrawerList;
private InputConfigAdapter adapter;
Expand All @@ -31,20 +32,24 @@ static public String getInputDesc(InputDevice input)
{
if (input == null)
return "null"; // Happens when the inputdevice is from an unknown source

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
return input.getDescriptor();
}
else
{
List<InputDevice.MotionRange> motions = input.getMotionRanges();
String fakeid = "";

for (InputDevice.MotionRange range : motions)
fakeid += range.getAxis();

return fakeid;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
List<InputConfigItem> Input = new ArrayList<InputConfigItem>();
Input.add(new InputConfigItem(getString(R.string.draw_onscreen_controls), "Android-ScreenControls", "True"));
Expand Down Expand Up @@ -77,6 +82,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
mDrawerList.setOnItemClickListener(mMenuItemClickListener);
return mDrawerList;
}

private AdapterView.OnItemClickListener mMenuItemClickListener = new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
Expand All @@ -100,6 +106,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
o.setBind(newBind);
adapter.insert(o, position);
break;

default: // gamepad controls

Toast.makeText(m_activity, getString(R.string.press_button_to_config, o.getName()), Toast.LENGTH_SHORT).show();
Expand All @@ -120,10 +127,12 @@ private void AssignBind(String bind)
o.setBind(bind);
adapter.insert(o, configPosition);
}

public InputConfigAdapter getAdapter()
{
return adapter;
}

// Called from GameListActivity
public boolean onMotionEvent(MotionEvent event)
{
Expand Down Expand Up @@ -166,10 +175,12 @@ else if (m_values.get(a) < (event.getAxisValue(range.getAxis()) - 0.5f))
}
return true;
}

public boolean onKeyEvent(KeyEvent event)
{
Log.w("InputConfigFragment", "Got Event " + event.getAction());
switch (event.getAction()) {
switch (event.getAction())
{
case KeyEvent.ACTION_DOWN:
case KeyEvent.ACTION_UP:
if (Configuring)
Expand All @@ -179,6 +190,7 @@ public boolean onKeyEvent(KeyEvent event)
Configuring = false;
return true;
}

default:
break;
}
Expand All @@ -187,14 +199,18 @@ public boolean onKeyEvent(KeyEvent event)
}

@Override
public void onAttach(Activity activity) {
public void onAttach(Activity activity)
{
super.onAttach(activity);

// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
try
{
m_activity = activity;
} catch (ClassCastException e) {
}
catch (ClassCastException e)
{
throw new ClassCastException(activity.toString()
+ " must implement OnGameListZeroListener");
}
Expand Down
Expand Up @@ -9,7 +9,8 @@
/**
* Represents a controller input item (button, stick, etc).
*/
public final class InputConfigItem implements Comparable<InputConfigItem>{
public final class InputConfigItem implements Comparable<InputConfigItem>
{
private String m_name;
private String m_Config;
private String m_bind;
Expand Down
Expand Up @@ -4,12 +4,14 @@
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public final class NativeGLSurfaceView extends SurfaceView {
public final class NativeGLSurfaceView extends SurfaceView
{
static private Thread myRun;
static private boolean Running = false;
static private boolean Created = false;

public NativeGLSurfaceView(Context context) {
public NativeGLSurfaceView(Context context)
{
super(context);
if (!Created)
{
Expand All @@ -20,8 +22,10 @@ public void run() {
NativeLibrary.Run(getHolder().getSurface());
}
};

getHolder().addCallback(new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
public void surfaceCreated(SurfaceHolder holder)
{
// TODO Auto-generated method stub
if (!Running)
{
Expand All @@ -30,17 +34,17 @@ public void surfaceCreated(SurfaceHolder holder) {
}
}

public void surfaceChanged(SurfaceHolder arg0, int arg1,
int arg2, int arg3) {
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
{
// TODO Auto-generated method stub

}

public void surfaceDestroyed(SurfaceHolder arg0) {
public void surfaceDestroyed(SurfaceHolder arg0)
{
// TODO Auto-generated method stub

}
});

Created = true;
}
}
Expand Down
Expand Up @@ -13,7 +13,8 @@
* Class which contains methods that interact
* with the native side of the Dolphin code.
*/
public final class NativeLibrary {
public final class NativeLibrary
{
public static native void onTouchEvent(int Action, float X, float Y);
public static native void onGamePadEvent(String Device, int Button, int Action);
public static native void onGamePadMoveEvent(String Device, int Axis, float Value);
Expand Down
30 changes: 21 additions & 9 deletions Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java
Expand Up @@ -17,10 +17,12 @@
* Licensed under GPLv2
* Refer to the license.txt file included.
*/
public final class PrefsFragment extends PreferenceFragment {
public final class PrefsFragment extends PreferenceFragment
{
private Activity m_activity;

static public class VersionCheck {
static public class VersionCheck
{
EGL10 mEGL;
EGLDisplay mEGLDisplay;
EGLConfig[] mEGLConfigs;
Expand All @@ -31,8 +33,8 @@ static public class VersionCheck {

String mThreadOwner;

public VersionCheck() {

public VersionCheck()
{
int[] version = new int[2];
int[] attribList = new int[] {
EGL10.EGL_WIDTH, 1,
Expand Down Expand Up @@ -69,11 +71,14 @@ public String getVendor()
{
return mGL.glGetString(GL10.GL_VENDOR);
}

public String getRenderer()
{
return mGL.glGetString(GL10.GL_RENDERER);
}
private EGLConfig chooseConfig() {

private EGLConfig chooseConfig()
{
int[] attribList = new int[] {
EGL10.EGL_DEPTH_SIZE, 0,
EGL10.EGL_STENCIL_SIZE, 0,
Expand All @@ -95,6 +100,7 @@ private EGLConfig chooseConfig() {
return mEGLConfigs[0]; // Best match is probably the first configuration
}
}

static public boolean SupportsGLES3()
{
VersionCheck mbuffer = new VersionCheck();
Expand Down Expand Up @@ -134,8 +140,10 @@ static public boolean SupportsGLES3()
}
return mSupportsGLES3;
}

@Override
public void onCreate(Bundle savedInstanceState) {
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

// Load the preferences from an XML resource
Expand Down Expand Up @@ -197,14 +205,18 @@ else if (Build.CPU_ABI.contains("arm"))
}

@Override
public void onAttach(Activity activity) {
public void onAttach(Activity activity)
{
super.onAttach(activity);

// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
try
{
m_activity = activity;
} catch (ClassCastException e) {
}
catch (ClassCastException e)
{
throw new ClassCastException(activity.toString()
+ " must implement OnGameListZeroListener");
}
Expand Down
24 changes: 12 additions & 12 deletions Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java
Expand Up @@ -9,14 +9,13 @@

import java.util.List;

public final class SideMenuAdapter extends ArrayAdapter<SideMenuItem>{

private Context c;
private int id;
private List<SideMenuItem>items;
public final class SideMenuAdapter extends ArrayAdapter<SideMenuItem>
{
private final Context c;
private final int id;
private final List<SideMenuItem>items;

public SideMenuAdapter(Context context, int textViewResourceId,
List<SideMenuItem> objects)
public SideMenuAdapter(Context context, int textViewResourceId, List<SideMenuItem> objects)
{
super(context, textViewResourceId, objects);
c = context;
Expand All @@ -28,6 +27,7 @@ public SideMenuItem getItem(int i)
{
return items.get(i);
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
Expand All @@ -38,13 +38,13 @@ public View getView(int position, View convertView, ViewGroup parent)
v = vi.inflate(id, null);
}

final SideMenuItem o = items.get(position);
if (o != null)
final SideMenuItem item = items.get(position);
if (item != null)
{
TextView t1 = (TextView) v.findViewById(R.id.SideMenuTitle);
TextView title = (TextView) v.findViewById(R.id.SideMenuTitle);

if(t1!=null)
t1.setText(o.getName());
if(title != null)
title.setText(item.getName());
}

return v;
Expand Down
Expand Up @@ -12,8 +12,8 @@
*/
public final class SideMenuItem implements Comparable<SideMenuItem>
{
private String m_name;
private int m_id;
private final String m_name;
private final int m_id;

/**
* Constructor
Expand Down