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 };