Rewrite the key assignment function to override default key

This commit is contained in:
TwistedUmbrella 2014-01-23 01:22:01 -05:00
parent a63cede6bc
commit f79cb1ecb7
5 changed files with 152 additions and 151 deletions

View File

@ -13,6 +13,32 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:stretchColumns="*" > android:stretchColumns="*" >
<TableRow
android:layout_marginTop="25dp"
android:gravity="center_vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:ems="10"
android:gravity="center_vertical|left"
android:text="@string/modified_layout" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:orientation="vertical" >
<de.ankri.views.Switch
android:id="@+id/switchModifiedLayoutEnabled"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</TableRow>
<TableRow android:gravity="center_vertical" > <TableRow android:gravity="center_vertical" >

View File

@ -42,6 +42,7 @@
<string name="select_controller_title">Select Controller</string> <string name="select_controller_title">Select Controller</string>
<string name="select_controller_message">Press any button on the controller to assign to port</string> <string name="select_controller_message">Press any button on the controller to assign to port</string>
<string name="controller_already_in_use">This controller is already in use!</string> <string name="controller_already_in_use">This controller is already in use!</string>
<string name="modified_layout">Enable Custom Key Layout</string>
<string name="menu_edit_keycodes">Edit Key Bindings</string> <string name="menu_edit_keycodes">Edit Key Bindings</string>
<string name="map_keycode_title">Modify Controller</string> <string name="map_keycode_title">Modify Controller</string>

View File

