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_height="wrap_content"
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" >

View File

@ -42,6 +42,7 @@
<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="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="map_keycode_title">Modify Controller</string>

View File

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

View File

@ -1,5 +1,6 @@
package com.reicast.emulator;
import de.ankri.views.Switch;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@ -14,12 +15,15 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;
public class InputModFragment extends Fragment {
private Activity parentActivity;
private SharedPreferences mPrefs;
private Switch switchModifiedLayoutEnabled;
// Container Activity must implement this interface
public interface OnClickListener {
@ -40,6 +44,25 @@ public class InputModFragment extends Fragment {
mPrefs = PreferenceManager
.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) {
final TextView a_button_text = (TextView) getView()
@ -118,6 +141,9 @@ public class InputModFragment extends Fragment {
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()
.findViewById(R.id.dpad_left_key);
@ -176,7 +202,7 @@ public class InputModFragment extends Fragment {
} 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;
int[] map = new int[] {
KeyEvent.KEYCODE_BUTTON_B, key_CONT_B,
KeyEvent.KEYCODE_BUTTON_A, key_CONT_A,
KeyEvent.KEYCODE_BUTTON_X, key_CONT_X,
KeyEvent.KEYCODE_BUTTON_Y, key_CONT_Y,
KeyEvent.KEYCODE_BUTTON_B, key_CONT_B,
KeyEvent.KEYCODE_BUTTON_A, key_CONT_A,
KeyEvent.KEYCODE_BUTTON_X, key_CONT_X,
KeyEvent.KEYCODE_BUTTON_Y, key_CONT_Y,
KeyEvent.KEYCODE_DPAD_UP, key_CONT_DPAD_UP,
KeyEvent.KEYCODE_DPAD_DOWN, key_CONT_DPAD_DOWN,
KeyEvent.KEYCODE_DPAD_LEFT, key_CONT_DPAD_LEFT,
KeyEvent.KEYCODE_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
KeyEvent.KEYCODE_DPAD_UP, key_CONT_DPAD_UP,
KeyEvent.KEYCODE_DPAD_DOWN, key_CONT_DPAD_DOWN,
KeyEvent.KEYCODE_DPAD_LEFT, key_CONT_DPAD_LEFT,
KeyEvent.KEYCODE_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
KeyEvent.KEYCODE_BUTTON_START, key_CONT_START,
};
KeyEvent.KEYCODE_BUTTON_START, key_CONT_START,
};
Activity act;
public MOGAInput()
@ -98,9 +98,7 @@ public class MOGAInput
protected void onCreate(Activity act)
{
this.act = act;
prefs = PreferenceManager
.getDefaultSharedPreferences(act.getApplicationContext());
setModifiedKeys();
mController = Controller.getInstance(act);
mController.init();
@ -145,41 +143,24 @@ public class MOGAInput
*/
}
private int getModifiedKey(int KeyCode) {
if (prefs.getInt("a_button", -1) == KeyCode) {
return KeyEvent.KEYCODE_BUTTON_A;
private void setModifiedKeys() {
prefs = PreferenceManager
.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
@ -195,7 +176,7 @@ public class MOGAInput
JNIdc.hide_osd();
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
GL2JNIView.kcode_raw[playerNum] &= ~map[i + 1];
else