diff --git a/shell/android/res/values/strings.xml b/shell/android/res/values/strings.xml
index b8806ccaa..a02e97849 100644
--- a/shell/android/res/values/strings.xml
+++ b/shell/android/res/values/strings.xml
@@ -62,6 +62,7 @@
Use Joystick For D-Pad Input
Enable Custom Key Layout
Enable Compatibility Mode
+ Gamepad IME detected!\nPlease disable native interface
Microphone plugged into port 2
Customize Physical Controls
diff --git a/shell/android/src/com/android/util/FileUtils.java b/shell/android/src/com/android/util/FileUtils.java
index 4ec3a989d..8f9c7478c 100755
--- a/shell/android/src/com/android/util/FileUtils.java
+++ b/shell/android/src/com/android/util/FileUtils.java
@@ -18,8 +18,6 @@ import java.util.zip.GZIPOutputStream;
import javax.microedition.khronos.opengles.GL10;
-import com.reicast.emulator.MainActivity;
-
import android.content.Context;
import android.graphics.Bitmap;
import android.media.MediaScannerConnection;
@@ -27,6 +25,8 @@ import android.media.MediaScannerConnection.OnScanCompletedListener;
import android.net.Uri;
import android.util.Log;
+import com.reicast.emulator.MainActivity;
+
public class FileUtils {
public void saveArray(String filename, List output_field) {
diff --git a/shell/android/src/com/reicast/emulator/GL2JNIActivity.java b/shell/android/src/com/reicast/emulator/GL2JNIActivity.java
index efc1e09e8..caed54059 100644
--- a/shell/android/src/com/reicast/emulator/GL2JNIActivity.java
+++ b/shell/android/src/com/reicast/emulator/GL2JNIActivity.java
@@ -19,9 +19,9 @@ import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
-import android.view.WindowManager;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
+import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
@@ -156,9 +156,16 @@ public class GL2JNIActivity extends Activity {
} else {
pad.joystick[playerNum] = false;
}
- if (!pad.compat[playerNum]) {
+ if (InputDevice.getDevice(joy).getName()
+ .contains(Gamepad.controllers_gamekey)) {
if (pad.custom[playerNum]) {
- pad.map[playerNum] = pad.setModifiedKeys(id, playerNum, prefs);
+ setCustomMapping(id, playerNum);
+ } else {
+ pad.map[playerNum] = pad.getConsoleController();
+ }
+ } else if (!pad.compat[playerNum]) {
+ if (pad.custom[playerNum]) {
+ setCustomMapping(id, playerNum);
} else if (InputDevice.getDevice(joy).getName()
.equals(Gamepad.controllers_sony)) {
pad.map[playerNum] = pad.getConsoleController();
@@ -178,13 +185,15 @@ public class GL2JNIActivity extends Activity {
getCompatibilityMap(playerNum, id);
}
initJoyStickLayout(playerNum);
+ } else {
+ runCompatibilityMode(joy);
}
}
if (joys.length == 0) {
- runCompatibilityMode();
+ fullCompatibilityMode();
}
} else {
- runCompatibilityMode();
+ fullCompatibilityMode();
}
config.loadConfigurationPrefs();
@@ -231,6 +240,10 @@ public class GL2JNIActivity extends Activity {
});
}
}
+
+ private void setCustomMapping(String id, int playerNum) {
+ pad.map[playerNum] = pad.setModifiedKeys(id, playerNum, prefs);
+ }
private void initJoyStickLayout(int playerNum) {
if (!pad.joystick[playerNum]) {
@@ -239,7 +252,7 @@ public class GL2JNIActivity extends Activity {
}
}
- private void runCompatibilityMode() {
+ private void runCompatibilityMode(int joy) {
for (int n = 0; n < 4; n++) {
if (pad.compat[n]) {
String id = pad.portId[n];
@@ -249,6 +262,12 @@ public class GL2JNIActivity extends Activity {
}
}
}
+
+ private void fullCompatibilityMode() {
+ for (int n = 0; n < 4; n++) {
+ runCompatibilityMode(n);
+ }
+ }
private void getCompatibilityMap(int playerNum, String id) {
pad.name[playerNum] = prefs.getInt(Gamepad.pref_pad + id, -1);
diff --git a/shell/android/src/com/reicast/emulator/GL2JNINative.java b/shell/android/src/com/reicast/emulator/GL2JNINative.java
index 9acde7e64..9a7c3ee72 100644
--- a/shell/android/src/com/reicast/emulator/GL2JNINative.java
+++ b/shell/android/src/com/reicast/emulator/GL2JNINative.java
@@ -24,6 +24,7 @@ import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
+import android.widget.Toast;
import com.reicast.emulator.config.Config;
import com.reicast.emulator.emu.GL2JNIView;
@@ -146,7 +147,6 @@ public class GL2JNINative extends NativeActivity {
}
if (InputDevice.getDevice(joy).getName()
.contains(Gamepad.controllers_play_tp)) {
-// registerXperia(joy);
pad.keypadZeus[1] = joy;
}
}
@@ -168,8 +168,17 @@ public class GL2JNINative extends NativeActivity {
pad.joystick[playerNum] = false;
}
if (InputDevice.getDevice(joy).getName()
- .contains(Gamepad.controllers_play)) {
- pad.playerNumX.put(joy, playerNum);
+ .contains(Gamepad.controllers_gamekey)) {
+// if (pad.custom[playerNum]) {
+// setCustomMapping(id, playerNum);
+// } else {
+// pad.map[playerNum] = pad.getConsoleController();
+// }
+ Toast.makeText(getApplicationContext(), R.string.controller_unavailable,
+ Toast.LENGTH_SHORT).show();
+ finish();
+ } else if (InputDevice.getDevice(joy).getName()
+ .contains(Gamepad.controllers_play) ) {
for (int keys : pad.keypadZeus) {
pad.playerNumX.put(keys, playerNum);
}
@@ -178,28 +187,26 @@ public class GL2JNINative extends NativeActivity {
} else {
pad.map[playerNum] = pad.getXPlayController();
}
- } else {
- if (!pad.compat[playerNum]) {
- if (pad.custom[playerNum]) {
- setCustomMapping(id, playerNum);
- } else if (InputDevice.getDevice(joy).getName()
- .equals(Gamepad.controllers_sony)) {
- pad.map[playerNum] = pad.getConsoleController();
- } else if (InputDevice.getDevice(joy).getName()
- .equals(Gamepad.controllers_xbox)) {
- pad.map[playerNum] = pad.getConsoleController();
- } else if (InputDevice.getDevice(joy).getName()
- .contains(Gamepad.controllers_shield)) {
- pad.map[playerNum] = pad.getConsoleController();
- } else if (!pad.isActiveMoga[playerNum]) { // Ouya controller
- pad.map[playerNum] = pad.getOUYAController();
- }
- } else{
- getCompatibilityMap(playerNum, id);
+ } else if (!pad.compat[playerNum]) {
+ if (pad.custom[playerNum]) {
+ setCustomMapping(id, playerNum);
+ } else if (InputDevice.getDevice(joy).getName()
+ .equals(Gamepad.controllers_sony)) {
+ pad.map[playerNum] = pad.getConsoleController();
+ } else if (InputDevice.getDevice(joy).getName()
+ .equals(Gamepad.controllers_xbox)) {
+ pad.map[playerNum] = pad.getConsoleController();
+ } else if (InputDevice.getDevice(joy).getName()
+ .contains(Gamepad.controllers_shield)) {
+ pad.map[playerNum] = pad.getConsoleController();
+ } else if (!pad.isActiveMoga[playerNum]) { // Ouya controller
+ pad.map[playerNum] = pad.getOUYAController();
}
- initJoyStickLayout(playerNum);
- pad.playerNumX.put(joy, playerNum);
+ } else{
+ getCompatibilityMap(playerNum, id);
}
+ initJoyStickLayout(playerNum);
+ pad.playerNumX.put(joy, playerNum);
} else {
runCompatibilityMode(joy);
}
diff --git a/shell/android/src/com/reicast/emulator/config/Config.java b/shell/android/src/com/reicast/emulator/config/Config.java
index fbecc3810..10f8eb76a 100644
--- a/shell/android/src/com/reicast/emulator/config/Config.java
+++ b/shell/android/src/com/reicast/emulator/config/Config.java
@@ -4,21 +4,11 @@ import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
-import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
-import android.util.DisplayMetrics;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-import android.widget.Toast;
import com.android.util.DreamTime;
-import com.reicast.emulator.R;
import com.reicast.emulator.emu.JNIdc;
public class Config {
diff --git a/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java b/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java
index 90716a043..4af792679 100644
--- a/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java
+++ b/shell/android/src/com/reicast/emulator/emu/GL2JNIView.java
@@ -3,6 +3,7 @@ package com.reicast.emulator.emu;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
diff --git a/shell/android/src/com/reicast/emulator/periph/Gamepad.java b/shell/android/src/com/reicast/emulator/periph/Gamepad.java
index 923dabcff..93141c0da 100644
--- a/shell/android/src/com/reicast/emulator/periph/Gamepad.java
+++ b/shell/android/src/com/reicast/emulator/periph/Gamepad.java
@@ -1,8 +1,6 @@
package com.reicast.emulator.periph;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import tv.ouya.console.api.OuyaController;
import tv.ouya.console.api.OuyaFacade;
@@ -48,6 +46,7 @@ public class Gamepad {
public static final String controllers_play = "keypad-zeus";
public static final String controllers_play_gp = "keypad-game-zeus";
public static final String controllers_play_tp = "synaptics_touchpad";
+ public static final String controllers_gamekey = "gamekeyboard";
public String[] portId = { "_A", "_B", "_C", "_D" };
public boolean[] compat = { false, false, false, false };