@ -217,46 +217,41 @@ public class GL2JNIActivity extends Activity {
if (playerNum != null) { if (playerNum != null) {
if (InputDevice.getDevice(joys[i]).getName() if (prefs.getBoolean("modified_key_layout", false)) {
map[playerNum] = setModifiedKeys();
} else if (InputDevice.getDevice(joys[i]).getName()
.equals("Sony PLAYSTATION(R)3 Controller")) { .equals("Sony PLAYSTATION(R)3 Controller")) {
map[playerNum] = new int[] { OuyaController.BUTTON_Y, map[playerNum] = new int[] {
key_CONT_Y, OuyaController.BUTTON_U, OuyaController.BUTTON_Y, key_CONT_Y,
key_CONT_X, OuyaController.BUTTON_O, OuyaController.BUTTON_U, key_CONT_X,
key_CONT_A, OuyaController.BUTTON_A, OuyaController.BUTTON_O, key_CONT_A,
key_CONT_B, OuyaController.BUTTON_A, key_CONT_B,
OuyaController.BUTTON_DPAD_UP, OuyaController.BUTTON_DPAD_UP, key_CONT_DPAD_UP,
key_CONT_DPAD_UP, OuyaController.BUTTON_DPAD_DOWN, key_CONT_DPAD_DOWN,
OuyaController.BUTTON_DPAD_DOWN, OuyaController.BUTTON_DPAD_LEFT, key_CONT_DPAD_LEFT,
key_CONT_DPAD_DOWN, OuyaController.BUTTON_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_DPAD_LEFT,
key_CONT_DPAD_LEFT,
OuyaController.BUTTON_DPAD_RIGHT,
key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_MENU, key_CONT_START, OuyaController.BUTTON_MENU, key_CONT_START,
OuyaController.BUTTON_R1, key_CONT_START OuyaController.BUTTON_R1, key_CONT_START
}; };
} else if (InputDevice.getDevice(joys[i]).getName() } else if (InputDevice.getDevice(joys[i]).getName()
.equals("Microsoft X-Box 360 pad")) { .equals("Microsoft X-Box 360 pad")) {
map[playerNum] = new int[] { OuyaController.BUTTON_O, map[playerNum] = new int[] {
key_CONT_A, OuyaController.BUTTON_A, OuyaController.BUTTON_O, key_CONT_A,
key_CONT_B, OuyaController.BUTTON_Y, OuyaController.BUTTON_A, key_CONT_B,
key_CONT_Y, OuyaController.BUTTON_U, OuyaController.BUTTON_Y, key_CONT_Y,
key_CONT_X, OuyaController.BUTTON_U, key_CONT_X,
OuyaController.BUTTON_DPAD_UP, OuyaController.BUTTON_DPAD_UP, key_CONT_DPAD_UP,
key_CONT_DPAD_UP, OuyaController.BUTTON_DPAD_DOWN, key_CONT_DPAD_DOWN,
OuyaController.BUTTON_DPAD_DOWN, OuyaController.BUTTON_DPAD_LEFT, key_CONT_DPAD_LEFT,
key_CONT_DPAD_DOWN, OuyaController.BUTTON_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_DPAD_LEFT,
key_CONT_DPAD_LEFT,
OuyaController.BUTTON_DPAD_RIGHT,
key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_MENU, key_CONT_START, OuyaController.BUTTON_MENU, key_CONT_START,
OuyaController.BUTTON_R1, key_CONT_START }; OuyaController.BUTTON_R1, key_CONT_START
};
xbox[playerNum] = true; xbox[playerNum] = true;
@ -264,45 +259,38 @@ public class GL2JNIActivity extends Activity {
globalLS_Y[playerNum] = previousLS_Y[playerNum] = 0.0f; globalLS_Y[playerNum] = previousLS_Y[playerNum] = 0.0f;
} else if (InputDevice.getDevice(joys[i]).getName() } else if (InputDevice.getDevice(joys[i]).getName()
.contains("NVIDIA Corporation NVIDIA Controller")) { .contains("NVIDIA Corporation NVIDIA Controller")) {
map[playerNum] = new int[] { OuyaController.BUTTON_O, map[playerNum] = new int[] {
key_CONT_A, OuyaController.BUTTON_A, OuyaController.BUTTON_O, key_CONT_A,
key_CONT_B, OuyaController.BUTTON_Y, OuyaController.BUTTON_A, key_CONT_B,
key_CONT_Y, OuyaController.BUTTON_U, OuyaController.BUTTON_Y, key_CONT_Y,
key_CONT_X, OuyaController.BUTTON_U, key_CONT_X,
OuyaController.BUTTON_DPAD_UP, OuyaController.BUTTON_DPAD_UP, key_CONT_DPAD_UP,
key_CONT_DPAD_UP, OuyaController.BUTTON_DPAD_DOWN, key_CONT_DPAD_DOWN,
OuyaController.BUTTON_DPAD_DOWN, OuyaController.BUTTON_DPAD_LEFT, key_CONT_DPAD_LEFT,
key_CONT_DPAD_DOWN, OuyaController.BUTTON_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_DPAD_LEFT,
key_CONT_DPAD_LEFT,
OuyaController.BUTTON_DPAD_RIGHT,
key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_MENU, key_CONT_START, OuyaController.BUTTON_MENU, key_CONT_START,
OuyaController.BUTTON_R1, key_CONT_START }; OuyaController.BUTTON_R1, key_CONT_START
};
nVidia[playerNum] = true; nVidia[playerNum] = true;
globalLS_X[playerNum] = previousLS_X[playerNum] = 0.0f; globalLS_X[playerNum] = previousLS_X[playerNum] = 0.0f;
globalLS_Y[playerNum] = previousLS_Y[playerNum] = 0.0f; globalLS_Y[playerNum] = previousLS_Y[playerNum] = 0.0f;
} else if (!moga.isActive) { // Ouya controller } else if (!moga.isActive) { // Ouya controller
map[playerNum] = new int[] { OuyaController.BUTTON_O, map[playerNum] = new int[] {
key_CONT_A, OuyaController.BUTTON_A, OuyaController.BUTTON_O, key_CONT_A,
key_CONT_B, OuyaController.BUTTON_Y, OuyaController.BUTTON_A, key_CONT_B,
key_CONT_Y, OuyaController.BUTTON_U, OuyaController.BUTTON_Y, key_CONT_Y,
key_CONT_X, OuyaController.BUTTON_U, key_CONT_X,
OuyaController.BUTTON_DPAD_UP, OuyaController.BUTTON_DPAD_UP, key_CONT_DPAD_UP,
key_CONT_DPAD_UP, OuyaController.BUTTON_DPAD_DOWN, key_CONT_DPAD_DOWN,
OuyaController.BUTTON_DPAD_DOWN, OuyaController.BUTTON_DPAD_LEFT, key_CONT_DPAD_LEFT,
key_CONT_DPAD_DOWN, OuyaController.BUTTON_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_DPAD_LEFT,
key_CONT_DPAD_LEFT,
OuyaController.BUTTON_DPAD_RIGHT,
key_CONT_DPAD_RIGHT,
OuyaController.BUTTON_MENU, key_CONT_START, OuyaController.BUTTON_MENU, key_CONT_START,
OuyaController.BUTTON_R1, key_CONT_START }; OuyaController.BUTTON_R1, key_CONT_START };
} }
} }
@ -322,42 +310,21 @@ public class GL2JNIActivity extends Activity {
Toast.makeText(getApplicationContext(), Toast.makeText(getApplicationContext(),
"Press the back button for a menu", Toast.LENGTH_SHORT).show(); "Press the back button for a menu", Toast.LENGTH_SHORT).show();
} }
private int[] setModifiedKeys() {
return new int[] {
prefs.getInt("a_button", OuyaController.BUTTON_O), key_CONT_A,
prefs.getInt("b_button", OuyaController.BUTTON_A), key_CONT_B,
prefs.getInt("y_button", OuyaController.BUTTON_Y), key_CONT_Y,
prefs.getInt("x_button", OuyaController.BUTTON_U), key_CONT_X,
private int getModifiedKey(int KeyCode) { prefs.getInt("dpad_up", OuyaController.BUTTON_DPAD_UP), key_CONT_DPAD_UP,
if (prefs.getInt("a_button", -1) == KeyCode) { prefs.getInt("dpad_down", OuyaController.BUTTON_DPAD_DOWN), key_CONT_DPAD_DOWN,
return OuyaController.BUTTON_O; prefs.getInt("dpad_left", OuyaController.BUTTON_DPAD_LEFT), key_CONT_DPAD_LEFT,
} prefs.getInt("dpad_right", OuyaController.BUTTON_DPAD_RIGHT), key_CONT_DPAD_RIGHT,
if (prefs.getInt("b_button", -1) == KeyCode) {
return OuyaController.BUTTON_A; prefs.getInt("start_button", OuyaController.BUTTON_MENU), key_CONT_START,
} };
if (prefs.getInt("x_button", -1) == KeyCode) {
return OuyaController.BUTTON_U;
}
if (prefs.getInt("y_button", -1) == KeyCode) {
return OuyaController.BUTTON_Y;
}
if (prefs.getInt("l_button", -1) == KeyCode) {
return OuyaController.BUTTON_L1;
}
if (prefs.getInt("r_button", -1) == KeyCode) {
return OuyaController.BUTTON_R1;
}
if (prefs.getInt("dpad_left", -1) == KeyCode) {
return OuyaController.BUTTON_DPAD_LEFT;
}
if (prefs.getInt("dpad_right", -1) == KeyCode) {
return OuyaController.BUTTON_DPAD_RIGHT;
}
if (prefs.getInt("dpad_up", -1) == KeyCode) {
return OuyaController.BUTTON_DPAD_UP;
}
if (prefs.getInt("dpad_down", -1) == KeyCode) {
return OuyaController.BUTTON_DPAD_DOWN;
}
if (prefs.getInt("start_button", -1) == KeyCode) {
return OuyaController.BUTTON_MENU;
}
return KeyCode;
} }
@Override @Override
@ -491,22 +458,22 @@ public class GL2JNIActivity extends Activity {
Integer playerNum = deviceDescriptor_PlayerNum Integer playerNum = deviceDescriptor_PlayerNum
.get(deviceId_deviceDescriptor.get(event.getDeviceId())); .get(deviceId_deviceDescriptor.get(event.getDeviceId()));
return handle_key(playerNum, getModifiedKey(keyCode), false) return handle_key(playerNum, keyCode, false)
|| super.onKeyUp(getModifiedKey(keyCode), event); || super.onKeyUp(keyCode, event);
} }
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {
Integer playerNum = deviceDescriptor_PlayerNum Integer playerNum = deviceDescriptor_PlayerNum
.get(deviceId_deviceDescriptor.get(event.getDeviceId())); .get(deviceId_deviceDescriptor.get(event.getDeviceId()));
if (handle_key(playerNum, getModifiedKey(keyCode), true)) { if (handle_key(playerNum, keyCode, true)) {
if (playerNum == 0) if (playerNum == 0)
JNIdc.hide_osd(); JNIdc.hide_osd();
return true; return true;
} }
if (getModifiedKey(keyCode) == KeyEvent.KEYCODE_MENU if (keyCode == KeyEvent.KEYCODE_MENU
|| getModifiedKey(keyCode) == KeyEvent.KEYCODE_BACK) { || keyCode == KeyEvent.KEYCODE_BACK) {
if (!popUp.isShowing()) { if (!popUp.isShowing()) {
popUp.showAtLocation(mView, Gravity.BOTTOM, 0, 0); popUp.showAtLocation(mView, Gravity.BOTTOM, 0, 0);
popUp.update(LayoutParams.WRAP_CONTENT, popUp.update(LayoutParams.WRAP_CONTENT,
@ -518,7 +485,7 @@ public class GL2JNIActivity extends Activity {
return true; return true;
} else } else
return super.onKeyDown(getModifiedKey(keyCode), event); return super.onKeyDown(keyCode, event);
} }
@Override @Override

View File

@ -1,5 +1,6 @@
package com.reicast.emulator; package com.reicast.emulator;
import de.ankri.views.Switch;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
@ -14,12 +15,15 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView; import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;
public class InputModFragment extends Fragment { public class InputModFragment extends Fragment {
private Activity parentActivity; private Activity parentActivity;
private SharedPreferences mPrefs; private SharedPreferences mPrefs;
private Switch switchModifiedLayoutEnabled;
// Container Activity must implement this interface // Container Activity must implement this interface
public interface OnClickListener { public interface OnClickListener {
@ -40,6 +44,25 @@ public class InputModFragment extends Fragment {
mPrefs = PreferenceManager mPrefs = PreferenceManager
.getDefaultSharedPreferences(parentActivity); .getDefaultSharedPreferences(parentActivity);
OnCheckedChangeListener modified_layout = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
mPrefs.edit()
.putBoolean("modified_key_layout", isChecked)
.commit();
}
};
switchModifiedLayoutEnabled = (Switch) getView().findViewById(
R.id.switchModifiedLayoutEnabled);
boolean layout = mPrefs.getBoolean(
"modified_key_layout", true);
if (layout) {
switchModifiedLayoutEnabled.setChecked(true);
} else {
switchModifiedLayoutEnabled.setChecked(false);
}
switchModifiedLayoutEnabled.setOnCheckedChangeListener(modified_layout);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
final TextView a_button_text = (TextView) getView() final TextView a_button_text = (TextView) getView()
@ -118,6 +141,9 @@ public class InputModFragment extends Fragment {
mapKeyCode("joystick", joystick_text); mapKeyCode("joystick", joystick_text);
} }
}); });
joystick.setEnabled(false);
mPrefs.edit().remove("joystick").commit();
// Still needs better support for identifying the entire stick
final TextView dpad_left_text = (TextView) getView() final TextView dpad_left_text = (TextView) getView()
.findViewById(R.id.dpad_left_key); .findViewById(R.id.dpad_left_key);
@ -176,7 +202,7 @@ public class InputModFragment extends Fragment {
} else { } else {
// Notify the user they got here by mistake switchModifiedLayoutEnabled.setEnabled(false);
} }
} }

