diff --git a/shell/android/AndroidManifest.xml b/shell/android/AndroidManifest.xml
index 52e09e2ed..280fc4062 100644
--- a/shell/android/AndroidManifest.xml
+++ b/shell/android/AndroidManifest.xml
@@ -44,7 +44,7 @@
@@ -91,7 +91,7 @@
diff --git a/shell/android/res/layout/input_mod_fragment.xml b/shell/android/res/layout/input_mod_fragment.xml
index ed65f0ac0..eaf621675 100644
--- a/shell/android/res/layout/input_mod_fragment.xml
+++ b/shell/android/res/layout/input_mod_fragment.xml
@@ -389,71 +389,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/shell/android/res/values/strings.xml b/shell/android/res/values/strings.xml
index 4a01dd92a..ed1f702af 100644
--- a/shell/android/res/values/strings.xml
+++ b/shell/android/res/values/strings.xml
@@ -57,7 +57,6 @@
This controller is already in use!
Enable Custom Key Layout
Enable Compatibility Mode
- Joystick Uses DPAD Layout
Microphone plugged into port 2
Customize Physical Controls
diff --git a/shell/android/src/com/reicast/emulator/emu/GL2JNIActivity.java b/shell/android/src/com/reicast/emulator/GL2JNIActivity.java
similarity index 83%
rename from shell/android/src/com/reicast/emulator/emu/GL2JNIActivity.java
rename to shell/android/src/com/reicast/emulator/GL2JNIActivity.java
index c3cb3a1c2..43c580728 100644
--- a/shell/android/src/com/reicast/emulator/emu/GL2JNIActivity.java
+++ b/shell/android/src/com/reicast/emulator/GL2JNIActivity.java
@@ -1,4 +1,4 @@
-package com.reicast.emulator.emu;
+package com.reicast.emulator;
import java.util.Arrays;
import java.util.HashMap;
@@ -14,6 +14,7 @@ import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
+import android.util.SparseArray;
import android.view.Gravity;
import android.view.InputDevice;
import android.view.KeyEvent;
@@ -25,8 +26,9 @@ import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.Toast;
-import com.reicast.emulator.R;
-import com.reicast.emulator.config.ConfigureFragment;
+import com.reicast.emulator.emu.GL2JNIView;
+import com.reicast.emulator.emu.JNIdc;
+import com.reicast.emulator.emu.OnScreenMenu;
import com.reicast.emulator.emu.OnScreenMenu.FpsPopup;
import com.reicast.emulator.emu.OnScreenMenu.MainPopup;
import com.reicast.emulator.emu.OnScreenMenu.VmuPopup;
@@ -38,44 +40,35 @@ import com.reicast.emulator.periph.SipEmulator;
public class GL2JNIActivity extends Activity {
public GL2JNIView mView;
OnScreenMenu menu;
- MainPopup popUp;
+ public MainPopup popUp;
VmuPopup vmuPop;
FpsPopup fpsPop;
MOGAInput moga = new MOGAInput();
private SharedPreferences prefs;
- public String[] portId = { "_A", "_B", "_C", "_D" };
- public boolean[] compat = { false, false, false, false };
- public boolean[] custom = { false, false, false, false };
- public boolean[] jsDpad = { false, false, false, false };
- public int[] name = { -1, -1, -1, -1 };
-
- private Gamepad gamepad;
- public boolean isXperiaPlay;
- public boolean isOuyaOrTV;
+ public static byte[] syms;
- float[] globalLS_X = new float[4], globalLS_Y = new float[4],
+ private String[] portId = { "_A", "_B", "_C", "_D" };
+ private boolean[] compat = { false, false, false, false };
+ private boolean[] custom = { false, false, false, false };
+ private int[] name = { -1, -1, -1, -1 };
+ private float[] globalLS_X = new float[4], globalLS_Y = new float[4],
previousLS_X = new float[4], previousLS_Y = new float[4];
+ private int map[][] = new int[4][];
- public static HashMap deviceId_deviceDescriptor = new HashMap();
- public static HashMap deviceDescriptor_PlayerNum = new HashMap();
-
- int map[][];
-
- static byte[] syms;
+ private SparseArray deviceId_deviceDescriptor = new SparseArray();
+ private HashMap deviceDescriptor_PlayerNum = new HashMap();
@Override
protected void onCreate(Bundle icicle) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
- moga.onCreate(this);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
-
menu = new OnScreenMenu(GL2JNIActivity.this, prefs);
- gamepad = new Gamepad(GL2JNIActivity.this);
- isXperiaPlay = gamepad.IsXperiaPlay();
- isOuyaOrTV = gamepad.IsOuyaOrTV();
+ Gamepad.isXperiaPlay = Gamepad.IsXperiaPlay();
+ Gamepad.isOuyaOrTV = Gamepad.IsOuyaOrTV(GL2JNIActivity.this);
+// isNvidiaShield = Gamepad.IsNvidiaShield();
/*
* try { //int rID =
@@ -93,8 +86,7 @@ public class GL2JNIActivity extends Activity {
// Call parent onCreate()
super.onCreate(icicle);
OuyaController.init(this);
-
- map = new int[4][];
+ moga.onCreate(this, deviceId_deviceDescriptor, deviceDescriptor_PlayerNum);
// Populate device descriptor-to-player-map from preferences
deviceDescriptor_PlayerNum.put(
@@ -160,41 +152,28 @@ public class GL2JNIActivity extends Activity {
String id = portId[playerNum];
custom[playerNum] = prefs.getBoolean("modified_key_layout" + id, false);
compat[playerNum] = prefs.getBoolean("controller_compat" + id, false);
- jsDpad[playerNum] = prefs.getBoolean("dpad_js_layout" + id, false);
if (!compat[playerNum]) {
if (custom[playerNum]) {
- map[playerNum] = gamepad.setModifiedKeys(id, playerNum);
-
- if (jsDpad[playerNum]) {
- initJoyStickLayout(playerNum);
- }
+ map[playerNum] = Gamepad.setModifiedKeys(id, playerNum, prefs);
} else if (InputDevice.getDevice(joy).getName()
.equals("Sony PLAYSTATION(R)3 Controller")) {
- map[playerNum] = gamepad.getConsoleController();
+ map[playerNum] = Gamepad.getConsoleController();
} else if (InputDevice.getDevice(joy).getName()
.equals("Microsoft X-Box 360 pad")) {
- map[playerNum] = gamepad.getConsoleController();
-
- jsDpad[playerNum] = true;
-
- initJoyStickLayout(playerNum);
+ map[playerNum] = Gamepad.getConsoleController();
} else if (InputDevice.getDevice(joy).getName()
.contains("NVIDIA Corporation NVIDIA Controller")) {
- map[playerNum] = gamepad.getConsoleController();
- jsDpad[playerNum] = true;
-
- initJoyStickLayout(playerNum);
+ map[playerNum] = Gamepad.getConsoleController();
} else if (InputDevice.getDevice(joy).getName()
.contains("keypad-zeus")) {
- map[playerNum] = gamepad.getXPlayController();
-
- initJoyStickLayout(playerNum);
- } else if (!moga.isActive[playerNum]) { // Ouya controller
- map[playerNum] = gamepad.getOUYAController();
+ map[playerNum] = Gamepad.getXPlayController();
+ } else if (!moga.isActiveMoga[playerNum]) { // Ouya controller
+ map[playerNum] = Gamepad.getOUYAController();
}
} else {
getCompatibilityMap(playerNum, id);
}
+ initJoyStickLayout(playerNum);
}
}
if (joys.length == 0) {
@@ -216,9 +195,9 @@ public class GL2JNIActivity extends Activity {
=======
String menu_spec;
- if (isXperiaPlay) {
+ if (Gamepad.isXperiaPlay) {
menu_spec = getApplicationContext().getString(R.string.menu_button);
- } else if (isOuyaOrTV) {
+ } else if (Gamepad.isOuyaOrTV) {
menu_spec = getApplicationContext().getString(R.string.right_button);
} else {
menu_spec = getApplicationContext().getString(R.string.back_button);
@@ -272,6 +251,7 @@ public class GL2JNIActivity extends Activity {
for (int n = 0; n < 4; n++) {
if (compat[n]) {
getCompatibilityMap(n, portId[n]);
+ initJoyStickLayout(n);
}
}
}
@@ -279,10 +259,7 @@ public class GL2JNIActivity extends Activity {
private void getCompatibilityMap(int playerNum, String id) {
name[playerNum] = prefs.getInt("controller" + id, -1);
if (name[playerNum] != -1) {
- map[playerNum] = gamepad.setModifiedKeys(id, playerNum);
- }
- if (jsDpad[playerNum]) {
- initJoyStickLayout(playerNum);
+ map[playerNum] = Gamepad.setModifiedKeys(id, playerNum, prefs);
}
}
@@ -304,7 +281,11 @@ public class GL2JNIActivity extends Activity {
if (playerNum == null || playerNum == -1)
return false;
- if (!moga.isActive[playerNum] || compat[playerNum]) {
+ if (moga.isActiveMoga[playerNum]) {
+ return false;
+ }
+
+ if (compat[playerNum]) {
// TODO: Moga should handle this locally
// Joystick
@@ -318,23 +299,21 @@ public class GL2JNIActivity extends Activity {
float L2 = event.getAxisValue(OuyaController.AXIS_L2);
float R2 = event.getAxisValue(OuyaController.AXIS_R2);
- if (jsDpad[playerNum]) {
- previousLS_X[playerNum] = globalLS_X[playerNum];
- previousLS_Y[playerNum] = globalLS_Y[playerNum];
- globalLS_X[playerNum] = LS_X;
- globalLS_Y[playerNum] = LS_Y;
- }
+ previousLS_X[playerNum] = globalLS_X[playerNum];
+ previousLS_Y[playerNum] = globalLS_Y[playerNum];
+ globalLS_X[playerNum] = LS_X;
+ globalLS_Y[playerNum] = LS_Y;
if (prefs.getBoolean("right_buttons", true)) {
if (RS_Y > 0.5) {
- GL2JNIView.kcode_raw[playerNum] |= map[playerNum][gamepad.key_CONT_B];
- GL2JNIView.kcode_raw[playerNum] &= ~map[playerNum][gamepad.key_CONT_A];
+ GL2JNIView.kcode_raw[playerNum] |= map[playerNum][Gamepad.key_CONT_B];
+ GL2JNIView.kcode_raw[playerNum] &= ~map[playerNum][Gamepad.key_CONT_A];
} else if (RS_Y < 0.5) {
- GL2JNIView.kcode_raw[playerNum] |= map[playerNum][gamepad.key_CONT_A];
- GL2JNIView.kcode_raw[playerNum] &= ~map[playerNum][gamepad.key_CONT_B];
+ GL2JNIView.kcode_raw[playerNum] |= map[playerNum][Gamepad.key_CONT_A];
+ GL2JNIView.kcode_raw[playerNum] &= ~map[playerNum][Gamepad.key_CONT_B];
} else {
- GL2JNIView.kcode_raw[playerNum] |= map[playerNum][gamepad.key_CONT_A];
- GL2JNIView.kcode_raw[playerNum] |= map[playerNum][gamepad.key_CONT_B];
+ GL2JNIView.kcode_raw[playerNum] |= map[playerNum][Gamepad.key_CONT_A];
+ GL2JNIView.kcode_raw[playerNum] |= map[playerNum][Gamepad.key_CONT_B];
}
} else {
if (RS_Y > 0) {
@@ -353,8 +332,8 @@ public class GL2JNIActivity extends Activity {
}
mView.pushInput();
- if ((jsDpad[playerNum])
- && ((globalLS_X[playerNum] == previousLS_X[playerNum] && globalLS_Y[playerNum] == previousLS_Y[playerNum]) || (previousLS_X[playerNum] == 0.0f && previousLS_Y[playerNum] == 0.0f)))
+ if ((globalLS_X[playerNum] == previousLS_X[playerNum] && globalLS_Y[playerNum] == previousLS_Y[playerNum])
+ || (previousLS_X[playerNum] == 0.0f && previousLS_Y[playerNum] == 0.0f))
// Only handle Left Stick on an Xbox 360 controller if there was
// some actual motion on the stick,
// so otherwise the event can be handled as a DPAD event
@@ -412,25 +391,23 @@ public class GL2JNIActivity extends Activity {
boolean handle_key(Integer playerNum, int kc, boolean down) {
if (playerNum == null || playerNum == -1)
return false;
- if (!moga.isActive[playerNum]) {
-
- boolean rav = false;
- for (int i = 0; i < map[playerNum].length; i += 2) {
- if (map[playerNum][i + 0] == kc) {
- if (down)
- GL2JNIView.kcode_raw[playerNum] &= ~map[playerNum][i + 1];
- else
- GL2JNIView.kcode_raw[playerNum] |= map[playerNum][i + 1];
- rav = true;
- break;
- }
- }
- mView.pushInput();
- return rav;
-
- } else {
- return true;
+ if (moga.isActiveMoga[playerNum]) {
+ return false;
}
+
+ boolean rav = false;
+ for (int i = 0; i < map[playerNum].length; i += 2) {
+ if (map[playerNum][i + 0] == kc) {
+ if (down)
+ GL2JNIView.kcode_raw[playerNum] &= ~map[playerNum][i + 1];
+ else
+ GL2JNIView.kcode_raw[playerNum] |= map[playerNum][i + 1];
+ rav = true;
+ break;
+ }
+ }
+ mView.pushInput();
+ return rav;
}
public void displayPopUp(PopupWindow popUp) {
@@ -562,7 +539,7 @@ public class GL2JNIActivity extends Activity {
=======
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
- if (isXperiaPlay) {
+ if (Gamepad.isXperiaPlay) {
return true;
} else {
>>>>>>> Support "Select" as menu, Mapping, "Menu" hardware key
diff --git a/shell/android/src/com/reicast/emulator/MainActivity.java b/shell/android/src/com/reicast/emulator/MainActivity.java
index 96b4ae218..90ee4f577 100644
--- a/shell/android/src/com/reicast/emulator/MainActivity.java
+++ b/shell/android/src/com/reicast/emulator/MainActivity.java
@@ -31,7 +31,6 @@ import com.reicast.emulator.config.ConfigureFragment;
import com.reicast.emulator.config.InputFragment;
import com.reicast.emulator.config.OptionsFragment;
import com.reicast.emulator.debug.GenerateLogs;
-import com.reicast.emulator.emu.GL2JNIActivity;
import com.reicast.emulator.emu.JNIdc;
public class MainActivity extends SlidingFragmentActivity implements
diff --git a/shell/android/src/com/reicast/emulator/config/InputFragment.java b/shell/android/src/com/reicast/emulator/config/InputFragment.java
index bcec7456c..077a01342 100644
--- a/shell/android/src/com/reicast/emulator/config/InputFragment.java
+++ b/shell/android/src/com/reicast/emulator/config/InputFragment.java
@@ -1,5 +1,7 @@
package com.reicast.emulator.config;
+import java.util.HashMap;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -12,6 +14,7 @@ import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.util.Log;
+import android.util.SparseArray;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -31,6 +34,7 @@ import com.bda.controller.MotionEvent;
import com.bda.controller.StateEvent;
import com.reicast.emulator.MainActivity;
import com.reicast.emulator.R;
+import com.reicast.emulator.periph.Gamepad;
import com.reicast.emulator.periph.MOGAInput;
import de.ankri.views.Switch;
@@ -43,7 +47,6 @@ public class InputFragment extends Fragment {
private SharedPreferences sharedPreferences;
private Switch switchTouchVibrationEnabled;
private Switch micPluggedIntoFirstController;
-
public MOGAInput moga = new MOGAInput();
// Container Activity must implement this interface
@@ -62,7 +65,7 @@ public class InputFragment extends Fragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
parentActivity = getActivity();
- moga.onCreate(parentActivity);
+ moga.onCreate(parentActivity, new SparseArray(), new HashMap());
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(parentActivity);
@@ -362,7 +365,7 @@ public class InputFragment extends Fragment {
String descriptor = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- if (moga.isActive[listenForButton]) {
+ if (moga.isActiveMoga[listenForButton]) {
MogaListener config = new MogaListener(listenForButton);
moga.mController.setListener(config, new Handler());
descriptor = config.getController();
@@ -459,9 +462,9 @@ public class InputFragment extends Fragment {
if (event.getState() == StateEvent.STATE_CONNECTION && event.getAction() == MOGAInput.ACTION_CONNECTED) {
int mControllerVersion = moga.mController.getState(Controller.STATE_CURRENT_PRODUCT_VERSION);
if (mControllerVersion == Controller.ACTION_VERSION_MOGAPRO) {
- moga.isActive[playerNum] = true;
+ moga.isActiveMoga[playerNum] = true;
} else if (mControllerVersion == Controller.ACTION_VERSION_MOGA) {
- moga.isActive[playerNum] = true;
+ moga.isActiveMoga[playerNum] = true;
}
}
}
diff --git a/shell/android/src/com/reicast/emulator/config/InputModFragment.java b/shell/android/src/com/reicast/emulator/config/InputModFragment.java
index c9dbc9af9..d8c536b5d 100644
--- a/shell/android/src/com/reicast/emulator/config/InputModFragment.java
+++ b/shell/android/src/com/reicast/emulator/config/InputModFragment.java
@@ -267,44 +267,7 @@ public class InputModFragment extends Fragment {
}
});
- final TextView joystick_text = (TextView) getView().findViewById(
- R.id.joystick_key);
- getKeyCode("joystick", joystick_text);
- Button joystick = (Button) getView().findViewById(R.id.joystick_edit);
- joystick.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- mKey.intiateSearch("joystick", joystick_text);
- }
- });
- Button joystick_remove = (Button) getView().findViewById(
- R.id.remove_joystick);
- joystick_remove.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- remKeyCode("joystick", joystick_text);
- }
- });
- joystick.setEnabled(false);
- mPrefs.edit().remove("joystick").commit();
- // Still needs better support for identifying the entire stick
-
- OnCheckedChangeListener dpad_joystick = new OnCheckedChangeListener() {
- public void onCheckedChanged(CompoundButton buttonView,
- boolean isChecked) {
- mPrefs.edit().putBoolean("dpad_js_layout" + player, isChecked)
- .commit();
- }
- };
- Switch dpad_js_layout = (Switch) getView().findViewById(
- R.id.dpad_js_layout);
- boolean joypad = mPrefs.getBoolean("dpad_js_layout" + player, false);
- if (joypad) {
- dpad_js_layout.setChecked(true);
- } else {
- dpad_js_layout.setChecked(false);
- }
- dpad_js_layout.setOnCheckedChangeListener(dpad_joystick);
-
- final TextView dpad_up_text = (TextView) getView().findViewById(
+ final TextView dpad_up_text = (TextView) getView().findViewById(
R.id.dpad_up_key);
getKeyCode("dpad_up", dpad_up_text);
Button dpad_up = (Button) getView().findViewById(R.id.dpad_up_edit);
diff --git a/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java b/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java
index 5f9e8c8cd..cddf7ddcc 100644
--- a/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java
+++ b/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java
@@ -28,6 +28,7 @@ import android.view.ScaleGestureDetector;
import android.view.ScaleGestureDetector.SimpleOnScaleGestureListener;
import android.view.View;
+import com.reicast.emulator.GL2JNIActivity;
import com.reicast.emulator.config.ConfigureFragment;
import com.reicast.emulator.emu.OnScreenMenu.FpsPopup;
import com.reicast.emulator.periph.VJoy;
diff --git a/shell/android/src/com/reicast/emulator/emu/OnScreenMenu.java b/shell/android/src/com/reicast/emulator/emu/OnScreenMenu.java
index 0c7262392..cbc0eb5a3 100644
--- a/shell/android/src/com/reicast/emulator/emu/OnScreenMenu.java
+++ b/shell/android/src/com/reicast/emulator/emu/OnScreenMenu.java
@@ -18,6 +18,7 @@ import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
+import com.reicast.emulator.GL2JNIActivity;
import com.reicast.emulator.MainActivity;
import com.reicast.emulator.R;
import com.reicast.emulator.config.ConfigureFragment;
diff --git a/shell/android/src/com/reicast/emulator/periph/Gamepad.java b/shell/android/src/com/reicast/emulator/periph/Gamepad.java
index 81b2c6bb3..7957becde 100644
--- a/shell/android/src/com/reicast/emulator/periph/Gamepad.java
+++ b/shell/android/src/com/reicast/emulator/periph/Gamepad.java
@@ -5,30 +5,25 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
-import android.preference.PreferenceManager;
import android.view.KeyEvent;
public class Gamepad {
+
+ public static boolean isXperiaPlay;
+ public static boolean isOuyaOrTV;
+// public boolean isNvidiaShield;
- public final int key_CONT_B = 0x0002;
- public final int key_CONT_A = 0x0004;
- public final int key_CONT_START = 0x0008;
- public final int key_CONT_DPAD_UP = 0x0010;
- public final int key_CONT_DPAD_DOWN = 0x0020;
- public final int key_CONT_DPAD_LEFT = 0x0040;
- public final int key_CONT_DPAD_RIGHT = 0x0080;
- public final int key_CONT_Y = 0x0200;
- public final int key_CONT_X = 0x0400;
+ public static final int key_CONT_B = 0x0002;
+ public static final int key_CONT_A = 0x0004;
+ public static final int key_CONT_START = 0x0008;
+ public static final int key_CONT_DPAD_UP = 0x0010;
+ public static final int key_CONT_DPAD_DOWN = 0x0020;
+ public static final int key_CONT_DPAD_LEFT = 0x0040;
+ public static final int key_CONT_DPAD_RIGHT = 0x0080;
+ public static final int key_CONT_Y = 0x0200;
+ public static final int key_CONT_X = 0x0400;
- private SharedPreferences mPrefs;
- private Context mContext;
-
- public Gamepad(Context mContext) {
- this.mContext = mContext;
- mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
- }
-
- public int[] getConsoleController() {
+ public static int[] getConsoleController() {
return new int[] {
OuyaController.BUTTON_O, key_CONT_A,
OuyaController.BUTTON_A, key_CONT_B,
@@ -46,7 +41,7 @@ public class Gamepad {
};
}
- public int[] getXPlayController() {
+ public static int[] getXPlayController() {
return new int[] {
KeyEvent.KEYCODE_DPAD_CENTER, key_CONT_A,
KeyEvent.KEYCODE_BACK, key_CONT_B,
@@ -64,7 +59,7 @@ public class Gamepad {
};
}
- public int[] getOUYAController() {
+ public static int[] getOUYAController() {
return new int[] {
OuyaController.BUTTON_O, key_CONT_A,
OuyaController.BUTTON_A, key_CONT_B,
@@ -92,7 +87,7 @@ public class Gamepad {
};
}
- public int[] getMogaController() {
+ public static int[] getMogaController() {
return new int[] {
KeyEvent.KEYCODE_BUTTON_B, key_CONT_B,
KeyEvent.KEYCODE_BUTTON_A, key_CONT_A,
@@ -106,27 +101,27 @@ public class Gamepad {
getStartButtonCode(), key_CONT_START,
getSelectButtonCode(), getSelectButtonCode()
- // Redundant, but verifies it is mapped properly
};
}
- public int[] setModifiedKeys(String id, int playerNum) {
+ public static int[] setModifiedKeys(String id, int playerNum, SharedPreferences mPrefs) {
return new int[] {
- mPrefs.getInt("a_button" + id, OuyaController.BUTTON_O), key_CONT_A,
- mPrefs.getInt("b_button" + id, OuyaController.BUTTON_A), key_CONT_B,
- mPrefs.getInt("x_button" + id, OuyaController.BUTTON_U), key_CONT_X,
- mPrefs.getInt("y_button" + id, OuyaController.BUTTON_Y), key_CONT_Y,
+ mPrefs.getInt("a_button" + id, OuyaController.BUTTON_O), key_CONT_A,
+ mPrefs.getInt("b_button" + id, OuyaController.BUTTON_A), key_CONT_B,
+ mPrefs.getInt("x_button" + id, OuyaController.BUTTON_U), key_CONT_X,
+ mPrefs.getInt("y_button" + id, OuyaController.BUTTON_Y), key_CONT_Y,
+
+ mPrefs.getInt("dpad_up" + id, OuyaController.BUTTON_DPAD_UP), key_CONT_DPAD_UP,
+ mPrefs.getInt("dpad_down" + id, OuyaController.BUTTON_DPAD_DOWN), key_CONT_DPAD_DOWN,
+ mPrefs.getInt("dpad_left" + id, OuyaController.BUTTON_DPAD_LEFT), key_CONT_DPAD_LEFT,
+ mPrefs.getInt("dpad_right" + id, OuyaController.BUTTON_DPAD_RIGHT), key_CONT_DPAD_RIGHT,
- mPrefs.getInt("dpad_up" + id, OuyaController.BUTTON_DPAD_UP), key_CONT_DPAD_UP,
- mPrefs.getInt("dpad_down" + id, OuyaController.BUTTON_DPAD_DOWN), key_CONT_DPAD_DOWN,
- mPrefs.getInt("dpad_left" + id, OuyaController.BUTTON_DPAD_LEFT), key_CONT_DPAD_LEFT,
- mPrefs.getInt("dpad_right" + id, OuyaController.BUTTON_DPAD_RIGHT), key_CONT_DPAD_RIGHT,
mPrefs.getInt("start_button" + id, getStartButtonCode()), key_CONT_START,
mPrefs.getInt("select_button" + id, getSelectButtonCode()), getSelectButtonCode()
};
}
- public boolean IsXperiaPlay() {
+ public static boolean IsXperiaPlay() {
return android.os.Build.MODEL.equals("R800a")
|| android.os.Build.MODEL.equals("R800i")
|| android.os.Build.MODEL.equals("R800x")
@@ -135,8 +130,8 @@ public class Gamepad {
|| android.os.Build.MODEL.equals("zeus");
}
- public boolean IsOuyaOrTV() {
- PackageManager pMan = mContext.getPackageManager();
+ public static boolean IsOuyaOrTV(Context context) {
+ PackageManager pMan = context.getPackageManager();
if (pMan.hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
return true;
}
diff --git a/shell/android/src/com/reicast/emulator/periph/MOGAInput.java b/shell/android/src/com/reicast/emulator/periph/MOGAInput.java
index 28a857f28..0bbbc1f3d 100644
--- a/shell/android/src/com/reicast/emulator/periph/MOGAInput.java
+++ b/shell/android/src/com/reicast/emulator/periph/MOGAInput.java
@@ -3,10 +3,13 @@ package com.reicast.emulator.periph;
/******************************************************************************/
+import java.util.HashMap;
+
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Handler;
import android.preference.PreferenceManager;
+import android.util.SparseArray;
import android.widget.Toast;
import com.bda.controller.Controller;
@@ -15,7 +18,6 @@ import com.bda.controller.KeyEvent;
import com.bda.controller.MotionEvent;
import com.bda.controller.StateEvent;
import com.reicast.emulator.R;
-import com.reicast.emulator.emu.GL2JNIActivity;
import com.reicast.emulator.emu.GL2JNIView;
import com.reicast.emulator.emu.JNIdc;
@@ -35,24 +37,22 @@ public class MOGAInput
static final int ACTION_VERSION_MOGA = Controller.ACTION_VERSION_MOGA;
static final int ACTION_VERSION_MOGAPRO = Controller.ACTION_VERSION_MOGAPRO;
+ public boolean isActiveMoga[] = { false, false, false, false };
+ public boolean isMogaPro[] = { false, false, false, false };
+
+ private String[] portId = { "_A", "_B", "_C", "_D" };
+ private boolean[] custom = { false, false, false, false };
+ private float[] globalLS_X = new float[4], globalLS_Y = new float[4],
+ previousLS_X = new float[4], previousLS_Y = new float[4];
+ private int map[][] = new int[4][];
+
+ private SparseArray deviceId_deviceDescriptor;
+ private HashMap deviceDescriptor_PlayerNum;
+
public Controller mController = null;
private Handler handler;
private String notify;
- private Gamepad gamepad;
-
- static String[] portId = { "_A", "_B", "_C", "_D" };
- static boolean[] custom = { false, false, false, false },
- jsCompat = { false, false, false, false };
-
- float[] globalLS_X = new float[4], globalLS_Y = new float[4],
- previousLS_X = new float[4], previousLS_Y = new float[4];
-
- public boolean isActive[] = { false, false, false, false };
- public boolean isMogaPro[] = { false, false, false, false };
-
- int map[][];
-
Activity act;
public MOGAInput()
{
@@ -88,16 +88,18 @@ public class MOGAInput
*/
}
- public void onCreate(Activity act)
- {
+ public void onCreate(Activity act,
+ SparseArray deviceId_deviceDescriptor,
+ HashMap deviceDescriptor_PlayerNum) {
this.act = act;
+
+ this.deviceId_deviceDescriptor = deviceId_deviceDescriptor;
+ this.deviceDescriptor_PlayerNum = deviceDescriptor_PlayerNum;
handler = new Handler();
prefs = PreferenceManager
.getDefaultSharedPreferences(act.getApplicationContext());
- gamepad = new Gamepad(act);
-
mController = Controller.getInstance(act);
mController.init();
mController.setListener(new ExampleControllerListener(), new Handler());
@@ -145,14 +147,14 @@ public class MOGAInput
{
public void onKeyEvent(KeyEvent event)
{
- Integer playerNum = GL2JNIActivity.deviceDescriptor_PlayerNum.get(GL2JNIActivity.deviceId_deviceDescriptor.get(event.getControllerId()));
+ Integer playerNum = deviceDescriptor_PlayerNum.get(deviceId_deviceDescriptor.get(event.getControllerId()));
if (playerNum == null)
return;
String id = portId[playerNum];
if (custom[playerNum]) {
- if (event.getKeyCode() == prefs.getInt("l_button" + id, KeyEvent.KEYCODE_BUTTON_L1)) {
+ if (event.getKeyCode() == prefs.getInt("l_button" + id, KeyEvent.KEYCODE_BUTTON_L1)) {
simulatedTouchEvent(playerNum, 1.0f, 0.0f);
simulatedTouchEvent(playerNum, 0.0f, 0.0f);
}
@@ -179,12 +181,10 @@ public class MOGAInput
public void simulatedTouchEvent(int playerNum, float L2, float R2) {
if(playerNum == 0)
JNIdc.hide_osd();
- if (jsCompat[playerNum]) {
- previousLS_X[playerNum] = globalLS_X[playerNum];
- previousLS_Y[playerNum] = globalLS_Y[playerNum];
- globalLS_X[playerNum] = 0;
- globalLS_Y[playerNum] = 0;
- }
+ previousLS_X[playerNum] = globalLS_X[playerNum];
+ previousLS_Y[playerNum] = globalLS_Y[playerNum];
+ globalLS_X[playerNum] = 0;
+ globalLS_Y[playerNum] = 0;
GL2JNIView.lt[playerNum] = (int) (L2 * 255);
GL2JNIView.rt[playerNum] = (int) (R2 * 255);
GL2JNIView.jx[playerNum] = (int) (0 * 126);
@@ -193,7 +193,7 @@ public class MOGAInput
public void onMotionEvent(MotionEvent event)
{
- Integer playerNum = GL2JNIActivity.deviceDescriptor_PlayerNum.get(GL2JNIActivity.deviceId_deviceDescriptor.get(event.getControllerId()));
+ Integer playerNum = deviceDescriptor_PlayerNum.get(deviceId_deviceDescriptor.get(event.getControllerId()));
if (playerNum == null)
return;
@@ -205,15 +205,11 @@ public class MOGAInput
float S_Y = event.getAxisValue(MotionEvent.AXIS_Y);
float L2 = event.getAxisValue(MotionEvent.AXIS_LTRIGGER);
float R2 = event.getAxisValue(MotionEvent.AXIS_RTRIGGER);
-
- if (jsCompat[playerNum]) {
- previousLS_X[playerNum] = globalLS_X[playerNum];
- previousLS_Y[playerNum] = globalLS_Y[playerNum];
- globalLS_X[playerNum] = S_X;
- globalLS_Y[playerNum] = S_Y;
-
- }
+ previousLS_X[playerNum] = globalLS_X[playerNum];
+ previousLS_Y[playerNum] = globalLS_Y[playerNum];
+ globalLS_X[playerNum] = S_X;
+ globalLS_Y[playerNum] = S_Y;
GL2JNIView.lt[playerNum] = (int) (L2 * 255);
GL2JNIView.rt[playerNum] = (int) (R2 * 255);
@@ -232,7 +228,7 @@ public class MOGAInput
public void onStateEvent(StateEvent event)
{
- Integer playerNum = GL2JNIActivity.deviceDescriptor_PlayerNum.get(GL2JNIActivity.deviceId_deviceDescriptor.get(event.getControllerId()));
+ Integer playerNum = deviceDescriptor_PlayerNum.get(deviceId_deviceDescriptor.get(event.getControllerId()));
if (playerNum == null)
return;
@@ -242,26 +238,25 @@ public class MOGAInput
String id = portId[playerNum];
custom[playerNum] = prefs.getBoolean("modified_key_layout" + id, false);
- jsCompat[playerNum] = prefs.getBoolean("dpad_js_layout" + id, false);
if (event.getState() == StateEvent.STATE_CONNECTION && event.getAction() == ACTION_CONNECTED) {
int mControllerVersion = mController.getState(Controller.STATE_CURRENT_PRODUCT_VERSION);
if (mControllerVersion == Controller.ACTION_VERSION_MOGAPRO) {
- isActive[playerNum] = true;
+ isActiveMoga[playerNum] = true;
isMogaPro[playerNum] = true;
if (custom[playerNum]) {
- map[playerNum] = gamepad.setModifiedKeys(id, playerNum);
+ map[playerNum] = Gamepad.setModifiedKeys(id, playerNum, prefs);
} else {
- map[playerNum] = gamepad.getMogaController();
+ map[playerNum] = Gamepad.getMogaController();
}
notify = act.getApplicationContext().getString(R.string.moga_pro_connect);
} else if (mControllerVersion == Controller.ACTION_VERSION_MOGA) {
- isActive[playerNum] = true;
+ isActiveMoga[playerNum] = true;
isMogaPro[playerNum] = false;
if (custom[playerNum]) {
- map[playerNum] = gamepad.setModifiedKeys(id, playerNum);
+ map[playerNum] = Gamepad.setModifiedKeys(id, playerNum, prefs);
} else {
- map[playerNum] = gamepad.getMogaController();
+ map[playerNum] = Gamepad.getMogaController();
}
notify = act.getApplicationContext().getString(R.string.moga_connect);
}