View File

@ -47,18 +47,18 @@ public class MOGAInput
private static final int key_CONT_X = 0x0400; private static final int key_CONT_X = 0x0400;
int[] map = new int[] { int[] map = new int[] {
KeyEvent.KEYCODE_BUTTON_B, key_CONT_B, KeyEvent.KEYCODE_BUTTON_B, key_CONT_B,
KeyEvent.KEYCODE_BUTTON_A, key_CONT_A, KeyEvent.KEYCODE_BUTTON_A, key_CONT_A,
KeyEvent.KEYCODE_BUTTON_X, key_CONT_X, KeyEvent.KEYCODE_BUTTON_X, key_CONT_X,
KeyEvent.KEYCODE_BUTTON_Y, key_CONT_Y, KeyEvent.KEYCODE_BUTTON_Y, key_CONT_Y,
KeyEvent.KEYCODE_DPAD_UP, key_CONT_DPAD_UP, KeyEvent.KEYCODE_DPAD_UP, key_CONT_DPAD_UP,
KeyEvent.KEYCODE_DPAD_DOWN, key_CONT_DPAD_DOWN, KeyEvent.KEYCODE_DPAD_DOWN, key_CONT_DPAD_DOWN,
KeyEvent.KEYCODE_DPAD_LEFT, key_CONT_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_LEFT, key_CONT_DPAD_LEFT,
KeyEvent.KEYCODE_DPAD_RIGHT, key_CONT_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
KeyEvent.KEYCODE_BUTTON_START, key_CONT_START, KeyEvent.KEYCODE_BUTTON_START, key_CONT_START,
}; };
Activity act; Activity act;
public MOGAInput() public MOGAInput()
@ -98,9 +98,7 @@ public class MOGAInput
protected void onCreate(Activity act) protected void onCreate(Activity act)
{ {
this.act = act; this.act = act;
setModifiedKeys();
prefs = PreferenceManager
.getDefaultSharedPreferences(act.getApplicationContext());
mController = Controller.getInstance(act); mController = Controller.getInstance(act);
mController.init(); mController.init();
@ -145,41 +143,24 @@ public class MOGAInput
*/ */
} }
private int getModifiedKey(int KeyCode) { private void setModifiedKeys() {
if (prefs.getInt("a_button", -1) == KeyCode) { prefs = PreferenceManager
return KeyEvent.KEYCODE_BUTTON_A; .getDefaultSharedPreferences(act.getApplicationContext());
if (prefs.getBoolean("modified_key_layout", false)) {
map = new int[] {
prefs.getInt("b_button", KeyEvent.KEYCODE_BUTTON_B), key_CONT_B,
prefs.getInt("a_button", KeyEvent.KEYCODE_BUTTON_A), key_CONT_A,
prefs.getInt("x_button", KeyEvent.KEYCODE_BUTTON_X), key_CONT_X,
prefs.getInt("l_button", KeyEvent.KEYCODE_BUTTON_Y), key_CONT_Y,
prefs.getInt("dpad_up", KeyEvent.KEYCODE_DPAD_UP), key_CONT_DPAD_UP,
prefs.getInt("dpad_down", KeyEvent.KEYCODE_DPAD_DOWN), key_CONT_DPAD_DOWN,
prefs.getInt("dpad_left", KeyEvent.KEYCODE_DPAD_LEFT), key_CONT_DPAD_LEFT,
prefs.getInt("dpad_right", KeyEvent.KEYCODE_DPAD_RIGHT), key_CONT_DPAD_RIGHT,
prefs.getInt("start_button", KeyEvent.KEYCODE_BUTTON_START), key_CONT_START,
};
} }
if (prefs.getInt("b_button", -1) == KeyCode) {
return KeyEvent.KEYCODE_BUTTON_B;
}
if (prefs.getInt("x_button", -1) == KeyCode) {
return KeyEvent.KEYCODE_BUTTON_X;
}
if (prefs.getInt("y_button", -1) == KeyCode) {
return KeyEvent.KEYCODE_BUTTON_Y;
}
if (prefs.getInt("l_button", -1) == KeyCode) {
return KeyEvent.KEYCODE_BUTTON_L2;
}
if (prefs.getInt("r_button", -1) == KeyCode) {
return KeyEvent.KEYCODE_BUTTON_R2;
}
if (prefs.getInt("dpad_left", -1) == KeyCode) {
return KeyEvent.KEYCODE_DPAD_LEFT;
}
if (prefs.getInt("dpad_right", -1) == KeyCode) {
return KeyEvent.KEYCODE_DPAD_RIGHT;
}
if (prefs.getInt("dpad_up", -1) == KeyCode) {
return KeyEvent.KEYCODE_DPAD_UP;
}
if (prefs.getInt("dpad_down", -1) == KeyCode) {
return KeyEvent.KEYCODE_DPAD_DOWN;
}
if (prefs.getInt("start_button", -1) == KeyCode) {
return KeyEvent.KEYCODE_BUTTON_START;
}
return KeyCode;
} }
class ExampleControllerListener implements ControllerListener class ExampleControllerListener implements ControllerListener
@ -195,7 +176,7 @@ public class MOGAInput
JNIdc.hide_osd(); JNIdc.hide_osd();
for (int i = 0; i < map.length; i += 2) { for (int i = 0; i < map.length; i += 2) {
if (map[i + 0] == getModifiedKey(event.getKeyCode())) { if (map[i + 0] == event.getKeyCode()) {
if (event.getAction() == 0) //FIXME to const if (event.getAction() == 0) //FIXME to const
GL2JNIView.kcode_raw[playerNum] &= ~map[i + 1]; GL2JNIView.kcode_raw[playerNum] &= ~map[i + 1];
else else